From f91db914f4ede44be5885ddd1002a508da7a3da5 Mon Sep 17 00:00:00 2001 From: Gergo Koteles Date: Thu, 7 Nov 2024 14:19:26 +0100 Subject: [PATCH] add sostenuto --- src/midi.h | 1 + src/mididevice.cpp | 4 ++++ src/minidexed.cpp | 9 +++++++++ src/minidexed.h | 1 + 4 files changed, 15 insertions(+) diff --git a/src/midi.h b/src/midi.h index a7607cd..19a94c2 100644 --- a/src/midi.h +++ b/src/midi.h @@ -37,6 +37,7 @@ #define MIDI_CC_BANK_SELECT_LSB 32 #define MIDI_CC_BANK_SUSTAIN 64 #define MIDI_CC_PORTAMENTO 65 +#define MIDI_CC_SOSTENUTO 66 #define MIDI_CC_RESONANCE 71 #define MIDI_CC_FREQUENCY_CUTOFF 74 #define MIDI_CC_REVERB_LEVEL 91 diff --git a/src/mididevice.cpp b/src/mididevice.cpp index fe9cce8..1d11e4f 100644 --- a/src/mididevice.cpp +++ b/src/mididevice.cpp @@ -421,6 +421,10 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign case MIDI_CC_BANK_SUSTAIN: m_pSynthesizer->setSustain (pMessage[2] >= 64, nTG); break; + + case MIDI_CC_SOSTENUTO: + m_pSynthesizer->setSostenuto (pMessage[2] >= 64, nTG); + break; case MIDI_CC_PORTAMENTO: m_pSynthesizer->setPortamentoMode (pMessage[2] >= 64, nTG); diff --git a/src/minidexed.cpp b/src/minidexed.cpp index 674fbb3..ff7116e 100644 --- a/src/minidexed.cpp +++ b/src/minidexed.cpp @@ -899,6 +899,15 @@ void CMiniDexed::setSustain(bool sustain, unsigned nTG) m_pTG[nTG]->setSustain (sustain); } +void CMiniDexed::setSostenuto(bool sostenuto, unsigned nTG) +{ + assert (nTG < CConfig::AllToneGenerators); + if (nTG >= m_nToneGenerators) return; // Not an active TG + + assert (m_pTG[nTG]); + m_pTG[nTG]->setSostenuto (sostenuto); +} + void CMiniDexed::panic(uint8_t value, unsigned nTG) { assert (nTG < CConfig::AllToneGenerators); diff --git a/src/minidexed.h b/src/minidexed.h index 4193ad8..86b3199 100644 --- a/src/minidexed.h +++ b/src/minidexed.h @@ -93,6 +93,7 @@ public: void keydown (int16_t pitch, uint8_t velocity, unsigned nTG); void setSustain (bool sustain, unsigned nTG); + void setSostenuto (bool sostenuto, unsigned nTG); void panic (uint8_t value, unsigned nTG); void notesOff (uint8_t value, unsigned nTG); void setModWheel (uint8_t value, unsigned nTG);