From c99e8249e9f8eec23c7c36a5ac4ac79a0030512b Mon Sep 17 00:00:00 2001 From: probonopd Date: Mon, 19 May 2025 20:56:08 +0000 Subject: [PATCH 1/3] MIDI CC 07 (Volume) on PCCH sets Master Volume\n\n- When MIDI CC 07 is received on the Performance Change Channel (PCCH) and PCCH is enabled, set the synth-wide Master Volume.\n- When PCCH is off, normal per-TG volume operation is preserved.\n- Adds a log message for traceability.\n\nSee: https://github.com/probonopd/MiniDexed/discussions/920#discussioncomment-13196467 --- src/mididevice.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/mididevice.cpp b/src/mididevice.cpp index 413dd13..9fa6a87 100644 --- a/src/mididevice.cpp +++ b/src/mididevice.cpp @@ -279,10 +279,18 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign { m_pSynthesizer->BankSelectLSBPerformance (pMessage[2]); } + else if (pMessage[1] == MIDI_CC_VOLUME) // CC 07 on PCCH: Master Volume + { + float fMasterVolume = (float)pMessage[2] / 127.0f; + m_pSynthesizer->setMasterVolume(fMasterVolume); + LOGNOTE("MIDI CC07 (Volume) on PCCH: Set Master Volume to %d (%.3f)", pMessage[2], fMasterVolume); + break; // Do not process further for TGs + } else { // Ignore any other CC messages at this time LOGNOTE("Ignoring CC %d (%d) on Performance Select Channel %d\n", pMessage[1], pMessage[2], nPerfCh); + break; // Already handled PCCH message } } } From 5c81b629a4c65dfd54ccb0aee6c919a24d199e8c Mon Sep 17 00:00:00 2001 From: probonopd Date: Tue, 20 May 2025 07:17:27 +0200 Subject: [PATCH 2/3] Do not process further for TGs --- src/mididevice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mididevice.cpp b/src/mididevice.cpp index 9fa6a87..1e96209 100644 --- a/src/mididevice.cpp +++ b/src/mididevice.cpp @@ -284,7 +284,7 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign float fMasterVolume = (float)pMessage[2] / 127.0f; m_pSynthesizer->setMasterVolume(fMasterVolume); LOGNOTE("MIDI CC07 (Volume) on PCCH: Set Master Volume to %d (%.3f)", pMessage[2], fMasterVolume); - break; // Do not process further for TGs + return; // Do not process further for TGs } else { From d903016cee9b2ede724626e75bbb9c929b690b93 Mon Sep 17 00:00:00 2001 From: probonopd Date: Tue, 20 May 2025 19:15:37 +0200 Subject: [PATCH 3/3] The crash is gone? --- src/mididevice.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/mididevice.cpp b/src/mididevice.cpp index 1e96209..8dd096d 100644 --- a/src/mididevice.cpp +++ b/src/mididevice.cpp @@ -279,12 +279,12 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign { m_pSynthesizer->BankSelectLSBPerformance (pMessage[2]); } - else if (pMessage[1] == MIDI_CC_VOLUME) // CC 07 on PCCH: Master Volume + else if (pMessage[1] == MIDI_CC_VOLUME && nLength == 3) // CC 07 on PCCH: Master Volume { - float fMasterVolume = (float)pMessage[2] / 127.0f; - m_pSynthesizer->setMasterVolume(fMasterVolume); - LOGNOTE("MIDI CC07 (Volume) on PCCH: Set Master Volume to %d (%.3f)", pMessage[2], fMasterVolume); - return; // Do not process further for TGs + float fMasterVolume = (float)pMessage[2] / 127.0f; + m_pSynthesizer->setMasterVolume(fMasterVolume); + LOGNOTE("MIDI CC07 (Volume) on PCCH: Set Master Volume to %d (%.3f)", pMessage[2], fMasterVolume); + return; // Do not process further for TGs } else {