Part 2 performance loading

Very basic part 2 performance load implementation.
Performane > Load Part 2 loads the performance into to TG 9-16 and adds 8 to each TG channel.
This is just a test of how it sounds this way.
In this implementation part 2 uses the same reverb chain as part 1, so it doesn't sound very good.

ToneGenerators=16 should be added to the minidexed.ini so you need rpi4 or rpi5.
pull/950/head
Gergo Koteles 1 week ago
parent d750330eb2
commit f584983fb8
  1. 125
      src/minidexed.cpp
  2. 9
      src/minidexed.h
  3. 16
      src/uimenu.cpp

@ -70,10 +70,12 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt,
m_bSavePerformance (false), m_bSavePerformance (false),
m_bSavePerformanceNewFile (false), m_bSavePerformanceNewFile (false),
m_bSetNewPerformance (false), m_bSetNewPerformance (false),
m_bSetNewPerformance2 (false),
m_bSetNewPerformanceBank (false), m_bSetNewPerformanceBank (false),
m_bSetFirstPerformance (false), m_bSetFirstPerformance (false),
m_bDeletePerformance (false), m_bDeletePerformance (false),
m_bLoadPerformanceBusy(false), m_bLoadPerformanceBusy(false),
m_bLoadPerformanceBusy2(false),
m_bLoadPerformanceBankBusy(false) m_bLoadPerformanceBankBusy(false)
{ {
assert (m_pConfig); assert (m_pConfig);
@ -329,7 +331,7 @@ bool CMiniDexed::Initialize (void)
m_PerformanceConfig.Init(m_nToneGenerators); m_PerformanceConfig.Init(m_nToneGenerators);
if (m_PerformanceConfig.Load ()) if (m_PerformanceConfig.Load ())
{ {
LoadPerformanceParameters(); LoadPerformanceParameters(0);
} }
else else
{ {
@ -447,6 +449,16 @@ void CMiniDexed::Process (bool bPlugAndPlayUpdated)
} }
pScheduler->Yield(); pScheduler->Yield();
} }
if (m_bSetNewPerformance2 && !m_bSetNewPerformanceBank && !m_bLoadPerformanceBusy2 && !m_bLoadPerformanceBankBusy)
{
DoSetNewPerformance2 ();
if (m_nSetNewPerformanceID2 == GetActualPerformanceID())
{
m_bSetNewPerformance2 = false;
}
pScheduler->Yield();
}
if(m_bDeletePerformance) if(m_bDeletePerformance)
{ {
@ -1945,6 +1957,14 @@ bool CMiniDexed::SetNewPerformance(unsigned nID)
return true; return true;
} }
bool CMiniDexed::SetNewPerformance2(unsigned nID)
{
m_bSetNewPerformance2 = true;
m_nSetNewPerformanceID2 = nID;
return true;
}
bool CMiniDexed::SetNewPerformanceBank(unsigned nBankID) bool CMiniDexed::SetNewPerformanceBank(unsigned nBankID)
{ {
m_bSetNewPerformanceBank = true; m_bSetNewPerformanceBank = true;
@ -1968,7 +1988,7 @@ bool CMiniDexed::DoSetNewPerformance (void)
if (m_PerformanceConfig.Load ()) if (m_PerformanceConfig.Load ())
{ {
LoadPerformanceParameters(); LoadPerformanceParameters(0);
m_bLoadPerformanceBusy = false; m_bLoadPerformanceBusy = false;
return true; return true;
} }
@ -1980,6 +2000,27 @@ bool CMiniDexed::DoSetNewPerformance (void)
} }
} }
bool CMiniDexed::DoSetNewPerformance2 (void)
{
m_bLoadPerformanceBusy2 = true;
unsigned nID = m_nSetNewPerformanceID2;
m_PerformanceConfig.SetNewPerformance(nID);
if (m_PerformanceConfig.Load ())
{
LoadPerformanceParameters(1);
m_bLoadPerformanceBusy2 = false;
return true;
}
else
{
SetMIDIChannel (CMIDIDevice::OmniMode, 0);
m_bLoadPerformanceBusy2 = false;
return false;
}
}
bool CMiniDexed::DoSetNewPerformanceBank (void) bool CMiniDexed::DoSetNewPerformanceBank (void)
{ {
m_bLoadPerformanceBankBusy = true; m_bLoadPerformanceBankBusy = true;
@ -2026,50 +2067,63 @@ bool CMiniDexed::DoSavePerformanceNewFile (void)
} }
void CMiniDexed::LoadPerformanceParameters(void) void CMiniDexed::LoadPerformanceParameters(unsigned part)
{ {
for (unsigned nTG = 0; nTG < CConfig::AllToneGenerators; nTG++) for (unsigned nTG = 0; nTG < CConfig::AllToneGenerators; nTG++)
{ {
unsigned nTargetTG = part * 8 + nTG;
BankSelect (m_PerformanceConfig.GetBankNumber (nTG), nTG); unsigned nChannel = m_PerformanceConfig.GetMIDIChannel (nTG);
ProgramChange (m_PerformanceConfig.GetVoiceNumber (nTG), nTG);
SetMIDIChannel (m_PerformanceConfig.GetMIDIChannel (nTG), nTG); if (nTargetTG >= CConfig::AllToneGenerators)
SetVolume (m_PerformanceConfig.GetVolume (nTG), nTG); break;
SetPan (m_PerformanceConfig.GetPan (nTG), nTG);
SetMasterTune (m_PerformanceConfig.GetDetune (nTG), nTG); if (part == 0 && nTG >= 8 && nChannel == CMIDIDevice::Disabled)
SetCutoff (m_PerformanceConfig.GetCutoff (nTG), nTG); continue;
SetResonance (m_PerformanceConfig.GetResonance (nTG), nTG);
setPitchbendRange (m_PerformanceConfig.GetPitchBendRange (nTG), nTG); if (part == 1 && nChannel + 8 < CMIDIDevice::Channels)
setPitchbendStep (m_PerformanceConfig.GetPitchBendStep (nTG), nTG); nChannel += 8;
setPortamentoMode (m_PerformanceConfig.GetPortamentoMode (nTG), nTG);
setPortamentoGlissando (m_PerformanceConfig.GetPortamentoGlissando (nTG), nTG); BankSelect (m_PerformanceConfig.GetBankNumber (nTG), nTargetTG);
setPortamentoTime (m_PerformanceConfig.GetPortamentoTime (nTG), nTG); ProgramChange (m_PerformanceConfig.GetVoiceNumber (nTG), nTargetTG);
SetMIDIChannel (nChannel, nTargetTG);
m_nNoteLimitLow[nTG] = m_PerformanceConfig.GetNoteLimitLow (nTG); SetVolume (m_PerformanceConfig.GetVolume (nTG), nTargetTG);
m_nNoteLimitHigh[nTG] = m_PerformanceConfig.GetNoteLimitHigh (nTG); SetPan (m_PerformanceConfig.GetPan (nTG), nTargetTG);
m_nNoteShift[nTG] = m_PerformanceConfig.GetNoteShift (nTG); SetMasterTune (m_PerformanceConfig.GetDetune (nTG), nTargetTG);
SetCutoff (m_PerformanceConfig.GetCutoff (nTG), nTargetTG);
SetResonance (m_PerformanceConfig.GetResonance (nTG), nTargetTG);
setPitchbendRange (m_PerformanceConfig.GetPitchBendRange (nTG), nTargetTG);
setPitchbendStep (m_PerformanceConfig.GetPitchBendStep (nTG), nTargetTG);
setPortamentoMode (m_PerformanceConfig.GetPortamentoMode (nTG), nTargetTG);
setPortamentoGlissando (m_PerformanceConfig.GetPortamentoGlissando (nTG), nTargetTG);
setPortamentoTime (m_PerformanceConfig.GetPortamentoTime (nTG), nTargetTG);
m_nNoteLimitLow[nTargetTG] = m_PerformanceConfig.GetNoteLimitLow (nTG);
m_nNoteLimitHigh[nTargetTG] = m_PerformanceConfig.GetNoteLimitHigh (nTG);
m_nNoteShift[nTargetTG] = m_PerformanceConfig.GetNoteShift (nTG);
if(m_PerformanceConfig.VoiceDataFilled(nTG)) if(m_PerformanceConfig.VoiceDataFilled(nTG))
{ {
uint8_t* tVoiceData = m_PerformanceConfig.GetVoiceDataFromTxt(nTG); uint8_t* tVoiceData = m_PerformanceConfig.GetVoiceDataFromTxt(nTG);
m_pTG[nTG]->loadVoiceParameters(tVoiceData); m_pTG[nTargetTG]->loadVoiceParameters(tVoiceData);
setOPMask(0b111111, nTG); setOPMask(0b111111, nTargetTG);
} }
setMonoMode(m_PerformanceConfig.GetMonoMode(nTG) ? 1 : 0, nTG); setMonoMode(m_PerformanceConfig.GetMonoMode(nTG) ? 1 : 0, nTargetTG);
SetReverbSend (m_PerformanceConfig.GetReverbSend (nTG), nTG); SetReverbSend (m_PerformanceConfig.GetReverbSend (nTG), nTargetTG);
setModWheelRange (m_PerformanceConfig.GetModulationWheelRange (nTG), nTG); setModWheelRange (m_PerformanceConfig.GetModulationWheelRange (nTG), nTargetTG);
setModWheelTarget (m_PerformanceConfig.GetModulationWheelTarget (nTG), nTG); setModWheelTarget (m_PerformanceConfig.GetModulationWheelTarget (nTG), nTargetTG);
setFootControllerRange (m_PerformanceConfig.GetFootControlRange (nTG), nTG); setFootControllerRange (m_PerformanceConfig.GetFootControlRange (nTG), nTargetTG);
setFootControllerTarget (m_PerformanceConfig.GetFootControlTarget (nTG), nTG); setFootControllerTarget (m_PerformanceConfig.GetFootControlTarget (nTG), nTargetTG);
setBreathControllerRange (m_PerformanceConfig.GetBreathControlRange (nTG), nTG); setBreathControllerRange (m_PerformanceConfig.GetBreathControlRange (nTG), nTargetTG);
setBreathControllerTarget (m_PerformanceConfig.GetBreathControlTarget (nTG), nTG); setBreathControllerTarget (m_PerformanceConfig.GetBreathControlTarget (nTG), nTargetTG);
setAftertouchRange (m_PerformanceConfig.GetAftertouchRange (nTG), nTG); setAftertouchRange (m_PerformanceConfig.GetAftertouchRange (nTG), nTargetTG);
setAftertouchTarget (m_PerformanceConfig.GetAftertouchTarget (nTG), nTG); setAftertouchTarget (m_PerformanceConfig.GetAftertouchTarget (nTG), nTargetTG);
} }
if (part == 0)
{
// Effects // Effects
SetParameter (ParameterCompressorEnable, m_PerformanceConfig.GetCompressorEnable () ? 1 : 0); SetParameter (ParameterCompressorEnable, m_PerformanceConfig.GetCompressorEnable () ? 1 : 0);
SetParameter (ParameterReverbEnable, m_PerformanceConfig.GetReverbEnable () ? 1 : 0); SetParameter (ParameterReverbEnable, m_PerformanceConfig.GetReverbEnable () ? 1 : 0);
@ -2079,8 +2133,9 @@ void CMiniDexed::LoadPerformanceParameters(void)
SetParameter (ParameterReverbLowPass, m_PerformanceConfig.GetReverbLowPass ()); SetParameter (ParameterReverbLowPass, m_PerformanceConfig.GetReverbLowPass ());
SetParameter (ParameterReverbDiffusion, m_PerformanceConfig.GetReverbDiffusion ()); SetParameter (ParameterReverbDiffusion, m_PerformanceConfig.GetReverbDiffusion ());
SetParameter (ParameterReverbLevel, m_PerformanceConfig.GetReverbLevel ()); SetParameter (ParameterReverbLevel, m_PerformanceConfig.GetReverbLevel ());
}
m_UI.DisplayChanged (); m_UI.DisplayChanged ();
} }
std::string CMiniDexed::GetNewPerformanceDefaultName(void) std::string CMiniDexed::GetNewPerformanceDefaultName(void)
@ -2137,7 +2192,7 @@ bool CMiniDexed::DoDeletePerformance(void)
{ {
if (m_PerformanceConfig.Load ()) if (m_PerformanceConfig.Load ())
{ {
LoadPerformanceParameters(); LoadPerformanceParameters(0);
return true; return true;
} }
else else

@ -141,6 +141,7 @@ public:
unsigned GetActualPerformanceBankID(); unsigned GetActualPerformanceBankID();
void SetActualPerformanceBankID(unsigned nBankID); void SetActualPerformanceBankID(unsigned nBankID);
bool SetNewPerformance(unsigned nID); bool SetNewPerformance(unsigned nID);
bool SetNewPerformance2(unsigned nID);
bool SetNewPerformanceBank(unsigned nBankID); bool SetNewPerformanceBank(unsigned nBankID);
void SetFirstPerformance(void); void SetFirstPerformance(void);
void DoSetFirstPerformance(void); void DoSetFirstPerformance(void);
@ -148,6 +149,7 @@ public:
bool DoSavePerformanceNewFile (void); bool DoSavePerformanceNewFile (void);
bool DoSetNewPerformance (void); bool DoSetNewPerformance (void);
bool DoSetNewPerformance2 (void);
bool DoSetNewPerformanceBank (void); bool DoSetNewPerformanceBank (void);
bool GetPerformanceSelectToLoad(void); bool GetPerformanceSelectToLoad(void);
bool SavePerformance (bool bSaveAsDeault); bool SavePerformance (bool bSaveAsDeault);
@ -247,7 +249,7 @@ public:
private: private:
int16_t ApplyNoteLimits (int16_t pitch, unsigned nTG); // returns < 0 to ignore note int16_t ApplyNoteLimits (int16_t pitch, unsigned nTG); // returns < 0 to ignore note
uint8_t m_uchOPMask[CConfig::AllToneGenerators]; uint8_t m_uchOPMask[CConfig::AllToneGenerators];
void LoadPerformanceParameters(void); void LoadPerformanceParameters(unsigned part);
void ProcessSound (void); void ProcessSound (void);
const char* GetNetworkDeviceShortName() const; const char* GetNetworkDeviceShortName() const;
@ -355,13 +357,16 @@ private:
bool m_bSavePerformance; bool m_bSavePerformance;
bool m_bSavePerformanceNewFile; bool m_bSavePerformanceNewFile;
bool m_bSetNewPerformance; bool m_bSetNewPerformance;
unsigned m_nSetNewPerformanceID; bool m_bSetNewPerformance2;
unsigned m_nSetNewPerformanceID;
unsigned m_nSetNewPerformanceID2;
bool m_bSetNewPerformanceBank; bool m_bSetNewPerformanceBank;
unsigned m_nSetNewPerformanceBankID; unsigned m_nSetNewPerformanceBankID;
bool m_bSetFirstPerformance; bool m_bSetFirstPerformance;
bool m_bDeletePerformance; bool m_bDeletePerformance;
unsigned m_nDeletePerformanceID; unsigned m_nDeletePerformanceID;
bool m_bLoadPerformanceBusy; bool m_bLoadPerformanceBusy;
bool m_bLoadPerformanceBusy2;
bool m_bLoadPerformanceBankBusy; bool m_bLoadPerformanceBankBusy;
bool m_bSaveAsDeault; bool m_bSaveAsDeault;
}; };

@ -338,6 +338,7 @@ static const unsigned NoteC3 = 39;
const CUIMenu::TMenuItem CUIMenu::s_PerformanceMenu[] = const CUIMenu::TMenuItem CUIMenu::s_PerformanceMenu[] =
{ {
{"Load", PerformanceMenu, 0, 0}, {"Load", PerformanceMenu, 0, 0},
{"Load Part 2", PerformanceMenu, 0, 2},
{"Save", MenuHandler, s_SaveMenu}, {"Save", MenuHandler, s_SaveMenu},
{"Delete", PerformanceMenu, 0, 1}, {"Delete", PerformanceMenu, 0, 1},
{"Bank", EditPerformanceBankNumber, 0, 0}, {"Bank", EditPerformanceBankNumber, 0, 0},
@ -1616,6 +1617,10 @@ void CUIMenu::PerformanceMenu (CUIMenu *pUIMenu, TMenuEvent Event)
{ {
pUIMenu->m_pMiniDexed->SetNewPerformance(nValue); pUIMenu->m_pMiniDexed->SetNewPerformance(nValue);
} }
if (!bPerformanceSelectToLoad && pUIMenu->m_nCurrentParameter==2)
{
pUIMenu->m_pMiniDexed->SetNewPerformance2(nValue);
}
break; break;
case MenuEventStepUp: case MenuEventStepUp:
@ -1636,6 +1641,10 @@ void CUIMenu::PerformanceMenu (CUIMenu *pUIMenu, TMenuEvent Event)
{ {
pUIMenu->m_pMiniDexed->SetNewPerformance(nValue); pUIMenu->m_pMiniDexed->SetNewPerformance(nValue);
} }
if (!bPerformanceSelectToLoad && pUIMenu->m_nCurrentParameter==2)
{
pUIMenu->m_pMiniDexed->SetNewPerformance2(nValue);
}
break; break;
case MenuEventPressAndStepDown: case MenuEventPressAndStepDown:
@ -1690,6 +1699,13 @@ void CUIMenu::PerformanceMenu (CUIMenu *pUIMenu, TMenuEvent Event)
pUIMenu->m_bPerformanceDeleteMode=true; pUIMenu->m_bPerformanceDeleteMode=true;
pUIMenu->m_bConfirmDeletePerformance=false; pUIMenu->m_bConfirmDeletePerformance=false;
} }
break;
case 2:
if (bPerformanceSelectToLoad)
{
pUIMenu->m_pMiniDexed->SetNewPerformance2(nValue);
}
break; break;
default: default:
break; break;

Loading…
Cancel
Save