FX: Partial fix for RPi 4/5

pull/795/head
Javier Nonis 14 hours ago
parent 0d8f92b0cc
commit d04b91a67f
  1. 41
      src/minidexed.cpp

@ -106,18 +106,20 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt,
memset(m_OutputLevel[i][1], 0, CConfig::MaxChunkSize * sizeof(float32_t));
#endif
m_InsertFXSpinLock[i] = new CSpinLock();
m_InsertFX[i] = new AudioEffect(pConfig->GetSampleRate ());
m_nSendFX1[i] = 0;
m_nSendFX2[i] = 0;
// Active the required number of active TGs
if (i<m_nToneGenerators)
{
m_InsertFXSpinLock[i] = new CSpinLock();
m_InsertFX[i] = new AudioEffect(pConfig->GetSampleRate ());
m_uchOPMask[i] = 0b111111; // All operators on
m_pTG[i] = new CDexedAdapter (m_nPolyphony, pConfig->GetSampleRate ());
assert (m_pTG[i]);
m_MidiArpSpinLock[i] = new CSpinLock();
m_MidiArp[i] = new MidiEffect(pConfig->GetSampleRate(), m_pTG[i]);
@ -703,7 +705,7 @@ void CMiniDexed::setInsertFXType (unsigned nType, unsigned nTG)
assert (nTG < CConfig::AllToneGenerators);
// If the effect type is already set just return
if (m_InsertFX[nTG]->getId() == nType) {
if (m_InsertFX[nTG] != NULL && m_InsertFX[nTG]->getId() == nType) {
return;
}
@ -730,12 +732,15 @@ void CMiniDexed::setMidiFXType (unsigned nType, unsigned nTG)
assert (nTG < CConfig::AllToneGenerators);
// If the effect type is already set just return
if (m_MidiArp[nTG]->getId() == nType) {
if (m_MidiArp[nTG] != NULL && m_MidiArp[nTG]->getId() == nType) {
return;
}
m_MidiArpSpinLock[nTG]->Acquire();
delete m_MidiArp[nTG];
if (m_MidiArp[nTG] != NULL)
{
delete m_MidiArp[nTG];
}
m_MidiArp[nTG] = newMidiEffect(nType, m_pConfig->GetSampleRate(), m_pTG[nTG]);
m_MidiArp[nTG]->setTempo(m_nTempo);
m_MidiArpSpinLock[nTG]->Release();
@ -972,7 +977,7 @@ void CMiniDexed::setTempo(unsigned nValue)
m_SendFX1->setTempo(m_nTempo);
m_SendFX2->setTempo(m_nTempo);
m_MasterFX->setTempo(m_nTempo);
for (unsigned nTG = 0; nTG < CConfig::AllToneGenerators; nTG++)
for (unsigned nTG = 0; nTG < m_nToneGenerators; nTG++)
{
m_InsertFX[nTG]->setTempo(m_nTempo);
m_MidiArp[nTG]->setTempo(m_nTempo);
@ -2402,17 +2407,19 @@ void CMiniDexed::LoadPerformanceParameters(void)
setPortamentoGlissando (m_PerformanceConfig.GetPortamentoGlissando (nTG), nTG);
setPortamentoTime (m_PerformanceConfig.GetPortamentoTime (nTG), nTG);
setInsertFXType(m_PerformanceConfig.GetInsertFX (nTG), nTG);
std::vector<unsigned> pParams = m_PerformanceConfig.GetInsertFXParams(nTG);
m_InsertFX[nTG]->setParameters(pParams);
pParams.clear();
pParams.shrink_to_fit();
setMidiFXType(m_PerformanceConfig.GetMidiFX (nTG), nTG);
std::vector<unsigned> pMidiFXParams = m_PerformanceConfig.GetMidiFXParams(nTG);
m_MidiArp[nTG]->setParameters(pMidiFXParams);
pMidiFXParams.clear();
pMidiFXParams.shrink_to_fit();
if (nTG < m_nToneGenerators) {
setInsertFXType(m_PerformanceConfig.GetInsertFX (nTG), nTG);
std::vector<unsigned> pParams = m_PerformanceConfig.GetInsertFXParams(nTG);
m_InsertFX[nTG]->setParameters(pParams);
pParams.clear();
pParams.shrink_to_fit();
setMidiFXType(m_PerformanceConfig.GetMidiFX (nTG), nTG);
std::vector<unsigned> pMidiFXParams = m_PerformanceConfig.GetMidiFXParams(nTG);
m_MidiArp[nTG]->setParameters(pMidiFXParams);
pMidiFXParams.clear();
pMidiFXParams.shrink_to_fit();
}
m_nNoteLimitLow[nTG] = m_PerformanceConfig.GetNoteLimitLow (nTG);
m_nNoteLimitHigh[nTG] = m_PerformanceConfig.GetNoteLimitHigh (nTG);

Loading…
Cancel
Save