From 8789dca1ec0f0e7227fbd4b6bf37ce783536998c Mon Sep 17 00:00:00 2001 From: Rene Stange Date: Fri, 18 Mar 2022 22:32:01 +0100 Subject: [PATCH] Maintain voice bank number per TG --- src/minidexed.cpp | 12 +++++++++--- src/minidexed.h | 1 + src/sysexfileloader.cpp | 23 +++++++---------------- src/sysexfileloader.h | 7 ++----- 4 files changed, 19 insertions(+), 24 deletions(-) diff --git a/src/minidexed.cpp b/src/minidexed.cpp index 7904769..9ab5416 100644 --- a/src/minidexed.cpp +++ b/src/minidexed.cpp @@ -49,6 +49,8 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt, for (unsigned i = 0; i < CConfig::ToneGenerators; i++) { + m_nVoiceBankID[i] = 0; + m_pTG[i] = new CDexedAdapter (CConfig::MaxNotes, pConfig->GetSampleRate ()); assert (m_pTG[i]); @@ -250,7 +252,10 @@ void CMiniDexed::BankSelectLSB (unsigned nBankLSB) return; } - m_SysExFileLoader.SelectVoiceBank (nBankLSB); + for (unsigned i = 0; i < CConfig::ToneGenerators; i++) + { + m_nVoiceBankID[i] = nBankLSB; + } m_UI.BankSelected (nBankLSB); } @@ -262,10 +267,11 @@ void CMiniDexed::ProgramChange (unsigned nProgram) return; } - uint8_t Buffer[156]; - m_SysExFileLoader.GetVoice (nProgram, Buffer); for (unsigned i = 0; i < CConfig::ToneGenerators; i++) { + uint8_t Buffer[156]; + m_SysExFileLoader.GetVoice (m_nVoiceBankID[i], nProgram, Buffer); + assert (m_pTG[i]); m_pTG[i]->loadVoiceParameters (Buffer); } diff --git a/src/minidexed.h b/src/minidexed.h index 3f5bd21..a008329 100644 --- a/src/minidexed.h +++ b/src/minidexed.h @@ -88,6 +88,7 @@ private: CConfig *m_pConfig; CDexedAdapter *m_pTG[CConfig::ToneGenerators]; + unsigned m_nVoiceBankID[CConfig::ToneGenerators]; CUserInterface m_UI; CSysExFileLoader m_SysExFileLoader; diff --git a/src/sysexfileloader.cpp b/src/sysexfileloader.cpp index a22a9a5..126703f 100644 --- a/src/sysexfileloader.cpp +++ b/src/sysexfileloader.cpp @@ -45,8 +45,7 @@ uint8_t CSysExFileLoader::s_DefaultVoice[SizeSingleVoice] = // FM-Piano }; CSysExFileLoader::CSysExFileLoader (const char *pDirName) -: m_DirName (pDirName), - m_nBankID (0) +: m_DirName (pDirName) { m_DirName += "/voice"; @@ -168,22 +167,14 @@ std::string CSysExFileLoader::GetBankName (unsigned nBankID) return "NO NAME"; } -void CSysExFileLoader::SelectVoiceBank (unsigned nBankID) +void CSysExFileLoader::GetVoice (unsigned nBankID, unsigned nVoiceID, uint8_t *pVoiceData) { - if (nBankID <= MaxVoiceBankID) - { - m_nBankID = nBankID; - } -} - -void CSysExFileLoader::GetVoice (unsigned nVoiceID, uint8_t *pVoiceData) -{ - if (nVoiceID <= VoicesPerBank) + if ( nBankID <= MaxVoiceBankID + && nVoiceID <= VoicesPerBank) { - assert (m_nBankID <= MaxVoiceBankID); - if (m_pVoiceBank[m_nBankID]) + if (m_pVoiceBank[nBankID]) { - DecodePackedVoice (m_pVoiceBank[m_nBankID]->Voice[nVoiceID], pVoiceData); + DecodePackedVoice (m_pVoiceBank[nBankID]->Voice[nVoiceID], pVoiceData); return; } @@ -191,7 +182,7 @@ void CSysExFileLoader::GetVoice (unsigned nVoiceID, uint8_t *pVoiceData) { // Use default voices_bank instead of s_DefaultVoice for bank 0, // if the bank was not successfully loaded from disk. - if (m_nBankID == 0) + if (nBankID == 0) { memcpy (pVoiceData, voices_bank[0][nVoiceID], SizeSingleVoice); diff --git a/src/sysexfileloader.h b/src/sysexfileloader.h index fb5d0e6..bf7c918 100644 --- a/src/sysexfileloader.h +++ b/src/sysexfileloader.h @@ -58,9 +58,8 @@ public: std::string GetBankName (unsigned nBankID); // 0 .. 127 - void SelectVoiceBank (unsigned nBankID); // 0 .. 127 - - void GetVoice (unsigned nVoiceID, // 0 .. 31 + void GetVoice (unsigned nBankID, // 0 .. 127 + unsigned nVoiceID, // 0 .. 31 uint8_t *pVoiceData); // returns unpacked format (156 bytes) private: @@ -72,8 +71,6 @@ private: TVoiceBank *m_pVoiceBank[MaxVoiceBankID+1]; std::string m_BankFileName[MaxVoiceBankID+1]; - unsigned m_nBankID; - static uint8_t s_DefaultVoice[SizeSingleVoice]; };