From 66eb4481aeb9d4bc32058489c29aa8afacdaa623 Mon Sep 17 00:00:00 2001 From: probonopd Date: Thu, 1 May 2025 07:59:54 +0200 Subject: [PATCH] Logarithmic mapping for volume --- src/mididevice.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mididevice.cpp b/src/mididevice.cpp index 9e93e8c..a9d81e0 100644 --- a/src/mididevice.cpp +++ b/src/mididevice.cpp @@ -426,9 +426,9 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign { 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 - // Exponential mapping like on the TX816: 7=127, 6=63, 5=31, ... 0=0 + // Logarithmic mapping for volume unsigned attenVal = val & 0x07; - unsigned newVolume = (attenVal == 0) ? 0 : (127 >> (7 - attenVal)); + unsigned newVolume = (unsigned)(127.0 * pow(attenVal / 7.0, 2.0) + 0.5); m_pSynthesizer->SetVolume(newVolume, nTG); } break;