Fix Audio Output Level Attenuator

Example for TG1: F0 43 10 04 1A 00 F7 to F0 43 10 04 1A 07 F7
tx812-performance
probonopd 2 weeks ago
parent 734f4a2ad3
commit b82fb73000
  1. 9
      src/mididevice.cpp
  2. 35
      src/uimenu.cpp

@ -423,9 +423,12 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign
m_pSynthesizer->setBreathControllerTarget(val, nTG); m_pSynthesizer->setBreathControllerTarget(val, nTG);
break; break;
case 26: // Audio Output Level Attenuator 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) LOGNOTE("MIDI-SYSEX: Set Audio Output Level Attenuator %d to %d", nTG, val & 0x0F);
m_pSynthesizer->setMasterVolume(maplong(val, 0, 7, 0, 1)); // 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; break;
case 64: // Master Tuning case 64: // Master Tuning
LOGNOTE("MIDI-SYSEX: Set Master Tuning"); LOGNOTE("MIDI-SYSEX: Set Master Tuning");

@ -1098,12 +1098,14 @@ string CUIMenu::GetOPValueString (unsigned nOPParameter, int nValue)
string CUIMenu::ToVolume (int nValue) string CUIMenu::ToVolume (int nValue)
{ {
static const size_t MaxChars = CConfig::LCDColumns-2; constexpr size_t NumSquares = 14;
char VolumeBar[MaxChars+1]; char VolumeBar[NumSquares + 1];
memset (VolumeBar, 0xFF, sizeof VolumeBar); // 0xFF is the block character size_t filled = (nValue * NumSquares + 63) / 127;
VolumeBar[nValue * MaxChars / 127] = '\0'; for (size_t i = 0; i < NumSquares; ++i) {
VolumeBar[i] = (i < filled) ? (char)0xFF : '.';
return VolumeBar; }
VolumeBar[NumSquares] = '\0';
return VolumeBar;
} }
string CUIMenu::ToPan (int nValue) string CUIMenu::ToPan (int nValue)
@ -1394,11 +1396,11 @@ void CUIMenu::PgmUpDownHandler (TMenuEvent Event)
|| voiceName == "----------" || voiceName == "----------"
|| voiceName == "~~~~~~~~~~" ) || voiceName == "~~~~~~~~~~" )
{ {
if (Event == MenuEventPgmUp) { if (Event == MenuEventStepUp) {
PgmUpDownHandler (MenuEventPgmUp); PgmUpDownHandler (MenuEventStepUp);
} }
if (Event == MenuEventPgmDown) { if (Event == MenuEventStepDown) {
PgmUpDownHandler (MenuEventPgmDown); PgmUpDownHandler (MenuEventStepDown);
} }
} }
} }
@ -2041,6 +2043,15 @@ void CUIMenu::EditMasterVolume(CUIMenu *pUIMenu, TMenuEvent Event)
default: default:
return; return;
} }
std::string valueStr = ToVolume(pUIMenu->m_pMiniDexed->GetMasterVolume127()); unsigned lcdCols = pUIMenu->m_pConfig->GetLCDColumns();
pUIMenu->m_pUI->DisplayWrite("Master Volume", "", valueStr.c_str(), nValue > rParam.Minimum, nValue < rParam.Maximum); 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);
} }

Loading…
Cancel
Save