diff --git a/src/mididevice.cpp b/src/mididevice.cpp index 7f7d388..185a31c 100644 --- a/src/mididevice.cpp +++ b/src/mididevice.cpp @@ -816,9 +816,15 @@ void CMIDIDevice::HandleSystemExclusive(const uint8_t* pMessage, const size_t nL LOGERR("Unknown SysEx message."); break; case 100: - // load sysex-data into voice memory + // Load sysex-data into voice memory LOGDBG("One Voice bulk upload"); m_pSynthesizer->loadVoiceParameters(pMessage,nTG); + // Also update performance config so the new voice is not lost + if (m_pSynthesizer && m_pSynthesizer->GetPerformanceConfig()) { + uint8_t unpackedVoice[156]; + m_pSynthesizer->GetCurrentVoiceData(unpackedVoice, nTG); + m_pSynthesizer->GetPerformanceConfig()->SetVoiceDataToTxt(unpackedVoice, nTG); + } break; case 200: LOGDBG("Bank bulk upload."); diff --git a/src/minidexed.cpp b/src/minidexed.cpp index 51e6444..6c4c11e 100644 --- a/src/minidexed.cpp +++ b/src/minidexed.cpp @@ -2498,3 +2498,9 @@ bool CMiniDexed::InitNetwork() return false; } } + +void CMiniDexed::GetCurrentVoiceData(uint8_t* dest, unsigned nTG) { + if (nTG < m_nToneGenerators && m_pTG[nTG]) { + m_pTG[nTG]->getVoiceData(dest); + } +} diff --git a/src/minidexed.h b/src/minidexed.h index 8b0ee9d..55f45e8 100644 --- a/src/minidexed.h +++ b/src/minidexed.h @@ -244,9 +244,10 @@ public: bool InitNetwork(); void UpdateNetwork(); -public: void LoadPerformanceParameters(void); + void GetCurrentVoiceData(uint8_t* dest, unsigned nTG); + private: int16_t ApplyNoteLimits (int16_t pitch, unsigned nTG); // returns < 0 to ignore note uint8_t m_uchOPMask[CConfig::AllToneGenerators];