From da2410b68f2020ebea3a883c9896235182a482a2 Mon Sep 17 00:00:00 2001 From: probonopd Date: Sat, 26 Apr 2025 01:06:46 +0200 Subject: [PATCH] Scale sensitivity values from 0-15 to 0-99 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The TX216/TX816 style performance SysEx messages send Sensitivity parameters (such as Mod Wheel Sensitivity, Foot Controller Sensitivity, Aftertouch Sensitivity, Breath Controller Sensitivity) in the range 0–15, but the DX7 and the Synth_Dexed engine might expect these values in the range 0–99 (or not?) --- src/mididevice.cpp | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/src/mididevice.cpp b/src/mididevice.cpp index d12c4ec..c523135 100644 --- a/src/mididevice.cpp +++ b/src/mididevice.cpp @@ -379,33 +379,45 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign m_pSynthesizer->setPortamentoMode(val, nTG); break; case 9: // Mod Wheel Sensitivity - LOGNOTE("MIDI-SYSEX: Set Mod Wheel Sensitivity %d to %d", nTG, val & 0x0F); - m_pSynthesizer->setModWheelRange(val, nTG); - break; + { + int scaled = (val * 99) / 15; + LOGNOTE("MIDI-SYSEX: Set Mod Wheel Sensitivity %d to %d (scaled %d)", nTG, val & 0x0F, scaled); + m_pSynthesizer->setModWheelRange(scaled, nTG); + } + break; case 10: // Mod Wheel Assign LOGNOTE("MIDI-SYSEX: Set Mod Wheel Assign %d to %d", nTG, val & 0x0F); m_pSynthesizer->setModWheelTarget(val, nTG); break; case 11: // Foot Controller Sensitivity - LOGNOTE("MIDI-SYSEX: Set Foot Controller Sensitivity %d to %d", nTG, val & 0x0F); - m_pSynthesizer->setFootControllerRange(val, nTG); - break; + { + int scaled = (val * 99) / 15; + LOGNOTE("MIDI-SYSEX: Set Foot Controller Sensitivity %d to %d (scaled %d)", nTG, val & 0x0F, scaled); + m_pSynthesizer->setFootControllerRange(scaled, nTG); + } + break; case 12: // Foot Controller Assign LOGNOTE("MIDI-SYSEX: Set Foot Controller Assign %d to %d", nTG, val & 0x0F); m_pSynthesizer->setFootControllerTarget(val, nTG); break; case 13: // Aftertouch Sensitivity - LOGNOTE("MIDI-SYSEX: Set Aftertouch Sensitivity %d to %d", nTG, val & 0x0F); - m_pSynthesizer->setAftertouchRange(val, nTG); - break; + { + int scaled = (val * 99) / 15; + LOGNOTE("MIDI-SYSEX: Set Aftertouch Sensitivity %d to %d (scaled %d)", nTG, val & 0x0F, scaled); + m_pSynthesizer->setAftertouchRange(scaled, nTG); + } + break; case 14: // Aftertouch Assign LOGNOTE("MIDI-SYSEX: Set Aftertouch Assign %d to %d", nTG, val & 0x0F); m_pSynthesizer->setAftertouchTarget(val, nTG); break; case 15: // Breath Controller Sensitivity - LOGNOTE("MIDI-SYSEX: Set Breath Controller Sensitivity %d to %d", nTG, val & 0x0F); - m_pSynthesizer->setBreathControllerRange(val, nTG); - break; + { + int scaled = (val * 99) / 15; + LOGNOTE("MIDI-SYSEX: Set Breath Controller Sensitivity %d to %d (scaled %d)", nTG, val & 0x0F, scaled); + m_pSynthesizer->setBreathControllerRange(scaled, nTG); + } + break; case 16: // Breath Controller Assign LOGNOTE("MIDI-SYSEX: Set Breath Controller Assign %d to %d", nTG, val & 0x0F); m_pSynthesizer->setBreathControllerTarget(val, nTG);