From b82fb73000560d744168ad288cc52011dd3e35db Mon Sep 17 00:00:00 2001 From: probonopd Date: Mon, 28 Apr 2025 18:58:48 +0200 Subject: [PATCH] Fix Audio Output Level Attenuator Example for TG1: F0 43 10 04 1A 00 F7 to F0 43 10 04 1A 07 F7 --- src/mididevice.cpp | 9 ++++++--- src/uimenu.cpp | 35 +++++++++++++++++++++++------------ 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/mididevice.cpp b/src/mididevice.cpp index 921e1c4..c19c320 100644 --- a/src/mididevice.cpp +++ b/src/mididevice.cpp @@ -423,9 +423,12 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign m_pSynthesizer->setBreathControllerTarget(val, nTG); break; case 26: // Audio Output Level Attenuator - LOGNOTE("MIDI-SYSEX: Set Audio Output Level Attenuator %d to %d", nTG, val & 0x0F); - // Set Master volume (0-99) for the TG. Scale from 0-7 to what Synth_Dexed uses (0-99) - m_pSynthesizer->setMasterVolume(maplong(val, 0, 7, 0, 1)); + { + LOGNOTE("MIDI-SYSEX: Set Audio Output Level Attenuator %d to %d", nTG, val & 0x0F); + // Example: F0 43 10 04 1A 00 F7 to F0 43 10 04 1A 07 F7 + unsigned newVolume = (unsigned)((val & 0x07) * 127 / 7); + m_pSynthesizer->SetVolume(newVolume, nTG); + } break; case 64: // Master Tuning LOGNOTE("MIDI-SYSEX: Set Master Tuning"); diff --git a/src/uimenu.cpp b/src/uimenu.cpp index dabea87..6c20ed9 100644 --- a/src/uimenu.cpp +++ b/src/uimenu.cpp @@ -1098,12 +1098,14 @@ string CUIMenu::GetOPValueString (unsigned nOPParameter, int nValue) string CUIMenu::ToVolume (int nValue) { - static const size_t MaxChars = CConfig::LCDColumns-2; - char VolumeBar[MaxChars+1]; - memset (VolumeBar, 0xFF, sizeof VolumeBar); // 0xFF is the block character - VolumeBar[nValue * MaxChars / 127] = '\0'; - - return VolumeBar; + constexpr size_t NumSquares = 14; + char VolumeBar[NumSquares + 1]; + size_t filled = (nValue * NumSquares + 63) / 127; + for (size_t i = 0; i < NumSquares; ++i) { + VolumeBar[i] = (i < filled) ? (char)0xFF : '.'; + } + VolumeBar[NumSquares] = '\0'; + return VolumeBar; } string CUIMenu::ToPan (int nValue) @@ -1394,11 +1396,11 @@ void CUIMenu::PgmUpDownHandler (TMenuEvent Event) || voiceName == "----------" || voiceName == "~~~~~~~~~~" ) { - if (Event == MenuEventPgmUp) { - PgmUpDownHandler (MenuEventPgmUp); + if (Event == MenuEventStepUp) { + PgmUpDownHandler (MenuEventStepUp); } - if (Event == MenuEventPgmDown) { - PgmUpDownHandler (MenuEventPgmDown); + if (Event == MenuEventStepDown) { + PgmUpDownHandler (MenuEventStepDown); } } } @@ -2041,6 +2043,15 @@ void CUIMenu::EditMasterVolume(CUIMenu *pUIMenu, TMenuEvent Event) default: return; } - std::string valueStr = ToVolume(pUIMenu->m_pMiniDexed->GetMasterVolume127()); - pUIMenu->m_pUI->DisplayWrite("Master Volume", "", valueStr.c_str(), nValue > rParam.Minimum, nValue < rParam.Maximum); + unsigned lcdCols = pUIMenu->m_pConfig->GetLCDColumns(); + unsigned barLen = (lcdCols > 2) ? lcdCols - 2 : 0; + std::string valueStr(barLen, '.'); + if (barLen > 0) { + size_t filled = (nValue * barLen + 63) / 127; + for (unsigned i = 0; i < barLen; ++i) { + if (i < filled) valueStr[i] = (char)0xFF; + } + } + // Do NOT add < or > here; let DisplayWrite handle it + pUIMenu->m_pUI->DisplayWrite("Master Volume", "", valueStr.c_str(), true, true); }