fix the declaration of Mixer

pull/495/head
abscisys 2 years ago
parent f92878fcb1
commit 54b5e3a4bc
  1. 130
      src/minidexed.cpp
  2. 6
      src/minidexed.h

@ -47,8 +47,7 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt,
#ifdef ARM_ALLOW_MULTI_CORE #ifdef ARM_ALLOW_MULTI_CORE
m_nActiveTGsLog2 (0), m_nActiveTGsLog2 (0),
#endif #endif
m_GetChunkTimer ("GetChunk", m_GetChunkTimer ("GetChunk", 1000000U * pConfig->GetChunkSize ()/2 / pConfig->GetSampleRate ()),
1000000U * pConfig->GetChunkSize ()/2 / pConfig->GetSampleRate ()),
m_bProfileEnabled (m_pConfig->GetProfileEnabled ()), m_bProfileEnabled (m_pConfig->GetProfileEnabled ()),
m_bSavePerformance (false), m_bSavePerformance (false),
m_bSavePerformanceNewFile (false), m_bSavePerformanceNewFile (false),
@ -87,9 +86,9 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt,
m_nAftertouchRange[i]=99; m_nAftertouchRange[i]=99;
m_nAftertouchTarget[i]=0; m_nAftertouchTarget[i]=0;
#ifdef MIXING_CONSOLE_ENABLE #if defined(MIXING_CONSOLE_ENABLE)
memset(this->m_nFXSendLevel[i], 0, MixerOutput::kFXCount * sizeof(unsigned)); memset(this->m_nFXSendLevel[i], 0, MixerOutput::kFXCount * sizeof(unsigned));
#else #elif defined(PLATE_REVERB_ENABLE)
m_nReverbSend[i] = 0; m_nReverbSend[i] = 0;
#endif #endif
m_uchOPMask[i] = 0b111111; // All operators on m_uchOPMask[i] = 0b111111; // All operators on
@ -100,7 +99,7 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt,
m_pTG[i]->activate (); m_pTG[i]->activate ();
} }
#ifdef MIXING_CONSOLE_ENABLE #if defined(MIXING_CONSOLE_ENABLE)
size_t end = MixerOutput::kFXCount - 1; size_t end = MixerOutput::kFXCount - 1;
for(size_t ret = 0; ret < end; ++ret) for(size_t ret = 0; ret < end; ++ret)
{ {
@ -153,8 +152,7 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt,
setMasterVolume(1.0); setMasterVolume(1.0);
#ifdef MIXING_CONSOLE_ENABLE #if defined(MIXING_CONSOLE_ENABLE)
this->mixing_console_ = new Mixer(static_cast<float32_t>(pConfig->GetSampleRate()), pConfig->GetChunkSize()/2); this->mixing_console_ = new Mixer(static_cast<float32_t>(pConfig->GetSampleRate()), pConfig->GetChunkSize()/2);
// Tube parameters // Tube parameters
@ -206,9 +204,7 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt,
this->SetParameter(ParameterFXReverberatorDiffusion, 80); this->SetParameter(ParameterFXReverberatorDiffusion, 80);
this->SetParameter(ParameterFXReverberatorLP, 70); this->SetParameter(ParameterFXReverberatorLP, 70);
#endif #elif defined(PLATE_REVERB_ENABLE)
#ifdef PLATE_REVERB_ENABLE
// BEGIN setup tg_mixer // BEGIN setup tg_mixer
tg_mixer = new AudioStereoMixer<CConfig::ToneGenerators>(pConfig->GetChunkSize()/2); tg_mixer = new AudioStereoMixer<CConfig::ToneGenerators>(pConfig->GetChunkSize()/2);
@ -225,7 +221,6 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt,
SetParameter (ParameterReverbDiffusion, 65); SetParameter (ParameterReverbDiffusion, 65);
SetParameter (ParameterReverbLevel, 99); SetParameter (ParameterReverbLevel, 99);
// END setup reverb // END setup reverb
#endif #endif
SetParameter (ParameterCompressorEnable, 1); SetParameter (ParameterCompressorEnable, 1);
@ -266,15 +261,15 @@ bool CMiniDexed::Initialize (void)
m_pTG[i]->setBCController (99, 1, 0); m_pTG[i]->setBCController (99, 1, 0);
m_pTG[i]->setATController (99, 1, 0); m_pTG[i]->setATController (99, 1, 0);
#ifdef MIXING_CONSOLE_ENABLE #if defined(MIXING_CONSOLE_ENABLE)
// setup the mixer so that it remains identical to the initial version of the synth // setup the mixer so that it remains identical to the initial version of the synth
this->mixing_console_->setPan(i, this->m_nPan[i] / 127.0f); this->mixing_console_->setPan(i, this->m_nPan[i] / 127.0f);
float32_t sendRev = this->m_nFXSendLevel[i][MixerOutput::FX_PlateReverb] / 99.0f; float32_t sendRev = this->m_nFXSendLevel[i][MixerOutput::FX_PlateReverb] / 99.0f;
this->mixing_console_->setSendLevel(i, MixerOutput::FX_PlateReverb, sendRev); this->mixing_console_->setSendLevel(i, MixerOutput::FX_PlateReverb, sendRev);
this->mixing_console_->setSendLevel(i, MixerOutput::MainOutput, 1.0f - sendRev); this->mixing_console_->setSendLevel(i, MixerOutput::MainOutput, 1.0f - sendRev);
#endif
#ifdef PLATE_REVERB_ENABLE #elif defined(PLATE_REVERB_ENABLE)
tg_mixer->pan(i,mapfloat(m_nPan[i],0,127,0.0f,1.0f)); tg_mixer->pan(i,mapfloat(m_nPan[i],0,127,0.0f,1.0f));
tg_mixer->gain(i,1.0f); tg_mixer->gain(i,1.0f);
reverb_send_mixer->pan(i,mapfloat(m_nPan[i],0,127,0.0f,1.0f)); reverb_send_mixer->pan(i,mapfloat(m_nPan[i],0,127,0.0f,1.0f));
@ -505,11 +500,11 @@ void CMiniDexed::SetPan (unsigned nPan, unsigned nTG)
assert (nTG < CConfig::ToneGenerators); assert (nTG < CConfig::ToneGenerators);
m_nPan[nTG] = nPan; m_nPan[nTG] = nPan;
#ifdef MIXING_CONSOLE_ENABLE #if defined(MIXING_CONSOLE_ENABLE)
this->mixing_console_->setPan(nTG, mapfloat(nPan, 0, 127, 0.0f, 1.0f)); this->mixing_console_->setPan(nTG, mapfloat(nPan, 0, 127, 0.0f, 1.0f));
#endif
#ifdef PLATE_REVERB_ENABLE #elif defined(PLATE_REVERB_ENABLE)
tg_mixer->pan(nTG,mapfloat(nPan,0,127,0.0f,1.0f)); tg_mixer->pan(nTG,mapfloat(nPan,0,127,0.0f,1.0f));
reverb_send_mixer->pan(nTG,mapfloat(nPan,0,127,0.0f,1.0f)); reverb_send_mixer->pan(nTG,mapfloat(nPan,0,127,0.0f,1.0f));
#endif #endif
@ -517,7 +512,7 @@ void CMiniDexed::SetPan (unsigned nPan, unsigned nTG)
m_UI.ParameterChanged (); m_UI.ParameterChanged ();
} }
#ifdef MIXING_CONSOLE_ENABLE #if defined(MIXING_CONSOLE_ENABLE)
void CMiniDexed::setMixingConsoleSendLevel(unsigned nTG, MixerOutput fx, unsigned nFXSend) void CMiniDexed::setMixingConsoleSendLevel(unsigned nTG, MixerOutput fx, unsigned nFXSend)
{ {
@ -549,9 +544,7 @@ void CMiniDexed::setMixingConsoleReturnLevel(MixerOutput ret, MixerOutput fx, un
this->m_UI.ParameterChanged (); this->m_UI.ParameterChanged ();
} }
#endif #elif defined(PLATE_REVERB_ENABLE)
#ifdef PLATE_REVERB_ENABLE
void CMiniDexed::SetReverbSend (unsigned nReverbSend, unsigned nTG) void CMiniDexed::SetReverbSend (unsigned nReverbSend, unsigned nTG)
{ {
@ -761,11 +754,11 @@ void CMiniDexed::ControllersRefresh (unsigned nTG)
void CMiniDexed::SetParameter (TParameter Parameter, int nValue) void CMiniDexed::SetParameter (TParameter Parameter, int nValue)
{ {
#ifdef MIXING_CONSOLE_ENABLE #if defined(MIXING_CONSOLE_ENABLE)
assert(this->mixing_console_); assert(this->mixing_console_);
#endif
#ifdef PLATE_REVERB_ENABLE #elif defined(PLATE_REVERB_ENABLE)
assert (reverb); assert (reverb);
#endif #endif
@ -782,7 +775,7 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue)
} }
break; break;
#ifdef MIXING_CONSOLE_ENABLE #if defined(MIXING_CONSOLE_ENABLE)
// Tube parameters // Tube parameters
case ParameterFXTubeEnable: case ParameterFXTubeEnable:
nValue = constrain((int)nValue, 0, 1); nValue = constrain((int)nValue, 0, 1);
@ -1003,9 +996,7 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue)
this->m_FXSpinLock.Release(); this->m_FXSpinLock.Release();
break; break;
#endif #elif defined(PLATE_REVERB_ENABLE)
#ifdef PLATE_REVERB_ENABLE
case ParameterReverbEnable: case ParameterReverbEnable:
nValue=constrain((int)nValue,0,1); nValue=constrain((int)nValue,0,1);
@ -1055,7 +1046,6 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue)
reverb->level (nValue / 99.0f); reverb->level (nValue / 99.0f);
m_FXSpinLock.Release (); m_FXSpinLock.Release ();
break; break;
#endif #endif
default: default:
@ -1115,7 +1105,7 @@ void CMiniDexed::SetTGParameter (TTGParameter Parameter, int nValue, unsigned nT
SetMIDIChannel ((uint8_t) nValue, nTG); SetMIDIChannel ((uint8_t) nValue, nTG);
break; break;
#ifdef MIXING_CONSOLE_ENABLE #if defined(MIXING_CONSOLE_ENABLE)
case TGParameterMixingSendFXTube: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Tube, nValue); break; case TGParameterMixingSendFXTube: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Tube, nValue); break;
case TGParameterMixingSendFXChorus: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Chorus, nValue); break; case TGParameterMixingSendFXChorus: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Chorus, nValue); break;
case TGParameterMixingSendFXFlanger: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Flanger, nValue); break; case TGParameterMixingSendFXFlanger: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Flanger, nValue); break;
@ -1125,7 +1115,7 @@ void CMiniDexed::SetTGParameter (TTGParameter Parameter, int nValue, unsigned nT
case TGParameterMixingSendFXPlateReverb: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_PlateReverb, nValue); break; case TGParameterMixingSendFXPlateReverb: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_PlateReverb, nValue); break;
case TGParameterMixingSendFXReverberator: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Reverberator, nValue); break; case TGParameterMixingSendFXReverberator: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Reverberator, nValue); break;
case TGParameterMixingSendFXMainOutput: this->setMixingConsoleSendLevel(nTG, MixerOutput::MainOutput, nValue); break; case TGParameterMixingSendFXMainOutput: this->setMixingConsoleSendLevel(nTG, MixerOutput::MainOutput, nValue); break;
#else #elif defined(PLATE_REVERB_ENABLE)
case TGParameterReverbSend: SetReverbSend (nValue, nTG); break; case TGParameterReverbSend: SetReverbSend (nValue, nTG); break;
#endif // MIXING_CONSOLE_ENABLE #endif // MIXING_CONSOLE_ENABLE
@ -1149,9 +1139,9 @@ int CMiniDexed::GetTGParameter (TTGParameter Parameter, unsigned nTG)
case TGParameterCutoff: return m_nCutoff[nTG]; case TGParameterCutoff: return m_nCutoff[nTG];
case TGParameterResonance: return m_nResonance[nTG]; case TGParameterResonance: return m_nResonance[nTG];
case TGParameterMIDIChannel: return m_nMIDIChannel[nTG]; case TGParameterMIDIChannel: return m_nMIDIChannel[nTG];
#ifndef MIXING_CONSOLE_ENABLE #if defined(PLATE_REVERB_ENABLE)
case TGParameterReverbSend: return m_nReverbSend[nTG]; case TGParameterReverbSend: return m_nReverbSend[nTG];
#endif // undef MIXING_CONSOLE_ENABLE #endif
case TGParameterPitchBendRange: return m_nPitchBendRange[nTG]; case TGParameterPitchBendRange: return m_nPitchBendRange[nTG];
case TGParameterPitchBendStep: return m_nPitchBendStep[nTG]; case TGParameterPitchBendStep: return m_nPitchBendStep[nTG];
case TGParameterPortamentoMode: return m_nPortamentoMode[nTG]; case TGParameterPortamentoMode: return m_nPortamentoMode[nTG];
@ -1334,15 +1324,14 @@ void CMiniDexed::ProcessSound (void)
assert (CConfig::ToneGenerators == 8); assert (CConfig::ToneGenerators == 8);
#ifdef MIXING_CONSOLE_ENABLE #if defined(MIXING_CONSOLE_ENABLE)
// // swap stereo channels if needed // // swap stereo channels if needed
uint8_t indexL = StereoChannels::Left; uint8_t indexL = StereoChannels::Left;
uint8_t indexR = StereoChannels::Right; uint8_t indexR = StereoChannels::Right;
if(this->m_bChannelsSwapped) if(this->m_bChannelsSwapped)
{ {
indexL = StereoChannels::Left; indexL = StereoChannels::Right;
indexR = StereoChannels::Right; indexR = StereoChannels::Left;
} }
// BEGIN TG mixing // BEGIN TG mixing
@ -1353,61 +1342,13 @@ void CMiniDexed::ProcessSound (void)
if(nMasterVolume > 0.0f) if(nMasterVolume > 0.0f)
{ {
for (uint8_t i = 0; i < CConfig::ToneGenerators; i++)
{
this->mixing_console_->setInputSampleBuffer(i, m_OutputLevel[i]);
}
this->m_FXSpinLock.Acquire (); this->m_FXSpinLock.Acquire ();
this->mixing_console_->process(SampleBuffer[indexL], SampleBuffer[indexR]);
this->m_FXSpinLock.Release ();
// Convert dual float array (left, right) to single int16 array (left/right)
this->nMasterVolume = constrain(this->nMasterVolume, 0.0f, 1.0f);
if(this->nMasterVolume == 1.0f)
{
memcpy(tmp_float, SampleBuffer[indexL], nFrames * sizeof(float32_t));
memcpy(tmp_float + nFrames, SampleBuffer[indexR], nFrames * sizeof(float32_t));
}
else // 0.0 < this->nMasterVolume < 1.0
{
arm_scale_f32(SampleBuffer[indexL], this->nMasterVolume, tmp_float, nFrames);
arm_scale_f32(SampleBuffer[indexR], this->nMasterVolume, tmp_float + nFrames, nFrames);
}
arm_float_to_q15(tmp_float, tmp_int, nFrames * 2);
}
else
arm_fill_q15(0, tmp_int, nFrames * 2);
#endif
#ifdef PLATE_REVERB_ENABLE
#ifdef MIXING_CONSOLE_ENABLE
// // swap stereo channels if needed
uint8_t indexL = StereoChannels::Left;
uint8_t indexR = StereoChannels::Right;
if(this->m_bChannelsSwapped)
{
indexL = StereoChannels::Left;
indexR = StereoChannels::Right;
}
// BEGIN TG mixing
float32_t tmp_float[nFrames * 2];
int16_t tmp_int[nFrames * 2];
float32_t SampleBuffer[2][nFrames];
if(nMasterVolume > 0.0f)
{
for (uint8_t i = 0; i < CConfig::ToneGenerators; i++) for (uint8_t i = 0; i < CConfig::ToneGenerators; i++)
{ {
this->mixing_console_->setInputSampleBuffer(i, m_OutputLevel[i]); this->mixing_console_->setInputSampleBuffer(i, m_OutputLevel[i]);
} }
this->m_FXSpinLock.Acquire ();
this->mixing_console_->process(SampleBuffer[indexL], SampleBuffer[indexR]); this->mixing_console_->process(SampleBuffer[indexL], SampleBuffer[indexR]);
this->m_FXSpinLock.Release (); this->m_FXSpinLock.Release ();
@ -1428,9 +1369,7 @@ void CMiniDexed::ProcessSound (void)
else else
arm_fill_q15(0, tmp_int, nFrames * 2); arm_fill_q15(0, tmp_int, nFrames * 2);
#endif #elif defined(PLATE_REVERB_ENABLE)
#ifdef PLATE_REVERB_ENABLE
uint8_t indexL=0, indexR=1; uint8_t indexL=0, indexR=1;
@ -1481,20 +1420,6 @@ void CMiniDexed::ProcessSound (void)
} }
// END adding reverb // END adding reverb
// BEGIN adding FXRack
#ifdef MIXING_CONSOLE_ENABLE
if(this->mixing_console_->isEnable() && this->mixing_console_->getWetLevel() > 0.0f)
{
this->m_FXSpinLock.Acquire();
this->mixing_console_->process(SampleBuffer[indexL], SampleBuffer[indexR], SampleBuffer[indexL], SampleBuffer[indexR], nFrames);
this->m_FXSpinLock.Release();
}
#endif
// END adding FXRack
// swap stereo channels if needed prior to writing back out // swap stereo channels if needed prior to writing back out
if (m_bChannelsSwapped) if (m_bChannelsSwapped)
{ {
@ -1520,7 +1445,6 @@ void CMiniDexed::ProcessSound (void)
} }
else else
arm_fill_q15(0, tmp_int, nFrames * 2); arm_fill_q15(0, tmp_int, nFrames * 2);
#endif #endif
if (m_pSoundDevice->Write (tmp_int, sizeof(tmp_int)) != (int) sizeof(tmp_int)) if (m_pSoundDevice->Write (tmp_int, sizeof(tmp_int)) != (int) sizeof(tmp_int))

@ -45,7 +45,7 @@
#include "effect_platervbstereo.h" #include "effect_platervbstereo.h"
#include "effect_compressor.h" #include "effect_compressor.h"
#ifdef MIXING_CONSOLE_ENABLE #if defined(MIXING_CONSOLE_ENABLE)
#include "mixing_console.hpp" #include "mixing_console.hpp"
typedef MixingConsole<CConfig::ToneGenerators> Mixer; typedef MixingConsole<CConfig::ToneGenerators> Mixer;
@ -93,10 +93,10 @@ public:
void setBreathController (uint8_t value, unsigned nTG); void setBreathController (uint8_t value, unsigned nTG);
void setAftertouch (uint8_t value, unsigned nTG); void setAftertouch (uint8_t value, unsigned nTG);
#ifdef MIXING_CONSOLE_ENABLE #if defined(MIXING_CONSOLE_ENABLE)
void setMixingConsoleSendLevel(unsigned nTG, MixerOutput fx, unsigned nFXSend); void setMixingConsoleSendLevel(unsigned nTG, MixerOutput fx, unsigned nFXSend);
void setMixingConsoleReturnLevel(MixerOutput ret, MixerOutput fx, unsigned nFXReturn); void setMixingConsoleReturnLevel(MixerOutput ret, MixerOutput fx, unsigned nFXReturn);
#else #elif defined(PLATE_REVERB_ENABLE)
void SetReverbSend (unsigned nReverbSend, unsigned nTG); // 0 .. 127 void SetReverbSend (unsigned nReverbSend, unsigned nTG); // 0 .. 127
#endif #endif

Loading…
Cancel
Save