diff --git a/src/minidexed.cpp b/src/minidexed.cpp index 762cf3d..ce8f4d9 100644 --- a/src/minidexed.cpp +++ b/src/minidexed.cpp @@ -291,6 +291,20 @@ void CMiniDexed::SetVolume (unsigned nVolume, unsigned nTG) m_UI.VolumeChanged (nVolume, nTG); } +void CMiniDexed::SetMasterTune (int nMasterTune, unsigned nTG) +{ + if (!(-99 <= nMasterTune && nMasterTune <= 99)) + { + return; + } + + assert (nTG < CConfig::ToneGenerators); + assert (m_pTG[nTG]); + m_pTG[nTG]->setMasterTune ((int8_t) nMasterTune); + + m_UI.MasterTuneChanged (nMasterTune, nTG); +} + void CMiniDexed::SetMIDIChannel (uint8_t uchChannel, unsigned nTG) { assert (nTG < CConfig::ToneGenerators); diff --git a/src/minidexed.h b/src/minidexed.h index 144e53b..b4dccca 100644 --- a/src/minidexed.h +++ b/src/minidexed.h @@ -59,6 +59,7 @@ public: void BankSelectLSB (unsigned nBankLSB, unsigned nTG); void ProgramChange (unsigned nProgram, unsigned nTG); void SetVolume (unsigned nVolume, unsigned nTG); + void SetMasterTune (int nMasterTune, unsigned nTG); // -99 .. 99 void SetMIDIChannel (uint8_t uchChannel, unsigned nTG); void keyup (int16_t pitch, unsigned nTG); diff --git a/src/userinterface.cpp b/src/userinterface.cpp index ee9bf4b..38bb3b6 100644 --- a/src/userinterface.cpp +++ b/src/userinterface.cpp @@ -44,6 +44,7 @@ CUserInterface::CUserInterface (CMiniDexed *pMiniDexed, CGPIOManager *pGPIOManag m_nBank[nTG] = 0; m_nProgram[nTG] = 0; m_nVolume[nTG] = 0; + m_nMasterTune[nTG] = 0; m_uchMIDIChannel[nTG] = CMIDIDevice::Disabled; } } @@ -184,6 +185,25 @@ void CUserInterface::VolumeChanged (unsigned nVolume, unsigned nTG) } } +void CUserInterface::MasterTuneChanged (int nMasterTune, unsigned nTG) +{ + assert (-99 <= nMasterTune && nMasterTune <= 99); + assert (nTG < CConfig::ToneGenerators); + m_nMasterTune[nTG] = nMasterTune; + + if ( m_UIMode == UIModeMasterTune + && m_nTG == nTG) + { + CString TG; + TG.Format ("TG%u", nTG+1); + + CString String; + String.Format ("%d", nMasterTune); + + DisplayWrite (TG, "MASTER TUNE", "DETUNE", (const char *) String); + } +} + void CUserInterface::MIDIChannelChanged (uint8_t uchChannel, unsigned nTG) { assert (nTG < CConfig::ToneGenerators); @@ -344,6 +364,20 @@ void CUserInterface::EncoderEventHandler (CKY040::TEvent Event) m_pMiniDexed->SetVolume (nVolume, m_nTG); } break; + case UIModeMasterTune: { + int nMasterTune = m_nMasterTune[m_nTG] + nStep; + if (nMasterTune < -99) + { + nMasterTune = -99; + } + else if (nMasterTune > 99) + { + nMasterTune = 99; + } + + m_pMiniDexed->SetMasterTune (nMasterTune, m_nTG); + } break; + case UIModeMIDI: if ((uint8_t) (m_uchMIDIChannel[m_nTG] + nStep) < CMIDIDevice::ChannelUnknown) { diff --git a/src/userinterface.h b/src/userinterface.h index 05d7d61..06b3448 100644 --- a/src/userinterface.h +++ b/src/userinterface.h @@ -42,6 +42,7 @@ public: void BankSelected (unsigned nBankLSB, unsigned nTG); // 0 .. 127 void ProgramChanged (unsigned nProgram, unsigned nTG); // 0 .. 127 void VolumeChanged (unsigned nVolume, unsigned nTG); // 0 .. 127 + void MasterTuneChanged (int nMasterTune, unsigned nTG); // -99 .. 99 void MIDIChannelChanged (uint8_t uchChannel, unsigned nTG); private: @@ -65,6 +66,7 @@ private: UIModeVoiceSelect = UIModeStart, UIModeBankSelect, UIModeVolume, + UIModeMasterTune, UIModeMIDI, UIModeUnknown }; @@ -85,6 +87,7 @@ private: unsigned m_nBank[CConfig::ToneGenerators]; unsigned m_nProgram[CConfig::ToneGenerators]; unsigned m_nVolume[CConfig::ToneGenerators]; + int m_nMasterTune[CConfig::ToneGenerators]; uint8_t m_uchMIDIChannel[CConfig::ToneGenerators]; };