diff --git a/src/fx.cpp b/src/fx.cpp index 551ef11..48f4c65 100644 --- a/src/fx.cpp +++ b/src/fx.cpp @@ -16,7 +16,8 @@ float32_t FXBase::getSamplingRate() const FXElement::FXElement(float32_t sampling_rate, float32_t output_level_corrector) : FXBase(sampling_rate), - OutputLevelCorrector(output_level_corrector) + OutputLevelCorrector(output_level_corrector), + bypass_fx_process_(false) { } @@ -24,6 +25,15 @@ FXElement::~FXElement() { } +void FXElement::bypassFXProcess(bool bypass) +{ + this->bypass_fx_process_ = bypass; +} + +bool FXElement::bypassFXProcess() const +{ + return this->bypass_fx_process_; +} FX::FX(float32_t sampling_rate) : FXBase(sampling_rate) diff --git a/src/fx.h b/src/fx.h index bca0408..f647485 100644 --- a/src/fx.h +++ b/src/fx.h @@ -60,7 +60,13 @@ protected: public: virtual ~FXElement(); + virtual void bypassFXProcess(bool bypass); + virtual bool bypassFXProcess() const; + virtual void processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) = 0; + +private: + bool bypass_fx_process_; }; class FX : public FXBase diff --git a/src/fx_unit2.hpp b/src/fx_unit2.hpp index 906bc15..9227b7a 100644 --- a/src/fx_unit2.hpp +++ b/src/fx_unit2.hpp @@ -87,6 +87,11 @@ public: outL = 0.0f; outR = 0.0f; } + else if(this->bypassFXProcess()) + { + outL = inL; + outR = inR; + } else { this->is_reset_ = false; diff --git a/src/minidexed.cpp b/src/minidexed.cpp index 13ef445..80f6427 100644 --- a/src/minidexed.cpp +++ b/src/minidexed.cpp @@ -92,7 +92,7 @@ CMiniDexed::CMiniDexed ( m_nAftertouchTarget[i] = 0; #if defined(MIXING_CONSOLE_ENABLE) - memset(this->m_nFXSendLevel[i], 0, MixerOutput::kFXCount * sizeof(unsigned)); + memset(this->m_nTGSendLevel[i], 0, MixerOutput::kFXCount * sizeof(unsigned)); #elif defined(PLATE_REVERB_ENABLE) m_nReverbSend[i] = 0; #endif @@ -104,6 +104,17 @@ CMiniDexed::CMiniDexed ( m_pTG[i]->activate (); } +#if defined(MIXING_CONSOLE_ENABLE) + for(size_t i = MixerOutput::FX_Tube; i < (MixerOutput::kFXCount - 1); ++i) + { + memset(this->m_nFXSendLevel[i], 0, MixerOutput::kFXCount * sizeof(unsigned)); + } + + this->m_nTGSendLevel[0][MixerOutput::MainOutput] = 99; + this->m_nTGSendLevel[0][MixerOutput::FX_PlateReverb] = 99; + this->m_nFXSendLevel[MixerOutput::FX_PlateReverb][MixerOutput::MainOutput] = 99; +#endif + for (unsigned i = 0; i < CConfig::MaxUSBMIDIDevices; i++) { m_pMIDIKeyboard[i] = new CMIDIKeyboard (this, pConfig, &m_UI, i); @@ -158,7 +169,7 @@ CMiniDexed::CMiniDexed ( // Tube parameters this->SetParameter(TParameter::ParameterFXTubeEnable, 1); - this->SetParameter(TParameter::ParameterFXTubeOverdrive, 10); + this->SetParameter(TParameter::ParameterFXTubeOverdrive, 25); // Chorus parameters this->SetParameter(TParameter::ParameterFXChorusEnable, 1); @@ -205,18 +216,8 @@ CMiniDexed::CMiniDexed ( this->SetParameter(TParameter::ParameterFXReverberatorDiffusion, 80); this->SetParameter(TParameter::ParameterFXReverberatorLP, 70); - // Initializes Send parameters to 0 - size_t end = MixerOutput::kFXCount - 1; - for(size_t from = 0; from < end; ++from) - { - for(size_t toFX = 0; toFX < MixerOutput::kFXCount; ++toFX) - { - this->setMixingConsoleFXSendLevel(static_cast(from), static_cast(toFX), 0); - } - } - - // Send all Reverb signal to MainOutput - this->SetParameter(TParameter::ParameterFXPlateReverb_MainOutput, 99); + // Bypass + this->SetParameter(TParameter::ParameterFXBypass, 0); #elif defined(PLATE_REVERB_ENABLE) @@ -277,13 +278,12 @@ bool CMiniDexed::Initialize (void) m_pTG[i]->setATController (99, 1, 0); #if defined(MIXING_CONSOLE_ENABLE) - // setup the mixer so that it remains identical to the initial version of the synth this->mixing_console_->reset(); this->mixing_console_->setPan(i, this->m_nPan[i] / 127.0f); - float32_t sendRev = this->m_nFXSendLevel[i][MixerOutput::FX_PlateReverb] / 99.0f; - this->mixing_console_->setSendLevel(i, MixerOutput::FX_PlateReverb, 1.0f); - this->mixing_console_->setSendLevel(i, MixerOutput::MainOutput, 1.0f - sendRev); - this->mixing_console_->setSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::MainOutput, sendRev); + + this->mixing_console_->setSendLevel(i, MixerOutput::FX_PlateReverb, this->m_nTGSendLevel[i][MixerOutput::FX_PlateReverb] / 99.0f); + this->mixing_console_->setSendLevel(i, MixerOutput::MainOutput, this->m_nTGSendLevel[i][MixerOutput::MainOutput] / 99.0f); + this->mixing_console_->setFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::MainOutput, this->m_nFXSendLevel[MixerOutput::FX_PlateReverb][MixerOutput::FX_PlateReverb] / 99.0f); #elif defined(PLATE_REVERB_ENABLE) @@ -575,7 +575,7 @@ void CMiniDexed::SetPan (unsigned nPan, unsigned nTG) unsigned CMiniDexed::getMixingConsoleSendLevel(unsigned nTG, MixerOutput fx) const { assert (nTG < CConfig::ToneGenerators); - return this->m_nFXSendLevel[nTG][fx]; + return this->m_nTGSendLevel[nTG][fx]; } void CMiniDexed::setMixingConsoleSendLevel(unsigned nTG, MixerOutput fx, unsigned nFXSend) @@ -583,23 +583,21 @@ void CMiniDexed::setMixingConsoleSendLevel(unsigned nTG, MixerOutput fx, unsigne assert (nTG < CConfig::ToneGenerators); nFXSend = constrain((int)nFXSend, 0, 99); - this->m_nFXSendLevel[nTG][fx] = nFXSend; + this->m_nTGSendLevel[nTG][fx] = nFXSend; this->mixing_console_->setSendLevel(nTG, fx, nFXSend / 99.0f); this->m_UI.ParameterChanged(); } -void CMiniDexed::setMixingConsoleFXSendLevel(MixerOutput ret, MixerOutput fx, unsigned nFXSend) +void CMiniDexed::setMixingConsoleFXSendLevel(MixerOutput fromFX, MixerOutput toFX, unsigned nFXSend) { - assert (ret < (MixerOutput::kFXCount - 1)); - assert (fx < MixerOutput::kFXCount); - if(ret == fx) - { - this->mixing_console_->setFXSendLevel(ret, fx, 0.0f); - } - else + assert(fromFX < (MixerOutput::kFXCount - 1)); + assert(toFX < MixerOutput::kFXCount); + if(fromFX != toFX) { - this->mixing_console_->setFXSendLevel(ret, fx, nFXSend / 99.0f); + nFXSend = constrain((int)nFXSend, 0, 99); + this->m_nFXSendLevel[fromFX][toFX] = nFXSend; + this->mixing_console_->setFXSendLevel(fromFX, toFX, nFXSend / 99.0f); } } @@ -1432,6 +1430,12 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue) this->m_FXSpinLock.Release(); break; + case TParameter::ParameterFXBypass: + this->m_FXSpinLock.Acquire(); + this->mixing_console_->bypass(!!nValue); + this->m_FXSpinLock.Release(); + break; + #elif defined(PLATE_REVERB_ENABLE) case TParameter::ParameterReverbEnable: @@ -1937,7 +1941,7 @@ bool CMiniDexed::DoSavePerformance (void) #ifdef MIXING_CONSOLE_ENABLE for(size_t fx = 0; fx < MixerOutput::kFXCount; ++fx) { - this->m_PerformanceConfig.SetFXSendLevel(nTG, static_cast(fx), this->m_nFXSendLevel[nTG][fx]); + this->m_PerformanceConfig.SetTGSendLevel(nTG, static_cast(fx), this->m_nTGSendLevel[nTG][fx]); } #endif @@ -2061,6 +2065,8 @@ bool CMiniDexed::DoSavePerformance (void) this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_PlateReverb, this->m_nParameter[TParameter::ParameterFXReverberator_PlateReverbSend]); this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, this->m_nParameter[TParameter::ParameterFXReverberator_MainOutput]); + this->m_PerformanceConfig.SetFXBypass(this->mixing_console_->bypass()); + #endif if(m_bSaveAsDeault) @@ -2398,7 +2404,6 @@ void CMiniDexed::LoadPerformanceParameters(void) { for (unsigned nTG = 0; nTG < CConfig::ToneGenerators; nTG++) { - BankSelectLSB (m_PerformanceConfig.GetBankNumber (nTG), nTG); ProgramChange (m_PerformanceConfig.GetVoiceNumber (nTG), nTG); SetMIDIChannel (m_PerformanceConfig.GetMIDIChannel (nTG), nTG); @@ -2427,7 +2432,7 @@ void CMiniDexed::LoadPerformanceParameters(void) #ifdef MIXING_CONSOLE_ENABLE for(size_t fx = 0; fx < MixerOutput::kFXCount; ++fx) { - this->setMixingConsoleSendLevel(nTG, static_cast(fx), this->m_PerformanceConfig.GetFXSendLevel(nTG, static_cast(fx))); + this->setMixingConsoleSendLevel(nTG, static_cast(fx), this->m_PerformanceConfig.GetTGSendLevel(nTG, static_cast(fx))); } #else SetReverbSend (m_PerformanceConfig.GetReverbSend (nTG), nTG); @@ -2549,6 +2554,7 @@ void CMiniDexed::LoadPerformanceParameters(void) this->SetParameter(TParameter::ParameterFXReverberator_PlateReverbSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_PlateReverb)); this->SetParameter(TParameter::ParameterFXReverberator_MainOutput, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput)); + this->mixing_console_->bypass(this->m_PerformanceConfig.IsFXBypass()); #endif } diff --git a/src/minidexed.h b/src/minidexed.h index d19f66d..4523228 100644 --- a/src/minidexed.h +++ b/src/minidexed.h @@ -103,7 +103,7 @@ public: #if defined(MIXING_CONSOLE_ENABLE) unsigned getMixingConsoleSendLevel(unsigned nTG, MixerOutput fx) const; void setMixingConsoleSendLevel(unsigned nTG, MixerOutput fx, unsigned nFXSend); - void setMixingConsoleFXSendLevel(MixerOutput ret, MixerOutput fx, unsigned nFXReturn); + void setMixingConsoleFXSendLevel(MixerOutput fromFX, MixerOutput toFX, unsigned nFXReturn); #elif defined(PLATE_REVERB_ENABLE) void SetReverbSend (unsigned nReverbSend, unsigned nTG); // 0 .. 127 #endif @@ -285,6 +285,9 @@ public: ParameterFXReverberator_PlateReverbSend, ParameterFXReverberator_MainOutput, + // Bypass FX + ParameterFXBypass, + #endif // END FX global parameters definition @@ -427,7 +430,8 @@ private: int m_nNoteShift[CConfig::ToneGenerators]; #ifdef MIXING_CONSOLE_ENABLE - unsigned m_nFXSendLevel[CConfig::ToneGenerators][MixerOutput::kFXCount]; + unsigned m_nTGSendLevel[CConfig::ToneGenerators][MixerOutput::kFXCount]; + unsigned m_nFXSendLevel[MixerOutput::kFXCount - 1][MixerOutput::kFXCount]; #elif defined(PLATE_REVERB_ENABLE) unsigned m_nReverbSend[CConfig::ToneGenerators]; #endif diff --git a/src/mixing_console.hpp b/src/mixing_console.hpp index fc3671b..8c46756 100644 --- a/src/mixing_console.hpp +++ b/src/mixing_console.hpp @@ -45,6 +45,9 @@ public: inline size_t getChannelNumber() const; + inline void bypass(bool bypass); + inline bool bypass() const; + // Send section inline void setChannelLevel(size_t in, float32_t lvl); inline void setPan(size_t in, float32_t pan); @@ -54,7 +57,7 @@ public: inline void setInputSampleBuffer(size_t in, float32_t* samples); // Return section - inline void setFXSendLevel(MixerOutput ret, MixerOutput dest, float32_t lvl); + inline void setFXSendLevel(MixerOutput fromFX, MixerOutput toFX, float32_t lvl); inline void setReturnSample(MixerOutput ret, float32_t sampleL, float32_t sampleR); // Get FX @@ -88,6 +91,8 @@ private: const size_t BufferSize; + bool bypass_; + float32_t channel_level_[nb_inputs]; float32_t pan_[StereoChannels::kNumChannels + 1][nb_inputs]; bool swap_stereo_image_; @@ -334,6 +339,7 @@ template MixingConsole::MixingConsole(float32_t sampling_rate, size_t buffer_size, bool swapStereoImage) : FXBase(sampling_rate), BufferSize(buffer_size), + bypass_(true), swap_stereo_image_(swapStereoImage), m_nSamples(0) { @@ -356,6 +362,8 @@ MixingConsole::MixingConsole(float32_t sampling_rate, size_t buffer_s this->fx_[MixerOutput::FX_Reverberator] = this->reverberator_ = new FXUnit2(sampling_rate); this->fx_[MixerOutput::MainOutput] = this->dry_ = new FXUnit2(sampling_rate); + this->bypass(false); + this->init(); } @@ -378,6 +386,31 @@ MixingConsole::~MixingConsole() } } +template +void MixingConsole::bypass(bool bypass) +{ + if(this->bypass_ != bypass) + { + this->bypass_ = bypass; + + for(size_t fx = MixerOutput::FX_Tube; fx < MixerOutput::kFXCount; ++fx) + { + this->getFX(fx)->bypassFXProcess(bypass); + } + + if(!bypass) + { + this->reset(); + } + } +} + +template +bool MixingConsole::bypass() const +{ + return this->bypass_; +} + template size_t MixingConsole::getChannelNumber() const { @@ -443,18 +476,18 @@ void MixingConsole::setInputSampleBuffer(size_t in, float32_t* sample // Return section template -void MixingConsole::setFXSendLevel(MixerOutput ret, MixerOutput dest, float32_t lvl) +void MixingConsole::setFXSendLevel(MixerOutput fromFX, MixerOutput toFX, float32_t lvl) { - assert(ret < (MixerOutput::kFXCount - 1)); - assert(dest < MixerOutput::kFXCount); + assert(fromFX < (MixerOutput::kFXCount - 1)); + assert(toFX < MixerOutput::kFXCount); - if(ret == dest) + if(fromFX == toFX) { // An FX cannot feedback on itself return; } - this->setLevel(nb_inputs + ret, dest, lvl); + this->setLevel(nb_inputs + fromFX, toFX, lvl); } template diff --git a/src/performance.ini b/src/performance.ini index 7d55fb6..8187bf5 100644 --- a/src/performance.ini +++ b/src/performance.ini @@ -320,154 +320,154 @@ FXReverberatorTime=75 FXReverberatorDiffusion=75 FXReverberatorLP=80 -FXSendLevel_0_x_Tube=0 -FXSendLevel_0_x_Chorus=0 -FXSendLevel_0_x_Flanger=0 -FXSendLevel_0_x_Orbitone=0 -FXSendLevel_0_x_Phaser=0 -FXSendLevel_0_x_Delay=0 -FXSendLevel_0_x_PlateReverb=0 -FXSendLevel_0_x_Reverberator=0 -FXSendLevel_0_x_MainOutput=0 - -FXSendLevel_1_x_Tube=0 -FXSendLevel_1_x_Chorus=0 -FXSendLevel_1_x_Flanger=0 -FXSendLevel_1_x_Orbitone=0 -FXSendLevel_1_x_Phaser=0 -FXSendLevel_1_x_Delay=0 -FXSendLevel_1_x_PlateReverb=0 -FXSendLevel_1_x_Reverberator=0 -FXSendLevel_1_x_MainOutput=0 - -FXSendLevel_2_x_Tube=0 -FXSendLevel_2_x_Chorus=0 -FXSendLevel_2_x_Flanger=0 -FXSendLevel_2_x_Orbitone=0 -FXSendLevel_2_x_Phaser=0 -FXSendLevel_2_x_Delay=0 -FXSendLevel_2_x_PlateReverb=0 -FXSendLevel_2_x_Reverberator=0 -FXSendLevel_2_x_MainOutput=0 - -FXSendLevel_3_x_Tube=0 -FXSendLevel_3_x_Chorus=0 -FXSendLevel_3_x_Flanger=0 -FXSendLevel_3_x_Orbitone=0 -FXSendLevel_3_x_Phaser=0 -FXSendLevel_3_x_Delay=0 -FXSendLevel_3_x_PlateReverb=0 -FXSendLevel_3_x_Reverberator=0 -FXSendLevel_3_x_MainOutput=0 - -FXSendLevel_4_x_Tube=0 -FXSendLevel_4_x_Chorus=0 -FXSendLevel_4_x_Flanger=0 -FXSendLevel_4_x_Orbitone=0 -FXSendLevel_4_x_Phaser=0 -FXSendLevel_4_x_Delay=0 -FXSendLevel_4_x_PlateReverb=0 -FXSendLevel_4_x_Reverberator=0 -FXSendLevel_4_x_MainOutput=0 - -FXSendLevel_5_x_Tube=0 -FXSendLevel_5_x_Chorus=0 -FXSendLevel_5_x_Flanger=0 -FXSendLevel_5_x_Orbitone=0 -FXSendLevel_5_x_Phaser=0 -FXSendLevel_5_x_Delay=0 -FXSendLevel_5_x_PlateReverb=0 -FXSendLevel_5_x_Reverberator=0 -FXSendLevel_5_x_MainOutput=0 - -FXSendLevel_6_x_Tube=0 -FXSendLevel_6_x_Chorus=0 -FXSendLevel_6_x_Flanger=0 -FXSendLevel_6_x_Orbitone=0 -FXSendLevel_6_x_Phaser=0 -FXSendLevel_6_x_Delay=0 -FXSendLevel_6_x_PlateReverb=0 -FXSendLevel_6_x_Reverberator=0 -FXSendLevel_6_x_MainOutput=0 - -FXSendLevel_7_x_Tube=0 -FXSendLevel_7_x_Chorus=0 -FXSendLevel_7_x_Flanger=0 -FXSendLevel_7_x_Orbitone=0 -FXSendLevel_7_x_Phaser=0 -FXSendLevel_7_x_Delay=0 -FXSendLevel_7_x_PlateReverb=0 -FXSendLevel_7_x_Reverberator=0 -FXSendLevel_7_x_MainOutput=0 - -FXReturnLevel_Tube_x_Chorus=0 -FXReturnLevel_Tube_x_Flanger=0 -FXReturnLevel_Tube_x_Orbitone=0 -FXReturnLevel_Tube_x_Phaser=0 -FXReturnLevel_Tube_x_Delay=0 -FXReturnLevel_Tube_x_PlateReverb=0 -FXReturnLevel_Tube_x_Reverberator=0 -FXReturnLevel_Tube_x_MainOutput=0 - -FXReturnLevel_Chorus_x_Tube=0 -FXReturnLevel_Chorus_x_Flanger=0 -FXReturnLevel_Chorus_x_Orbitone=0 -FXReturnLevel_Chorus_x_Phaser=0 -FXReturnLevel_Chorus_x_Delay=0 -FXReturnLevel_Chorus_x_PlateReverb=0 -FXReturnLevel_Chorus_x_Reverberator=0 -FXReturnLevel_Chorus_x_MainOutput=0 - -FXReturnLevel_Flanger_x_Tube=0 -FXReturnLevel_Flanger_x_Chorus=0 -FXReturnLevel_Flanger_x_Orbitone=0 -FXReturnLevel_Flanger_x_Phaser=0 -FXReturnLevel_Flanger_x_Delay=0 -FXReturnLevel_Flanger_x_PlateReverb=0 -FXReturnLevel_Flanger_x_Reverberator=0 -FXReturnLevel_Flanger_x_MainOutput=0 - -FXReturnLevel_Orbitone_x_Tube=0 -FXReturnLevel_Orbitone_x_Chorus=0 -FXReturnLevel_Orbitone_x_Flanger=0 -FXReturnLevel_Orbitone_x_Phaser=0 -FXReturnLevel_Orbitone_x_Delay=0 -FXReturnLevel_Orbitone_x_PlateReverb=0 -FXReturnLevel_Orbitone_x_Reverberator=0 -FXReturnLevel_Orbitone_x_MainOutput=0 - -FXReturnLevel_Phaser_x_Tube=0 -FXReturnLevel_Phaser_x_Chorus=0 -FXReturnLevel_Phaser_x_Flanger=0 -FXReturnLevel_Phaser_x_Orbitone=0 -FXReturnLevel_Phaser_x_Delay=0 -FXReturnLevel_Phaser_x_PlateReverb=0 -FXReturnLevel_Phaser_x_Reverberator=0 -FXReturnLevel_Phaser_x_MainOutput=0 - -FXReturnLevel_Delay_x_Tube=0 -FXReturnLevel_Delay_x_Chorus=0 -FXReturnLevel_Delay_x_Flanger=0 -FXReturnLevel_Delay_x_Orbitone=0 -FXReturnLevel_Delay_x_Phaser=0 -FXReturnLevel_Delay_x_PlateReverb=0 -FXReturnLevel_Delay_x_Reverberator=0 -FXReturnLevel_Delay_x_MainOutput=0 - -FXReturnLevel_PlateReverb_x_Tube=0 -FXReturnLevel_PlateReverb_x_Chorus=0 -FXReturnLevel_PlateReverb_x_Flanger=0 -FXReturnLevel_PlateReverb_x_Orbitone=0 -FXReturnLevel_PlateReverb_x_Phaser=0 -FXReturnLevel_PlateReverb_x_Delay=0 -FXReturnLevel_PlateReverb_x_Reverberator=0 -FXReturnLevel_PlateReverb_x_MainOutput=0 - -FXReturnLevel_Reverberator_x_Tube=0 -FXReturnLevel_Reverberator_x_Chorus=0 -FXReturnLevel_Reverberator_x_Flanger=0 -FXReturnLevel_Reverberator_x_Orbitone=0 -FXReturnLevel_Reverberator_x_Phaser=0 -FXReturnLevel_Reverberator_x_Delay=0 -FXReturnLevel_Reverberator_x_PlateReverb=0 -FXReturnLevel_Reverberator_x_MainOutput=0 +FXSend_TG0_to_Tube=0 +FXSend_TG0_to_Chorus=0 +FXSend_TG0_to_Flanger=0 +FXSend_TG0_to_Orbitone=0 +FXSend_TG0_to_Phaser=0 +FXSend_TG0_to_Delay=0 +FXSend_TG0_to_PlateReverb=99 +FXSend_TG0_to_Reverberator=0 +FXSend_TG0_to_MainOutput=99 + +FXSend_TG1_to_Tube=0 +FXSend_TG1_to_Chorus=0 +FXSend_TG1_to_Flanger=0 +FXSend_TG1_to_Orbitone=0 +FXSend_TG1_to_Phaser=0 +FXSend_TG1_to_Delay=0 +FXSend_TG1_to_PlateReverb=0 +FXSend_TG1_to_Reverberator=0 +FXSend_TG1_to_MainOutput=0 + +FXSend_TG2_to_Tube=0 +FXSend_TG2_to_Chorus=0 +FXSend_TG2_to_Flanger=0 +FXSend_TG2_to_Orbitone=0 +FXSend_TG2_to_Phaser=0 +FXSend_TG2_to_Delay=0 +FXSend_TG2_to_PlateReverb=0 +FXSend_TG2_to_Reverberator=0 +FXSend_TG2_to_MainOutput=0 + +FXSend_TG3_to_Tube=0 +FXSend_TG3_to_Chorus=0 +FXSend_TG3_to_Flanger=0 +FXSend_TG3_to_Orbitone=0 +FXSend_TG3_to_Phaser=0 +FXSend_TG3_to_Delay=0 +FXSend_TG3_to_PlateReverb=0 +FXSend_TG3_to_Reverberator=0 +FXSend_TG3_to_MainOutput=0 + +FXSend_TG4_to_Tube=0 +FXSend_TG4_to_Chorus=0 +FXSend_TG4_to_Flanger=0 +FXSend_TG4_to_Orbitone=0 +FXSend_TG4_to_Phaser=0 +FXSend_TG4_to_Delay=0 +FXSend_TG4_to_PlateReverb=0 +FXSend_TG4_to_Reverberator=0 +FXSend_TG4_to_MainOutput=0 + +FXSend_TG5_to_Tube=0 +FXSend_TG5_to_Chorus=0 +FXSend_TG5_to_Flanger=0 +FXSend_TG5_to_Orbitone=0 +FXSend_TG5_to_Phaser=0 +FXSend_TG5_to_Delay=0 +FXSend_TG5_to_PlateReverb=0 +FXSend_TG5_to_Reverberator=0 +FXSend_TG5_to_MainOutput=0 + +FXSend_TG6_to_Tube=0 +FXSend_TG6_to_Chorus=0 +FXSend_TG6_to_Flanger=0 +FXSend_TG6_to_Orbitone=0 +FXSend_TG6_to_Phaser=0 +FXSend_TG6_to_Delay=0 +FXSend_TG6_to_PlateReverb=0 +FXSend_TG6_to_Reverberator=0 +FXSend_TG6_to_MainOutput=0 + +FXSend_TG7_to_Tube=0 +FXSend_TG7_to_Chorus=0 +FXSend_TG7_to_Flanger=0 +FXSend_TG7_to_Orbitone=0 +FXSend_TG7_to_Phaser=0 +FXSend_TG7_to_Delay=0 +FXSend_TG7_to_PlateReverb=0 +FXSend_TG7_to_Reverberator=0 +FXSend_TG7_to_MainOutput=0 + +FXSend_Tube_to_Chorus=0 +FXSend_Tube_to_Flanger=0 +FXSend_Tube_to_Orbitone=0 +FXSend_Tube_to_Phaser=0 +FXSend_Tube_to_Delay=0 +FXSend_Tube_to_PlateReverb=0 +FXSend_Tube_to_Reverberator=0 +FXSend_Tube_to_MainOutput=0 + +FXSend_Chorus_to_Tube=0 +FXSend_Chorus_to_Flanger=0 +FXSend_Chorus_to_Orbitone=0 +FXSend_Chorus_to_Phaser=0 +FXSend_Chorus_to_Delay=0 +FXSend_Chorus_to_PlateReverb=0 +FXSend_Chorus_to_Reverberator=0 +FXSend_Chorus_to_MainOutput=0 + +FXSend_Flanger_to_Tube=0 +FXSend_Flanger_to_Chorus=0 +FXSend_Flanger_to_Orbitone=0 +FXSend_Flanger_to_Phaser=0 +FXSend_Flanger_to_Delay=0 +FXSend_Flanger_to_PlateReverb=0 +FXSend_Flanger_to_Reverberator=0 +FXSend_Flanger_to_MainOutput=0 + +FXSend_Orbitone_to_Tube=0 +FXSend_Orbitone_to_Chorus=0 +FXSend_Orbitone_to_Flanger=0 +FXSend_Orbitone_to_Phaser=0 +FXSend_Orbitone_to_Delay=0 +FXSend_Orbitone_to_PlateReverb=0 +FXSend_Orbitone_to_Reverberator=0 +FXSend_Orbitone_to_MainOutput=0 + +FXSend_Phaser_to_Tube=0 +FXSend_Phaser_to_Chorus=0 +FXSend_Phaser_to_Flanger=0 +FXSend_Phaser_to_Orbitone=0 +FXSend_Phaser_to_Delay=0 +FXSend_Phaser_to_PlateReverb=0 +FXSend_Phaser_to_Reverberator=0 +FXSend_Phaser_to_MainOutput=0 + +FXSend_Delay_to_Tube=0 +FXSend_Delay_to_Chorus=0 +FXSend_Delay_to_Flanger=0 +FXSend_Delay_to_Orbitone=0 +FXSend_Delay_to_Phaser=0 +FXSend_Delay_to_PlateReverb=0 +FXSend_Delay_to_Reverberator=0 +FXSend_Delay_to_MainOutput=0 + +FXSend_PlateReverb_to_Tube=0 +FXSend_PlateReverb_to_Chorus=0 +FXSend_PlateReverb_to_Flanger=0 +FXSend_PlateReverb_to_Orbitone=0 +FXSend_PlateReverb_to_Phaser=0 +FXSend_PlateReverb_to_Delay=0 +FXSend_PlateReverb_to_Reverberator=0 +FXSend_PlateReverb_to_MainOutput=99 + +FXSend_Reverberator_to_Tube=0 +FXSend_Reverberator_to_Chorus=0 +FXSend_Reverberator_to_Flanger=0 +FXSend_Reverberator_to_Orbitone=0 +FXSend_Reverberator_to_Phaser=0 +FXSend_Reverberator_to_Delay=0 +FXSend_Reverberator_to_PlateReverb=0 +FXSend_Reverberator_to_MainOutput=0 diff --git a/src/performanceconfig.cpp b/src/performanceconfig.cpp index 89c656f..f70ddc0 100644 --- a/src/performanceconfig.cpp +++ b/src/performanceconfig.cpp @@ -100,9 +100,11 @@ bool CPerformanceConfig::Load (void) PropertyName.Format ("NoteShift%u", nTG+1); m_nNoteShift[nTG] = m_Properties.GetSignedNumber (PropertyName, 0); +#if defined(PLATE_REVERB_ENABLE) PropertyName.Format ("ReverbSend%u", nTG+1); m_nReverbSend[nTG] = m_Properties.GetNumber (PropertyName, 50); - +#endif + PropertyName.Format ("PitchBendRange%u", nTG+1); m_nPitchBendRange[nTG] = m_Properties.GetNumber (PropertyName, 2); @@ -148,7 +150,7 @@ bool CPerformanceConfig::Load (void) PropertyName.Format ("AftertouchTarget%u", nTG+1); m_nAftertouchTarget[nTG] = m_Properties.GetNumber (PropertyName, 0); - } + } m_bCompressorEnable = m_Properties.GetNumber ("CompressorEnable", 1) != 0; @@ -198,31 +200,42 @@ bool CPerformanceConfig::Load (void) this->m_nFXReverberatorDiffusion = this->m_Properties.GetNumber("FXReverberatorDiffusion", 30); this->m_nFXReverberatorLP = this->m_Properties.GetNumber("FXReverberatorLP", 99); - for(unsigned in = 0; in < CConfig::ToneGenerators; ++in) + bool revUsed = false; + for(unsigned nTG = 0; nTG < CConfig::ToneGenerators; ++nTG) { - for(unsigned fx = 0; fx < MixerOutput::kFXCount; ++fx) + CString reverbSendProp; + reverbSendProp.Format ("ReverbSend%u", nTG + 1); + unsigned reverbSend = m_Properties.GetNumber(reverbSendProp, 50); + revUsed |= (reverbSend > 0); + + for(unsigned toFX = 0; toFX < MixerOutput::kFXCount; ++toFX) { - std::ostringstream oss("FXSendLevel_"); - oss << in << "_x_" << toString(static_cast(fx)); + CString propertyName; + propertyName.Format("FXSend_TG%u_to_%s", nTG + 1, toString(static_cast(toFX)).c_str()); unsigned defaultLevel = 0; - if(fx == MixerOutput::MainOutput) defaultLevel = 50; - else if(fx == MixerOutput::FX_PlateReverb) defaultLevel = 50; - this->m_nFXSendLevel[in][fx] = this->m_Properties.GetNumber(oss.str().c_str(), defaultLevel); + if(nTG == 0) + { + if(toFX == MixerOutput::FX_PlateReverb) defaultLevel = reverbSend; + else if(toFX == MixerOutput::MainOutput) defaultLevel = 99 - reverbSend; + } + this->m_nTGSendLevel[nTG][toFX] = this->m_Properties.GetNumber(propertyName, defaultLevel); } } size_t end = MixerOutput::kFXCount - 1; - for(size_t ret = 0; ret < end; ++ret) + for(size_t fromFX = 0; fromFX < end; ++fromFX) { - for(size_t fx = 0; fx < MixerOutput::kFXCount; ++fx) + for(size_t toFX = 0; toFX < MixerOutput::kFXCount; ++toFX) { - std::ostringstream oss("FXReturnLevel_"); - oss << toString(static_cast(ret)) << "_x_" << toString(static_cast(fx)); + CString propertyName; + propertyName.Format("FXSend_%s_to_%s", toString(static_cast(fromFX)).c_str(), toString(static_cast(toFX)).c_str()); unsigned defaultLevel = 0; - if(ret == MixerOutput::FX_PlateReverb && fx == MixerOutput::MainOutput) defaultLevel = 50; - this->m_nFXReturnLevel[ret][fx] = this->m_Properties.GetNumber(oss.str().c_str(), defaultLevel); + if(fromFX == MixerOutput::FX_PlateReverb && toFX == MixerOutput::MainOutput) defaultLevel = revUsed ? 99 : 0; + this->m_nFXSendLevel[fromFX][toFX] = this->m_Properties.GetNumber(propertyName, defaultLevel); } } + + this->m_bFXBypass = this->m_Properties.GetNumber("FXBypass", 0); #endif return bResult; @@ -282,9 +295,11 @@ bool CPerformanceConfig::Save (void) PropertyName.Format ("NoteShift%u", nTG+1); m_Properties.SetSignedNumber (PropertyName, m_nNoteShift[nTG]); +#if defined(PLATE_REVERB_ENABLE) PropertyName.Format ("ReverbSend%u", nTG+1); m_Properties.SetNumber (PropertyName, m_nReverbSend[nTG]); - +#endif + PropertyName.Format ("PitchBendRange%u", nTG+1); m_Properties.SetNumber (PropertyName, m_nPitchBendRange[nTG]); @@ -335,6 +350,7 @@ bool CPerformanceConfig::Save (void) m_Properties.SetNumber ("CompressorEnable", m_bCompressorEnable ? 1 : 0); +#if defined(PLATE_REVERB_ENABLE) || defined(MIXING_CONSOLE_ENABLE) m_Properties.SetNumber ("ReverbEnable", m_bReverbEnable ? 1 : 0); m_Properties.SetNumber ("ReverbSize", m_nReverbSize); m_Properties.SetNumber ("ReverbHighDamp", m_nReverbHighDamp); @@ -342,8 +358,9 @@ bool CPerformanceConfig::Save (void) m_Properties.SetNumber ("ReverbLowPass", m_nReverbLowPass); m_Properties.SetNumber ("ReverbDiffusion", m_nReverbDiffusion); m_Properties.SetNumber ("ReverbLevel", m_nReverbLevel); +#endif -#ifdef MIXING_CONSOLE_ENABLE +#if defined(MIXING_CONSOLE_ENABLE) this->m_Properties.SetNumber("FXTubeEnable", this->m_bFXTubeEnable ? 1 : 0); this->m_Properties.SetNumber("FXTubeOverdrive", this->m_nFXTubeOverdrive); @@ -379,26 +396,28 @@ bool CPerformanceConfig::Save (void) this->m_Properties.SetNumber("FXReverberatorDiffusion", this->m_nFXReverberatorDiffusion); this->m_Properties.SetNumber("FXReverberatorLP", this->m_nFXReverberatorLP); - for(unsigned in = 0; in < CConfig::ToneGenerators; ++in) + for(unsigned nTG = 0; nTG < CConfig::ToneGenerators; nTG++) { - for(size_t fx = 0; fx < MixerOutput::kFXCount; ++fx) + for(size_t toFX = 0; toFX < MixerOutput::kFXCount; ++toFX) { - std::ostringstream oss("FXSendLevel_"); - oss << in << "_x_" << toString(static_cast(fx)); - this->m_Properties.SetNumber(oss.str().c_str(), this->m_nFXSendLevel[in][fx]); + CString propertyName; + propertyName.Format("FXSend_TG%u_to_%s", nTG + 1, toString(static_cast(toFX)).c_str()); + this->m_Properties.SetNumber(propertyName, this->m_nTGSendLevel[nTG][toFX]); } } size_t end = MixerOutput::kFXCount - 1; - for(size_t ret = 0; ret < end; ++ret) + for(size_t fromFX = 0; fromFX < end; ++fromFX) { - for(size_t fx = 0; fx < MixerOutput::kFXCount; ++fx) + for(size_t toFX = 0; toFX < MixerOutput::kFXCount; ++toFX) { - std::ostringstream oss("FXReturnLevel_"); - oss << toString(static_cast(ret)) << "_x_" << toString(static_cast(fx)); - this->m_Properties.SetNumber(oss.str().c_str(), this->m_nFXReturnLevel[ret][fx]); + CString propertyName; + propertyName.Format("FXSend_%s_to_%s", toString(static_cast(fromFX)).c_str(), toString(static_cast(toFX)).c_str()); + this->m_Properties.SetNumber(propertyName, this->m_nFXSendLevel[fromFX][toFX]); } } + + this->m_Properties.SetNumber("FXBypass", this->m_bFXBypass ? 1 : 0); #endif return m_Properties.Save (); @@ -470,11 +489,13 @@ int CPerformanceConfig::GetNoteShift (unsigned nTG) const return m_nNoteShift[nTG]; } +#if defined(PLATE_REVERB_ENABLE) unsigned CPerformanceConfig::GetReverbSend (unsigned nTG) const { assert (nTG < CConfig::ToneGenerators); return m_nReverbSend[nTG]; } +#endif void CPerformanceConfig::SetBankNumber (unsigned nValue, unsigned nTG) { @@ -542,11 +563,13 @@ void CPerformanceConfig::SetNoteShift (int nValue, unsigned nTG) m_nNoteShift[nTG] = nValue; } +#if defined(PLATE_REVERB_ENABLE) void CPerformanceConfig::SetReverbSend (unsigned nValue, unsigned nTG) { assert (nTG < CConfig::ToneGenerators); m_nReverbSend[nTG] = nValue; } +#endif bool CPerformanceConfig::GetCompressorEnable (void) const { @@ -1190,18 +1213,18 @@ unsigned CPerformanceConfig::GetFXReverberatorLP(void) const return this->m_nFXReverberatorLP; } -unsigned CPerformanceConfig::GetFXSendLevel(unsigned in, MixerOutput fx) const +unsigned CPerformanceConfig::GetTGSendLevel(unsigned in, MixerOutput fx) const { assert(in < CConfig::ToneGenerators); assert(fx < MixerOutput::kFXCount); - return this->m_nFXSendLevel[in][fx]; + return this->m_nTGSendLevel[in][fx]; } -unsigned CPerformanceConfig::GetFXReturnLevel(MixerOutput ret, MixerOutput fx) const +unsigned CPerformanceConfig::GetFXSendLevel(MixerOutput fromFX, MixerOutput toFX) const { - assert(ret < (MixerOutput::kFXCount - 1)); - assert(fx < MixerOutput::kFXCount); - return (ret == fx) ? 0 : this->m_nFXReturnLevel[ret][fx]; + assert(fromFX < (MixerOutput::kFXCount - 1)); + assert(toFX < MixerOutput::kFXCount); + return (fromFX == toFX) ? 0 : this->m_nFXSendLevel[fromFX][toFX]; } void CPerformanceConfig::SetFXTubeEnable(bool bValue) @@ -1344,18 +1367,28 @@ void CPerformanceConfig::SetFXReverberatorLP(unsigned nValue) this->m_nFXReverberatorLP = nValue; } -void CPerformanceConfig::SetFXSendLevel(unsigned in, MixerOutput fx, unsigned nValue) +void CPerformanceConfig::SetTGSendLevel(unsigned in, MixerOutput fx, unsigned nValue) { assert(in < CConfig::ToneGenerators); assert(fx < MixerOutput::kFXCount); - this->m_nFXSendLevel[in][fx] = nValue; + this->m_nTGSendLevel[in][fx] = nValue; } -void CPerformanceConfig::SetFXReturnLevel(MixerOutput ret, MixerOutput fx, unsigned nValue) +void CPerformanceConfig::SetFXSendLevel(MixerOutput fromFX, MixerOutput toFX, unsigned nValue) { - assert(ret < (MixerOutput::kFXCount - 1)); - assert(fx < MixerOutput::kFXCount); - this->m_nFXReturnLevel[ret][fx] = (ret == fx) ? 0 : nValue; + assert(fromFX < (MixerOutput::kFXCount - 1)); + assert(toFX < MixerOutput::kFXCount); + this->m_nFXSendLevel[fromFX][toFX] = (fromFX == toFX) ? 0 : nValue; +} + +void CPerformanceConfig::SetFXBypass(bool bypass) +{ + this->m_bFXBypass = bypass; +} + +bool CPerformanceConfig::IsFXBypass() const +{ + return this->m_bFXBypass; } #endif diff --git a/src/performanceconfig.h b/src/performanceconfig.h index 3247a93..e698287 100644 --- a/src/performanceconfig.h +++ b/src/performanceconfig.h @@ -52,7 +52,9 @@ public: unsigned GetNoteLimitLow (unsigned nTG) const; // 0 .. 127 unsigned GetNoteLimitHigh (unsigned nTG) const; // 0 .. 127 int GetNoteShift (unsigned nTG) const; // -24 .. 24 +#if defined(PLATE_REVERB_ENABLE) unsigned GetReverbSend (unsigned nTG) const; // 0 .. 127 +#endif unsigned GetPitchBendRange (unsigned nTG) const; // 0 .. 12 unsigned GetPitchBendStep (unsigned nTG) const; // 0 .. 12 unsigned GetPortamentoMode (unsigned nTG) const; // 0 .. 1 @@ -80,7 +82,9 @@ public: void SetNoteLimitLow (unsigned nValue, unsigned nTG); void SetNoteLimitHigh (unsigned nValue, unsigned nTG); void SetNoteShift (int nValue, unsigned nTG); +#if defined(PLATE_REVERB_ENABLE) void SetReverbSend (unsigned nValue, unsigned nTG); +#endif void SetPitchBendRange (unsigned nValue, unsigned nTG); void SetPitchBendStep (unsigned nValue, unsigned nTG); void SetPortamentoMode (unsigned nValue, unsigned nTG); @@ -153,8 +157,8 @@ public: unsigned GetFXReverberatorTime(void) const; unsigned GetFXReverberatorDiffusion(void) const; unsigned GetFXReverberatorLP(void) const; - unsigned GetFXSendLevel(unsigned in, MixerOutput fx) const; - unsigned GetFXReturnLevel(MixerOutput ret, MixerOutput fx) const; + unsigned GetTGSendLevel(unsigned in, MixerOutput fx) const; + unsigned GetFXSendLevel(MixerOutput ret, MixerOutput fx) const; void SetFXTubeEnable(bool bValue); void SetFXTubeOverdrive(unsigned nValue); @@ -191,8 +195,11 @@ public: void SetFXReverberatorDiffusion(unsigned nValue); void SetFXReverberatorLP(unsigned nValue); - void SetFXSendLevel(unsigned in, MixerOutput fx, unsigned nValue); - void SetFXReturnLevel(MixerOutput ret, MixerOutput fx, unsigned nValue); + void SetTGSendLevel(unsigned in, MixerOutput fx, unsigned nValue); + void SetFXSendLevel(MixerOutput fromFX, MixerOutput toFX, unsigned nValue); + + void SetFXBypass(bool bypass); + bool IsFXBypass() const; #endif bool VoiceDataFilled(unsigned nTG); @@ -224,7 +231,9 @@ private: unsigned m_nNoteLimitLow[CConfig::ToneGenerators]; unsigned m_nNoteLimitHigh[CConfig::ToneGenerators]; int m_nNoteShift[CConfig::ToneGenerators]; +#if defined(PLATE_REVERB_ENABLE) int m_nReverbSend[CConfig::ToneGenerators]; +#endif unsigned m_nPitchBendRange[CConfig::ToneGenerators]; unsigned m_nPitchBendStep[CConfig::ToneGenerators]; unsigned m_nPortamentoMode[CConfig::ToneGenerators]; @@ -262,7 +271,7 @@ private: unsigned m_nReverbDiffusion; unsigned m_nReverbLevel; -#ifdef MIXING_CONSOLE_ENABLE +#if defined(MIXING_CONSOLE_ENABLE) bool m_bFXTubeEnable; unsigned m_nFXTubeWet; unsigned m_nFXTubeOverdrive; @@ -299,8 +308,10 @@ private: unsigned m_nFXReverberatorDiffusion; unsigned m_nFXReverberatorLP; - unsigned m_nFXSendLevel[CConfig::ToneGenerators][MixerOutput::kFXCount]; - unsigned m_nFXReturnLevel[MixerOutput::kFXCount - 1][MixerOutput::kFXCount]; + unsigned m_nTGSendLevel[CConfig::ToneGenerators + MixerOutput::kFXCount - 1][MixerOutput::kFXCount]; + unsigned m_nFXSendLevel[MixerOutput::kFXCount - 1][MixerOutput::kFXCount]; + + bool m_bFXBypass; #endif }; diff --git a/src/uimenu.cpp b/src/uimenu.cpp index ea8a731..053547c 100644 --- a/src/uimenu.cpp +++ b/src/uimenu.cpp @@ -99,7 +99,7 @@ const CUIMenu::TMenuItem CUIMenu::s_TGMenu[] = const CUIMenu::TMenuItem CUIMenu::s_EffectsMenu[] = { - {"Compress",CUIMenu::EditGlobalParameter, 0, CMiniDexed::ParameterCompressorEnable}, + {"Compress",CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterCompressorEnable}, #if defined(MIXING_CONSOLE_ENABLE) {"Tube", CUIMenu::MenuHandler, CUIMenu::s_FXTube}, {"Chorus", CUIMenu::MenuHandler, CUIMenu::s_FXChorus}, @@ -113,6 +113,8 @@ const CUIMenu::TMenuItem CUIMenu::s_EffectsMenu[] = #elif defined(MIXING_CONSOLE_ENABLE) {"Plt Rvb", CUIMenu::MenuHandler, CUIMenu::s_FXPlateReverb}, {"Rvbrtor", CUIMenu::MenuHandler, CUIMenu::s_FXReverberator}, + {"MainOut", CUIMenu::MenuHandler, CUIMenu::s_FXMainOutputLevels}, + {"Bypass", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXBypass}, #endif {0} }; @@ -251,15 +253,15 @@ const CUIMenu::TMenuItem CUIMenu::s_FXReverberator[] = const CUIMenu::TMenuItem CUIMenu::s_FXTubeLevels[] = { - {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube, 0}, + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube}, #if defined(ARM_ALLOW_MULTI_CORE) - {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube, 1}, - {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube, 2}, - {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube, 3}, - {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube, 4}, - {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube, 5}, - {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube, 6}, - {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube, 7}, + {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube}, + {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube}, + {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube}, + {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube}, + {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube}, + {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube}, + {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube}, #endif {"ChR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_TubeSend}, {"Flg >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_TubeSend}, @@ -286,15 +288,15 @@ const CUIMenu::TMenuItem CUIMenu::s_FXTubeSend[] = const CUIMenu::TMenuItem CUIMenu::s_FXChorusLevels[] = { - {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus, 0}, + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus}, #if defined(ARM_ALLOW_MULTI_CORE) - {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus, 1}, - {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus, 2}, - {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus, 3}, - {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus, 4}, - {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus, 5}, - {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus, 6}, - {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus, 7}, + {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus}, + {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus}, + {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus}, + {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus}, + {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus}, + {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus}, + {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus}, #endif {"Tub >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_ChorusSend}, {"Flg >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_ChorusSend}, @@ -321,15 +323,15 @@ const CUIMenu::TMenuItem CUIMenu::s_FXChorusSend[] = const CUIMenu::TMenuItem CUIMenu::s_FXFlangerLevels[] = { - {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger, 0}, + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger}, #if defined(ARM_ALLOW_MULTI_CORE) - {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger, 1}, - {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger, 2}, - {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger, 3}, - {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger, 4}, - {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger, 5}, - {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger, 6}, - {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger, 7}, + {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger}, + {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger}, + {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger}, + {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger}, + {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger}, + {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger}, + {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger}, #endif {"Tub >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_FlangerSend}, {"ChR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_FlangerSend}, @@ -356,15 +358,15 @@ const CUIMenu::TMenuItem CUIMenu::s_FXFlangerSend[] = const CUIMenu::TMenuItem CUIMenu::s_FXOrbitoneLevels[] = { - {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone, 0}, + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone}, #if defined(ARM_ALLOW_MULTI_CORE) - {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone, 1}, - {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone, 2}, - {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone, 3}, - {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone, 4}, - {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone, 5}, - {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone, 6}, - {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone, 7}, + {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone}, + {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone}, + {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone}, + {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone}, + {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone}, + {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone}, + {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone}, #endif {"Tub >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_OrbitoneSend}, {"ChR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_OrbitoneSend}, @@ -391,15 +393,15 @@ const CUIMenu::TMenuItem CUIMenu::s_FXOrbitoneSend[] = const CUIMenu::TMenuItem CUIMenu::s_FXPhaserLevels[] = { - {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser, 0}, + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser}, #if defined(ARM_ALLOW_MULTI_CORE) - {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser, 1}, - {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser, 2}, - {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser, 3}, - {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser, 4}, - {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser, 5}, - {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser, 6}, - {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser, 7}, + {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser}, + {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser}, + {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser}, + {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser}, + {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser}, + {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser}, + {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser}, #endif {"Tub >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_PhaserSend}, {"ChR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_PhaserSend}, @@ -426,15 +428,15 @@ const CUIMenu::TMenuItem CUIMenu::s_FXPhaserSend[] = const CUIMenu::TMenuItem CUIMenu::s_FXDelayLevels[] = { - {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay, 0}, + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay}, #if defined(ARM_ALLOW_MULTI_CORE) - {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay, 1}, - {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay, 2}, - {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay, 3}, - {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay, 4}, - {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay, 5}, - {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay, 6}, - {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay, 7}, + {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay}, + {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay}, + {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay}, + {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay}, + {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay}, + {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay}, + {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay}, #endif {"Tub >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_DelaySend}, {"ChR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_DelaySend}, @@ -461,15 +463,15 @@ const CUIMenu::TMenuItem CUIMenu::s_FXDelaySend[] = const CUIMenu::TMenuItem CUIMenu::s_FXPlateReverbLevels[] = { - {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb, 0}, + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb}, #if defined(ARM_ALLOW_MULTI_CORE) - {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb, 1}, - {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb, 2}, - {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb, 3}, - {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb, 4}, - {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb, 5}, - {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb, 6}, - {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb, 7}, + {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb}, + {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb}, + {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb}, + {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb}, + {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb}, + {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb}, + {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb}, #endif {"Tub >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_PlateReverbSend}, {"ChR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_PlateReverbSend}, @@ -496,15 +498,15 @@ const CUIMenu::TMenuItem CUIMenu::s_FXPlateReverbSend[] = const CUIMenu::TMenuItem CUIMenu::s_FXReverberatorLevels[] = { - {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator, 0}, + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator}, #if defined(ARM_ALLOW_MULTI_CORE) - {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator, 1}, - {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator, 2}, - {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator, 3}, - {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator, 4}, - {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator, 5}, - {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator, 6}, - {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator, 7}, + {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator}, + {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator}, + {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator}, + {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator}, + {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator}, + {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator}, + {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator}, #endif {"Tub >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_ReverberatorSend}, {"ChR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_ReverberatorSend}, @@ -529,6 +531,29 @@ const CUIMenu::TMenuItem CUIMenu::s_FXReverberatorSend[] = {0} }; +const CUIMenu::TMenuItem CUIMenu::s_FXMainOutputLevels[] = +{ + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXMainOutput}, +#if defined(ARM_ALLOW_MULTI_CORE) + {"TG2 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXMainOutput}, + {"TG3 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXMainOutput}, + {"TG4 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXMainOutput}, + {"TG5 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXMainOutput}, + {"TG6 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXMainOutput}, + {"TG7 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXMainOutput}, + {"TG8 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXMainOutput}, +#endif + {"Tub >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_MainOutput}, + {"ChR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_MainOutput}, + {"Flg >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_MainOutput}, + {"Orb >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_MainOutput}, + {"PhR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_MainOutput}, + {"Dly >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_MainOutput}, + {"Plt >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_MainOutput}, + {"Rev >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_MainOutput}, + {0} +}; + #endif // inserting menu items before "OP1" affect OPShortcutHandler() @@ -660,85 +685,86 @@ const CUIMenu::TParameter CUIMenu::s_GlobalParameter[CMiniDexed::TParameter::Par {0, 99, 1}, // ParameterFXReverberatorLP // FX > Tube Return parameters - {0, 99, 1}, // ParameterFXTube_ChorusReturn, - {0, 99, 1}, // ParameterFXTube_FlangerReturn, - {0, 99, 1}, // ParameterFXTube_OrbitoneReturn, - {0, 99, 1}, // ParameterFXTube_PhaserReturn, - {0, 99, 1}, // ParameterFXTube_DelayReturn, - {0, 99, 1}, // ParameterFXTube_PlateReverbReturn, - {0, 99, 1}, // ParameterFXTube_ReverberatorReturn, - {0, 99, 1}, // ParameterFXTube_MainOutput, + {0, 99, 1}, // ParameterFXTube_ChorusSend + {0, 99, 1}, // ParameterFXTube_FlangerSend + {0, 99, 1}, // ParameterFXTube_OrbitoneSend + {0, 99, 1}, // ParameterFXTube_PhaserSend + {0, 99, 1}, // ParameterFXTube_DelaySend + {0, 99, 1}, // ParameterFXTube_PlateReverbSend + {0, 99, 1}, // ParameterFXTube_ReverberatorSend + {0, 99, 1}, // ParameterFXTube_MainOutput // FX > Chorus Return parameters - {0, 99, 1}, // ParameterFXChorus_TubeReturn, - {0, 99, 1}, // ParameterFXChorus_FlangerReturn, - {0, 99, 1}, // ParameterFXChorus_OrbitoneReturn, - {0, 99, 1}, // ParameterFXChorus_PhaserReturn, - {0, 99, 1}, // ParameterFXChorus_DelayReturn, - {0, 99, 1}, // ParameterFXChorus_PlateReverbReturn, - {0, 99, 1}, // ParameterFXChorus_ReverberatorReturn, - {0, 99, 1}, // ParameterFXChorus_MainOutput, + {0, 99, 1}, // ParameterFXChorus_TubeSend + {0, 99, 1}, // ParameterFXChorus_FlangerSend + {0, 99, 1}, // ParameterFXChorus_OrbitoneSend + {0, 99, 1}, // ParameterFXChorus_PhaserSend + {0, 99, 1}, // ParameterFXChorus_DelaySend + {0, 99, 1}, // ParameterFXChorus_PlateReverbSend + {0, 99, 1}, // ParameterFXChorus_ReverberatorSend + {0, 99, 1}, // ParameterFXChorus_MainOutput // FX > Flanger Return parameters - {0, 99, 1}, // ParameterFXFlanger_TubeReturn, - {0, 99, 1}, // ParameterFXFlanger_ChorusReturn, - {0, 99, 1}, // ParameterFXFlanger_OrbitoneReturn, - {0, 99, 1}, // ParameterFXFlanger_PhaserReturn, - {0, 99, 1}, // ParameterFXFlanger_DelayReturn, - {0, 99, 1}, // ParameterFXFlanger_PlateReverbReturn, - {0, 99, 1}, // ParameterFXFlanger_ReverberatorReturn, - {0, 99, 1}, // ParameterFXFlanger_MainOutput, + {0, 99, 1}, // ParameterFXFlanger_TubeSend + {0, 99, 1}, // ParameterFXFlanger_ChorusSend + {0, 99, 1}, // ParameterFXFlanger_OrbitoneSend + {0, 99, 1}, // ParameterFXFlanger_PhaserSend + {0, 99, 1}, // ParameterFXFlanger_DelaySend + {0, 99, 1}, // ParameterFXFlanger_PlateReverbSend + {0, 99, 1}, // ParameterFXFlanger_ReverberatorSend + {0, 99, 1}, // ParameterFXFlanger_MainOutput // FX > Orbitone Return parameters - {0, 99, 1}, // ParameterFXOrbitone_TubeReturn, - {0, 99, 1}, // ParameterFXOrbitone_ChorusReturn, - {0, 99, 1}, // ParameterFXOrbitone_FlangerReturn, - {0, 99, 1}, // ParameterFXOrbitone_PhaserReturn, - {0, 99, 1}, // ParameterFXOrbitone_DelayReturn, - {0, 99, 1}, // ParameterFXOrbitone_PlateReverbReturn, - {0, 99, 1}, // ParameterFXOrbitone_ReverberatorReturn, - {0, 99, 1}, // ParameterFXOrbitone_MainOutput, + {0, 99, 1}, // ParameterFXOrbitone_TubeSend + {0, 99, 1}, // ParameterFXOrbitone_ChorusSend + {0, 99, 1}, // ParameterFXOrbitone_FlangerSend + {0, 99, 1}, // ParameterFXOrbitone_PhaserSend + {0, 99, 1}, // ParameterFXOrbitone_DelaySend + {0, 99, 1}, // ParameterFXOrbitone_PlateReverbSend + {0, 99, 1}, // ParameterFXOrbitone_ReverberatorSend + {0, 99, 1}, // ParameterFXOrbitone_MainOutput // FX > Phaser Return parameters - {0, 99, 1}, // ParameterFXPhaser_TubeReturn, - {0, 99, 1}, // ParameterFXPhaser_ChorusReturn, - {0, 99, 1}, // ParameterFXPhaser_FlangerReturn, - {0, 99, 1}, // ParameterFXPhaser_OrbitoneReturn, - {0, 99, 1}, // ParameterFXPhaser_DelayReturn, - {0, 99, 1}, // ParameterFXPhaser_PlateReverbReturn, - {0, 99, 1}, // ParameterFXPhaser_ReverberatorReturn, - {0, 99, 1}, // ParameterFXPhaser_MainOutput, + {0, 99, 1}, // ParameterFXPhaser_TubeSend + {0, 99, 1}, // ParameterFXPhaser_ChorusSend + {0, 99, 1}, // ParameterFXPhaser_FlangerSend + {0, 99, 1}, // ParameterFXPhaser_OrbitoneSend + {0, 99, 1}, // ParameterFXPhaser_DelaySend + {0, 99, 1}, // ParameterFXPhaser_PlateReverbSend + {0, 99, 1}, // ParameterFXPhaser_ReverberatorSend + {0, 99, 1}, // ParameterFXPhaser_MainOutput // FX > Delay Return parameters - {0, 99, 1}, // ParameterFXDelay_TubeReturn, - {0, 99, 1}, // ParameterFXDelay_ChorusReturn, - {0, 99, 1}, // ParameterFXDelay_FlangerReturn, - {0, 99, 1}, // ParameterFXDelay_OrbitoneReturn, - {0, 99, 1}, // ParameterFXDelay_PhaserReturn, - {0, 99, 1}, // ParameterFXDelay_PlateReverbReturn, - {0, 99, 1}, // ParameterFXDelay_ReverberatorReturn, - {0, 99, 1}, // ParameterFXDelay_MainOutput, + {0, 99, 1}, // ParameterFXDelay_TubeSend + {0, 99, 1}, // ParameterFXDelay_ChorusSend + {0, 99, 1}, // ParameterFXDelay_FlangerSend + {0, 99, 1}, // ParameterFXDelay_OrbitoneSend + {0, 99, 1}, // ParameterFXDelay_PhaserSend + {0, 99, 1}, // ParameterFXDelay_PlateReverbSend + {0, 99, 1}, // ParameterFXDelay_ReverberatorSend + {0, 99, 1}, // ParameterFXDelay_MainOutput // FX > Reverb Return parameters - {0, 99, 1}, // ParameterFXReverb_TubeReturn, - {0, 99, 1}, // ParameterFXReverb_ChorusReturn, - {0, 99, 1}, // ParameterFXReverb_FlangerReturn, - {0, 99, 1}, // ParameterFXReverb_OrbitoneReturn, - {0, 99, 1}, // ParameterFXReverb_PhaserReturn, - {0, 99, 1}, // ParameterFXReverb_DelayReturn, - {0, 99, 1}, // ParameterFXReverb_ReverberatorReturn, - {0, 99, 1}, // ParameterFXReverb_MainOutput, + {0, 99, 1}, // ParameterFXPlateReverb_TubeSend + {0, 99, 1}, // ParameterFXPlateReverb_ChorusSend + {0, 99, 1}, // ParameterFXPlateReverb_FlangerSend + {0, 99, 1}, // ParameterFXPlateReverb_OrbitoneSend + {0, 99, 1}, // ParameterFXPlateReverb_PhaserSend + {0, 99, 1}, // ParameterFXPlateReverb_DelaySend + {0, 99, 1}, // ParameterFXPlateReverb_ReverberatorSend + {0, 99, 1}, // ParameterFXPlateReverb_MainOutput // FX > Reverberator Return parameters - {0, 99, 1}, // ParameterFXReverberator_TubeReturn, - {0, 99, 1}, // ParameterFXReverberator_ChorusReturn, - {0, 99, 1}, // ParameterFXReverberator_FlangerReturn, - {0, 99, 1}, // ParameterFXReverberator_OrbitoneReturn, - {0, 99, 1}, // ParameterFXReverberator_PhaserReturn, - {0, 99, 1}, // ParameterFXReverberator_DelayReturn, - {0, 99, 1}, // ParameterFXReverberator_PlateReverbReturn, - {0, 99, 1}, // ParameterFXReverberator_MainOutput, - + {0, 99, 1}, // ParameterFXReverberator_TubeSend + {0, 99, 1}, // ParameterFXReverberator_ChorusSend + {0, 99, 1}, // ParameterFXReverberator_FlangerSend + {0, 99, 1}, // ParameterFXReverberator_OrbitoneSend + {0, 99, 1}, // ParameterFXReverberator_PhaserSend + {0, 99, 1}, // ParameterFXReverberator_DelaySend + {0, 99, 1}, // ParameterFXReverberator_PlateReverbSend + {0, 99, 1}, // ParameterFXReverberator_MainOutput + + {0, 1, 1, ToOnOff} // ParameterFXBypass #endif // END FX global parameters mapping definition }; @@ -746,53 +772,54 @@ const CUIMenu::TParameter CUIMenu::s_GlobalParameter[CMiniDexed::TParameter::Par // must match CMiniDexed::TTGParameter const CUIMenu::TParameter CUIMenu::s_TGParameter[CMiniDexed::TTGParameter::TGParameterUnknown] = { - {0, CSysExFileLoader::MaxVoiceBankID, 1}, // TGParameterVoiceBank - {0, 0, 0}, // TGParameterVoiceBankMSB (not used in menus) - {0, 0, 0}, // TGParameterVoiceBankLSB (not used in menus) - {0, CSysExFileLoader::VoicesPerBank-1, 1}, // TGParameterProgram - {0, 127, 8, ToVolume}, // TGParameterVolume - {0, 127, 8, ToPan}, // TGParameterPan - {-99, 99, 1}, // TGParameterMasterTune - {0, 99, 1}, // TGParameterCutoff - {0, 99, 1}, // TGParameterResonance - {0, CMIDIDevice::ChannelUnknown-1, 1, ToMIDIChannel}, // TGParameterMIDIChannel + {0, CSysExFileLoader::MaxVoiceBankID, 1}, // TGParameterVoiceBank + {0, 0, 0}, // TGParameterVoiceBankMSB (not used in menus) + {0, 0, 0}, // TGParameterVoiceBankLSB (not used in menus) + {0, CSysExFileLoader::VoicesPerBank-1, 1}, // TGParameterProgram + {0, 127, 8, ToVolume}, // TGParameterVolume + {0, 127, 8, ToPan}, // TGParameterPan + {-99, 99, 1}, // TGParameterMasterTune + {0, 99, 1}, // TGParameterCutoff + {0, 99, 1}, // TGParameterResonance + {0, CMIDIDevice::ChannelUnknown-1, 1, ToMIDIChannel}, // TGParameterMIDIChannel #if defined(PLATE_REVERB_ENABLE) - {0, 99, 1}, // TGParameterReverbSend + {0, 99, 1}, // TGParameterReverbSend #endif - {0, 12, 1}, // TGParameterPitchBendRange - {0, 12, 1}, // TGParameterPitchBendStep - {0, 1, 1, ToPortaMode}, // TGParameterPortamentoMode - {0, 1, 1, ToPortaGlissando}, // TGParameterPortamentoGlissando - {0, 99, 1}, // TGParameterPortamentoTime - {0, 1, 1, ToPolyMono}, // TGParameterMonoMode - {0, 99, 1}, //MW Range - {0, 1, 1, ToOnOff}, //MW Pitch - {0, 1, 1, ToOnOff}, //MW Amp - {0, 1, 1, ToOnOff}, //MW EGBias - {0, 99, 1}, //FC Range - {0, 1, 1, ToOnOff}, //FC Pitch - {0, 1, 1, ToOnOff}, //FC Amp - {0, 1, 1, ToOnOff}, //FC EGBias - {0, 99, 1}, //BC Range - {0, 1, 1, ToOnOff}, //BC Pitch - {0, 1, 1, ToOnOff}, //BC Amp - {0, 1, 1, ToOnOff}, //BC EGBias - {0, 99, 1}, //AT Range - {0, 1, 1, ToOnOff}, //AT Pitch - {0, 1, 1, ToOnOff}, //AT Amp - {0, 1, 1, ToOnOff} //AT EGBias + {0, 12, 1}, // TGParameterPitchBendRange + {0, 12, 1}, // TGParameterPitchBendStep + {0, 1, 1, ToPortaMode}, // TGParameterPortamentoMode + {0, 1, 1, ToPortaGlissando}, // TGParameterPortamentoGlissando + {0, 99, 1}, // TGParameterPortamentoTime + {0, 1, 1, ToPolyMono}, // TGParameterMonoMode + {0, 99, 1}, // MW Range + {0, 1, 1, ToOnOff}, // MW Pitch + {0, 1, 1, ToOnOff}, // MW Amp + {0, 1, 1, ToOnOff}, // MW EGBias + {0, 99, 1}, // FC Range + {0, 1, 1, ToOnOff}, // FC Pitch + {0, 1, 1, ToOnOff}, // FC Amp + {0, 1, 1, ToOnOff}, // FC EGBias + {0, 99, 1}, // BC Range + {0, 1, 1, ToOnOff}, // BC Pitch + {0, 1, 1, ToOnOff}, // BC Amp + {0, 1, 1, ToOnOff}, // BC EGBias + {0, 99, 1}, // AT Range + {0, 1, 1, ToOnOff}, // AT Pitch + {0, 1, 1, ToOnOff}, // AT Amp + {0, 1, 1, ToOnOff} // AT EGBias #if defined(MIXING_CONSOLE_ENABLE) , - {0, 99, 1}, // TGParameterMixingSendFXTube, - {0, 99, 1}, // TGParameterMixingSendFXChorus, - {0, 99, 1}, // TGParameterMixingSendFXFlanger, - {0, 99, 1}, // TGParameterMixingSendFXOrbittone, - {0, 99, 1}, // TGParameterMixingSendFXPhaser, - {0, 99, 1}, // TGParameterMixingSendFXDelay, - {0, 99, 1}, // TGParameterMixingSendFXPlateReverb, - {0, 99, 1}, // TGParameterMixingSendFXReverberator, - {0, 99, 1} // TGParameterMixingSendFXMainOutput, + {0, 99, 1}, // TGParameterMixingSendFXTube + {0, 99, 1}, // TGParameterMixingSendFXChorus + {0, 99, 1}, // TGParameterMixingSendFXFlanger + {0, 99, 1}, // TGParameterMixingSendFXOrbittone + {0, 99, 1}, // TGParameterMixingSendFXPhaser + {0, 99, 1}, // TGParameterMixingSendFXDelay + {0, 99, 1}, // TGParameterMixingSendFXPlateReverb + {0, 99, 1}, // TGParameterMixingSendFXReverberator + {0, 99, 1} // TGParameterMixingSendFXMainOutput + #endif // MIXING_CONSOLE_ENABLE }; @@ -1252,7 +1279,7 @@ void CUIMenu::EditTGParameter2 (CUIMenu *pUIMenu, TMenuEvent Event) // second me void CUIMenu::EditTGParameter3(CUIMenu *pUIMenu, TMenuEvent Event) { - unsigned nTG = pUIMenu->m_MenuStackMenu[pUIMenu->m_nCurrentMenuDepth - 1]->Parameter2; + unsigned nTG = pUIMenu->m_nCurrentMenuItem; CMiniDexed::TTGParameter Param = (CMiniDexed::TTGParameter) pUIMenu->m_nCurrentParameter; diff --git a/src/uimenu.h b/src/uimenu.h index 8086738..b568bee 100644 --- a/src/uimenu.h +++ b/src/uimenu.h @@ -63,9 +63,6 @@ private: TMenuHandler *Handler; const TMenuItem *MenuItem; unsigned Parameter; -#if defined(MIXING_CONSOLE_ENABLE) - unsigned Parameter2 = 0; -#endif }; typedef std::string TToString (int nValue); @@ -173,6 +170,7 @@ private: static const TMenuItem s_FXReverberator[]; static const TMenuItem s_FXReverberatorLevels[]; static const TMenuItem s_FXReverberatorSend[]; + static const TMenuItem s_FXMainOutputLevels[]; #endif static const TMenuItem s_EditVoiceMenu[]; static const TMenuItem s_OperatorMenu[]; diff --git a/wiki-update/Tube--overdrive-response.png b/wiki-update/Tube--overdrive-response.png index 04ac7ad..db5bef1 100644 Binary files a/wiki-update/Tube--overdrive-response.png and b/wiki-update/Tube--overdrive-response.png differ diff --git a/wiki-update/fx-page.md b/wiki-update/fx-page.md index ca8ed27..4603a6a 100644 --- a/wiki-update/fx-page.md +++ b/wiki-update/fx-page.md @@ -1,6 +1,6 @@ # Mixing Console & Audio Effect -![Mixing Console Synopsys](mixing-console-overview.png) +Mixing Console - TG Channel Strip On multi-core devices, MiniDexed can now be equiped with a complex and versatile mixing console that is composed of a multi-FX processor. @@ -442,6 +442,23 @@ This implementation pushes the reverberation to reach almost the shimmer effect. * **> Dly** *[0 - 99]*: The amount of signal processed by the Reverberator FX unit that will be sent to the Delay FX unit. * **> Plt** *[0 - 99]*: The amount of signal processed by the Reverberator FX unit that will be sent to the Plate Reverb FX unit. * **> Main** *[0 - 99]*: The amount of signal processed by the Reverberator FX unit that will be sent to the Main output. + * **MainOut** + * **TG1 >** *[0 - 99]* - shortcut to [TG1] >> [FX-Send] >> [> Main] + * **TG2 >** *[0 - 99]* - shortcut to [TG2] >> [FX-Send] >> [> Main] + * **TG3 >** *[0 - 99]* - shortcut to [TG3] >> [FX-Send] >> [> Main] + * **TG4 >** *[0 - 99]* - shortcut to [TG4] >> [FX-Send] >> [> Main] + * **TG5 >** *[0 - 99]* - shortcut to [TG5] >> [FX-Send] >> [> Main] + * **TG6 >** *[0 - 99]* - shortcut to [TG6] >> [FX-Send] >> [> Main] + * **TG7 >** *[0 - 99]* - shortcut to [TG7] >> [FX-Send] >> [> Main] + * **TG8 >** *[0 - 99]* - shortcut to [TG8] >> [FX-Send] >> [> Main] + * **Tub >** *[0 - 99]* - shortcut to [Effects] >> [Tube] >> [> Main] + * **ChR >** *[0 - 99]* - shortcut to [Effects] >> [Chorus] >> [> Main] + * **Flg >** *[0 - 99]* - shortcut to [Effects] >> [FlangR] >> [> Main] + * **Orb >** *[0 - 99]* - shortcut to [Effects] >> [Orb] >> [> Main] + * **PhR >** *[0 - 99]* - shortcut to [Effects] >> [PhasR] >> [> Main] + * **Dly >** *[0 - 99]* - shortcut to [Effects] >> [Delay] >> [> Main] + * **Plt >** *[0 - 99]* - shortcut to [Effects] >> [Plt Rvb] >> [> Main] + * **Rev >** *[0 - 99]* - shortcut to [Effects] >> [Rvbrtor] >> [> Main] * *Performance* * *Load* * ...