pull/950/merge
soyer 6 days ago committed by GitHub
commit cd370df821
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  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_bSavePerformanceNewFile (false),
m_bSetNewPerformance (false),
m_bSetNewPerformance2 (false),
m_bSetNewPerformanceBank (false),
m_bSetFirstPerformance (false),
m_bDeletePerformance (false),
m_bLoadPerformanceBusy(false),
m_bLoadPerformanceBusy2(false),
m_bLoadPerformanceBankBusy(false)
{
assert (m_pConfig);
@ -329,7 +331,7 @@ bool CMiniDexed::Initialize (void)
m_PerformanceConfig.Init(m_nToneGenerators);
if (m_PerformanceConfig.Load ())
{
LoadPerformanceParameters();
LoadPerformanceParameters(0);
}
else
{
@ -447,6 +449,16 @@ void CMiniDexed::Process (bool bPlugAndPlayUpdated)
}
pScheduler->Yield();
}
if (m_bSetNewPerformance2 && !m_bSetNewPerformanceBank && !m_bLoadPerformanceBusy2 && !m_bLoadPerformanceBankBusy)
{
DoSetNewPerformance2 ();
if (m_nSetNewPerformanceID2 == GetActualPerformanceID())
{
m_bSetNewPerformance2 = false;
}
pScheduler->Yield();
}
if(m_bDeletePerformance)
{
@ -1945,6 +1957,14 @@ bool CMiniDexed::SetNewPerformance(unsigned nID)
return true;
}
bool CMiniDexed::SetNewPerformance2(unsigned nID)
{
m_bSetNewPerformance2 = true;
m_nSetNewPerformanceID2 = nID;
return true;
}
bool CMiniDexed::SetNewPerformanceBank(unsigned nBankID)
{
m_bSetNewPerformanceBank = true;
@ -1968,7 +1988,7 @@ bool CMiniDexed::DoSetNewPerformance (void)
if (m_PerformanceConfig.Load ())
{
LoadPerformanceParameters();
LoadPerformanceParameters(0);
m_bLoadPerformanceBusy = false;
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)
{
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++)
{
BankSelect (m_PerformanceConfig.GetBankNumber (nTG), nTG);
ProgramChange (m_PerformanceConfig.GetVoiceNumber (nTG), nTG);
SetMIDIChannel (m_PerformanceConfig.GetMIDIChannel (nTG), nTG);
SetVolume (m_PerformanceConfig.GetVolume (nTG), nTG);
SetPan (m_PerformanceConfig.GetPan (nTG), nTG);
SetMasterTune (m_PerformanceConfig.GetDetune (nTG), nTG);
SetCutoff (m_PerformanceConfig.GetCutoff (nTG), nTG);
SetResonance (m_PerformanceConfig.GetResonance (nTG), nTG);
setPitchbendRange (m_PerformanceConfig.GetPitchBendRange (nTG), nTG);
setPitchbendStep (m_PerformanceConfig.GetPitchBendStep (nTG), nTG);
setPortamentoMode (m_PerformanceConfig.GetPortamentoMode (nTG), nTG);
setPortamentoGlissando (m_PerformanceConfig.GetPortamentoGlissando (nTG), nTG);
setPortamentoTime (m_PerformanceConfig.GetPortamentoTime (nTG), nTG);
m_nNoteLimitLow[nTG] = m_PerformanceConfig.GetNoteLimitLow (nTG);
m_nNoteLimitHigh[nTG] = m_PerformanceConfig.GetNoteLimitHigh (nTG);
m_nNoteShift[nTG] = m_PerformanceConfig.GetNoteShift (nTG);
unsigned nTargetTG = part * 8 + nTG;
unsigned nChannel = m_PerformanceConfig.GetMIDIChannel (nTG);
if (nTargetTG >= CConfig::AllToneGenerators)
break;
if (part == 0 && nTG >= 8 && nChannel == CMIDIDevice::Disabled)
continue;
if (part == 1 && nChannel + 8 < CMIDIDevice::Channels)
nChannel += 8;
BankSelect (m_PerformanceConfig.GetBankNumber (nTG), nTargetTG);
ProgramChange (m_PerformanceConfig.GetVoiceNumber (nTG), nTargetTG);
SetMIDIChannel (nChannel, nTargetTG);
SetVolume (m_PerformanceConfig.GetVolume (nTG), nTargetTG);
SetPan (m_PerformanceConfig.GetPan (nTG), nTargetTG);
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))
{
uint8_t* tVoiceData = m_PerformanceConfig.GetVoiceDataFromTxt(nTG);
m_pTG[nTG]->loadVoiceParameters(tVoiceData);
setOPMask(0b111111, nTG);
m_pTG[nTargetTG]->loadVoiceParameters(tVoiceData);
setOPMask(0b111111, nTargetTG);
}
setMonoMode(m_PerformanceConfig.GetMonoMode(nTG) ? 1 : 0, nTG);
SetReverbSend (m_PerformanceConfig.GetReverbSend (nTG), nTG);
setMonoMode(m_PerformanceConfig.GetMonoMode(nTG) ? 1 : 0, nTargetTG);
SetReverbSend (m_PerformanceConfig.GetReverbSend (nTG), nTargetTG);
setModWheelRange (m_PerformanceConfig.GetModulationWheelRange (nTG), nTG);
setModWheelTarget (m_PerformanceConfig.GetModulationWheelTarget (nTG), nTG);
setFootControllerRange (m_PerformanceConfig.GetFootControlRange (nTG), nTG);
setFootControllerTarget (m_PerformanceConfig.GetFootControlTarget (nTG), nTG);
setBreathControllerRange (m_PerformanceConfig.GetBreathControlRange (nTG), nTG);
setBreathControllerTarget (m_PerformanceConfig.GetBreathControlTarget (nTG), nTG);
setAftertouchRange (m_PerformanceConfig.GetAftertouchRange (nTG), nTG);
setAftertouchTarget (m_PerformanceConfig.GetAftertouchTarget (nTG), nTG);
setModWheelRange (m_PerformanceConfig.GetModulationWheelRange (nTG), nTargetTG);
setModWheelTarget (m_PerformanceConfig.GetModulationWheelTarget (nTG), nTargetTG);
setFootControllerRange (m_PerformanceConfig.GetFootControlRange (nTG), nTargetTG);
setFootControllerTarget (m_PerformanceConfig.GetFootControlTarget (nTG), nTargetTG);
setBreathControllerRange (m_PerformanceConfig.GetBreathControlRange (nTG), nTargetTG);
setBreathControllerTarget (m_PerformanceConfig.GetBreathControlTarget (nTG), nTargetTG);
setAftertouchRange (m_PerformanceConfig.GetAftertouchRange (nTG), nTargetTG);
setAftertouchTarget (m_PerformanceConfig.GetAftertouchTarget (nTG), nTargetTG);
}
if (part == 0)
{
// Effects
SetParameter (ParameterCompressorEnable, m_PerformanceConfig.GetCompressorEnable () ? 1 : 0);
SetParameter (ParameterReverbEnable, m_PerformanceConfig.GetReverbEnable () ? 1 : 0);
@ -2079,8 +2133,9 @@ void CMiniDexed::LoadPerformanceParameters(void)
SetParameter (ParameterReverbLowPass, m_PerformanceConfig.GetReverbLowPass ());
SetParameter (ParameterReverbDiffusion, m_PerformanceConfig.GetReverbDiffusion ());
SetParameter (ParameterReverbLevel, m_PerformanceConfig.GetReverbLevel ());
}
m_UI.DisplayChanged ();
m_UI.DisplayChanged ();
}
std::string CMiniDexed::GetNewPerformanceDefaultName(void)
@ -2137,7 +2192,7 @@ bool CMiniDexed::DoDeletePerformance(void)
{
if (m_PerformanceConfig.Load ())
{
LoadPerformanceParameters();
LoadPerformanceParameters(0);
return true;
}
else

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

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

Loading…
Cancel
Save