From f03e3887213a2e3ad4f049d80d66edfa24318561 Mon Sep 17 00:00:00 2001 From: probonopd Date: Mon, 28 Apr 2025 21:10:07 +0200 Subject: [PATCH 1/2] Fix operator enable/disable (#896) Enable/disable operators, closes #872 by calling m_pSynthesizer->setOPMask --- src/mididevice.cpp | 22 ++++++++++++++-------- updater.py | 4 ++-- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/mididevice.cpp b/src/mididevice.cpp index d657103..0695245 100644 --- a/src/mididevice.cpp +++ b/src/mididevice.cpp @@ -718,14 +718,20 @@ void CMIDIDevice::HandleSystemExclusive(const uint8_t* pMessage, const size_t nL default: if(sysex_return >= 300 && sysex_return < 500) { - LOGDBG("SysEx voice parameter change: Parameter %d value: %d",pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5]); - m_pSynthesizer->setVoiceDataElement(pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5],nTG); - switch(pMessage[4] + ((pMessage[3] & 0x03) * 128)) - { - case 134: - m_pSynthesizer->notesOff(0,nTG); - break; - } + uint8_t param = pMessage[4] + ((pMessage[3] & 0x03) * 128); + if(param == 155) { + LOGDBG("Operators enabled: %d%d%d%d%d%d", (pMessage[5] & 0x20) ? 1 : 0, (pMessage[5] & 0x10) ? 1 : 0, (pMessage[5] & 0x08) ? 1 : 0, (pMessage[5] & 0x04) ? 1 : 0, (pMessage[5] & 0x02) ? 1 : 0, (pMessage[5] & 0x01) ? 1 : 0); + m_pSynthesizer->setOPMask(pMessage[5], nTG); + } else { + LOGDBG("SysEx voice parameter change: Parameter %d value: %d",pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5]); + m_pSynthesizer->setVoiceDataElement(pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5],nTG); + switch(pMessage[4] + ((pMessage[3] & 0x03) * 128)) + { + case 134: + m_pSynthesizer->notesOff(0,nTG); + break; + } + } } else if(sysex_return >= 500 && sysex_return < 600) { diff --git a/updater.py b/updater.py index a88228c..30e6749 100644 --- a/updater.py +++ b/updater.py @@ -1,5 +1,5 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- # Updater for MiniDexed From e6aab619206d779bde2f34be6af315a1e8f91097 Mon Sep 17 00:00:00 2001 From: probonopd Date: Mon, 28 Apr 2025 22:19:54 +0200 Subject: [PATCH 2/2] Simplify code structure As suggested by @soyersoyer in https://github.com/probonopd/MiniDexed/pull/896#issuecomment-2836244015 --- src/mididevice.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/mididevice.cpp b/src/mididevice.cpp index 0695245..576821f 100644 --- a/src/mididevice.cpp +++ b/src/mididevice.cpp @@ -715,23 +715,22 @@ void CMIDIDevice::HandleSystemExclusive(const uint8_t* pMessage, const size_t nL //TODO: add code for storing a bank bulk upload LOGNOTE("Currently code for storing a bulk bank upload is missing!"); break; + case 455: + // Parameter 155 + 300 added by Synth_Dexed = 455 + LOGDBG("Operators enabled: %d%d%d%d%d%d", (pMessage[5] & 0x20) ? 1 : 0, (pMessage[5] & 0x10) ? 1 : 0, (pMessage[5] & 0x08) ? 1 : 0, (pMessage[5] & 0x04) ? 1 : 0, (pMessage[5] & 0x02) ? 1 : 0, (pMessage[5] & 0x01) ? 1 : 0); + m_pSynthesizer->setOPMask(pMessage[5], nTG); + break; default: if(sysex_return >= 300 && sysex_return < 500) { - uint8_t param = pMessage[4] + ((pMessage[3] & 0x03) * 128); - if(param == 155) { - LOGDBG("Operators enabled: %d%d%d%d%d%d", (pMessage[5] & 0x20) ? 1 : 0, (pMessage[5] & 0x10) ? 1 : 0, (pMessage[5] & 0x08) ? 1 : 0, (pMessage[5] & 0x04) ? 1 : 0, (pMessage[5] & 0x02) ? 1 : 0, (pMessage[5] & 0x01) ? 1 : 0); - m_pSynthesizer->setOPMask(pMessage[5], nTG); - } else { - LOGDBG("SysEx voice parameter change: Parameter %d value: %d",pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5]); - m_pSynthesizer->setVoiceDataElement(pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5],nTG); - switch(pMessage[4] + ((pMessage[3] & 0x03) * 128)) - { - case 134: - m_pSynthesizer->notesOff(0,nTG); - break; - } - } + LOGDBG("SysEx voice parameter change: Parameter %d value: %d",pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5]); + m_pSynthesizer->setVoiceDataElement(pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5],nTG); + switch(pMessage[4] + ((pMessage[3] & 0x03) * 128)) + { + case 134: + m_pSynthesizer->notesOff(0,nTG); + break; + } } else if(sysex_return >= 500 && sysex_return < 600) {