diff --git a/.gitignore b/.gitignore index 188d044..ace2c61 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,6 @@ sdcard *.swp *.swo .vscode/ + +# temporary tests +src/test/ \ No newline at end of file diff --git a/src/extra_features.h b/src/extra_features.h new file mode 100644 index 0000000..a86a657 --- /dev/null +++ b/src/extra_features.h @@ -0,0 +1,25 @@ +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +// +// extra_features.h +// +// Header file that centralizes MACROS to enable / disable extra features +// +#pragma once + +#if defined(ARM_ALLOW_MULTI_CORE) + +#define FXRACK_ENABLE //Add support for the FXRack + +#endif diff --git a/src/fx_rack.cpp b/src/fx_rack.cpp index b710d76..f2a9cde 100644 --- a/src/fx_rack.cpp +++ b/src/fx_rack.cpp @@ -7,7 +7,7 @@ FXRack::FXRack(float32_t sampling_rate, bool enable, float32_t wet) : FXElement(sampling_rate), enable_(enable), wet_level_(wet), - fx_chain_(sampling_rate) + fx_chain_() { this->fxTube_ = new FXUnit(sampling_rate); this->fxChorus_ = new FXUnit(sampling_rate); @@ -39,7 +39,7 @@ FXRack::~FXRack() delete this->fxShimmerReverb_; } -void FXRack::processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) +inline void FXRack::processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) { for(FXChain::iterator it = this->fx_chain_.begin(); it != this->fx_chain_.end(); it++) { @@ -67,23 +67,24 @@ void FXRack::process(float32_t* left_input, float32_t* right_input, float32_t* l if(this->isEnable()) { this->processSample(sampleInL, sampleInR, sampleOutL, sampleOutR); + + float32_t dryLevel = 1.0f - this->getWetLevel(); + *left_output = this->getWetLevel() * sampleOutL + dryLevel * (*left_input); + *right_output = this->getWetLevel() * sampleOutR + dryLevel * (*right_input); } else { - sampleOutL = sampleInL; - sampleOutR = sampleInR; + *left_output = sampleInL; + *right_output = sampleInR; } - - *left_output = sampleOutL; - *right_output = sampleOutR; - + // Move inputs by 1 sample ++left_input; ++right_input; // Move outputs by 1 sample - ++left_input; - ++right_input; + ++left_output; + ++right_output; } } diff --git a/src/fx_rack.h b/src/fx_rack.h index 40cc7ac..558c168 100644 --- a/src/fx_rack.h +++ b/src/fx_rack.h @@ -16,7 +16,6 @@ // // Rack of audio effects proposed in the context of the MiniDexed project // - #pragma once #include "fx.h" @@ -57,6 +56,7 @@ public: else { _FXElement::processSample(inL, inR, outL, outR); + float32_t dry = 1.0f - this->getWetLevel(); outL = this->getWetLevel() * outL + dry * inL; outR = this->getWetLevel() * outR + dry * inR; @@ -98,7 +98,7 @@ public: FXRack(float32_t sampling_rate, bool enable = true, float32_t wet = 1.0f); virtual ~FXRack(); - virtual void processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) override; + virtual inline void processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) override; virtual void process(float32_t* left_input, float32_t* right_input, float32_t* left_output, float32_t* right_output, size_t nSamples) override; void setEnable(bool enable = true); diff --git a/src/fx_tape_delay.cpp b/src/fx_tape_delay.cpp index 9a3041f..f5c65ea 100644 --- a/src/fx_tape_delay.cpp +++ b/src/fx_tape_delay.cpp @@ -3,6 +3,8 @@ #include #include +#include + TapeDelay::TapeDelay(const float32_t sampling_rate, float32_t default_delay_time, float32_t default_flutter_level, float32_t default_feedback_level) : FXElement(sampling_rate), MaxSampleDelayTime(2.0f * sampling_rate * MAX_DELAY_TIME), @@ -26,6 +28,7 @@ TapeDelay::~TapeDelay() void TapeDelay::processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) { +std::cout << "Processing effect: " << typeid(this).name() << std::endl; // calculate the fluttered delay time float32_t fluttered_delay_time_L = (MAX_DELAY_TIME * this->getLeftDelayTime() + this->getFlutteredDelayTime()) * this->getSamplingRate(); // Calculate write positions diff --git a/src/minidexed.cpp b/src/minidexed.cpp index 347123a..6d47027 100644 --- a/src/minidexed.cpp +++ b/src/minidexed.cpp @@ -159,7 +159,7 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt, SetParameter (ParameterCompressorEnable, 1); // BEGIN setup FXRack -#ifdef ARM_ALLOW_MULTI_CORE + #ifdef FXRACK_ENABLE this->fx_rack = new FXRack(static_cast(pConfig->GetSampleRate())); // FXChain parameters @@ -213,7 +213,7 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt, this->SetParameter(ParameterFXChainShimmerReverbFrequency, 20); this->SetParameter(ParameterFXChainShimmerReverbAmplitude, 15); this->SetParameter(ParameterFXChainShimmerReverbDecayTime, 65); -#endif + #endif // END setup FXRack }; @@ -257,19 +257,15 @@ bool CMiniDexed::Initialize (void) reverb_send_mixer->pan(i,mapfloat(m_nPan[i],0,127,0.0f,1.0f)); reverb_send_mixer->gain(i,mapfloat(m_nReverbSend[i],0,99,0.0f,1.0f)); } -this->m_UI.LCDWrite("Initialize: before perf loading"); if (m_PerformanceConfig.Load ()) { -this->m_UI.LCDWrite("Initialize: load perf"); LoadPerformanceParameters(); -this->m_UI.LCDWrite("Initialize: load perf done"); } else { SetMIDIChannel (CMIDIDevice::OmniMode, 0); } -this->m_UI.LCDWrite("Initialize: done"); // load performances file list, and attempt to create the performance folder if (!m_PerformanceConfig.ListPerformances()) @@ -688,7 +684,6 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue) assert (Parameter < ParameterUnknown); m_nParameter[Parameter] = nValue; - float32_t fValue = 0.0f; switch (Parameter) { @@ -749,8 +744,8 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue) m_FXSpinLock.Release (); break; -#ifdef ARM_ALLOW_MULTI_CORE // BEGIN FXChain parameters + #ifdef FXRACK_ENABLE case ParameterFXChainEnable: nValue = constrain((int)nValue, 0, 1); this->m_FXSpinLock.Acquire(); @@ -759,9 +754,8 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue) break; case ParameterFXChainWet: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainWet(fValue); + this->setFXChainWet(nValue / 99.0f); this->m_FXSpinLock.Release(); break; @@ -774,16 +768,14 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue) break; case ParameterFXChainTubeWet: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainTubeWet(fValue); + this->setFXChainTubeWet(nValue / 99.0f); this->m_FXSpinLock.Release(); break; case ParameterFXChainTubeOverdrive: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainTubeOverdrive(fValue); + this->setFXChainTubeOverdrive(nValue / 99.0f); this->m_FXSpinLock.Release(); break; @@ -796,30 +788,26 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue) break; case ParameterFXChainChorusWet: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainChorusWet(fValue); + this->setFXChainChorusWet(nValue / 99.0f); this->m_FXSpinLock.Release(); break; case ParameterFXChainChorusRate: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.1f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainChorusRate(fValue); + this->setFXChainChorusRate(mapfloat(nValue, 0, 99, 0.1f, 1.0f)); this->m_FXSpinLock.Release(); break; case ParameterFXChainChorusDepth: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 10.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainChorusDepth(fValue); + this->setFXChainChorusDepth(nValue / 9.9f); this->m_FXSpinLock.Release(); break; case ParameterFXChainChorusFeedback: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainChorusFeedback(fValue); + this->setFXChainChorusFeedback(nValue / 99.0f); this->m_FXSpinLock.Release(); break; @@ -832,37 +820,32 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue) break; case ParameterFXChainFlangerWet: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainFlangerWet(fValue); + this->setFXChainFlangerWet(nValue / 99.0f); this->m_FXSpinLock.Release(); break; case ParameterFXChainFlangerDelayTime: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 10.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainFlangerDelayTime(fValue); + this->setFXChainFlangerDelayTime(nValue / 9.9f); this->m_FXSpinLock.Release(); break; case ParameterFXChainFlangerRate: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.1f, 10.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainFlangerRate(fValue); + this->setFXChainFlangerRate(0.1f + nValue / 9.8f); this->m_FXSpinLock.Release(); break; case ParameterFXChainFlangerDepth: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 10.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainFlangerDepth(fValue); + this->setFXChainFlangerDepth(nValue / 9.9f); this->m_FXSpinLock.Release(); break; case ParameterFXChainFlangerFeedback: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainFlangerFeedback(fValue); + this->setFXChainFlangerFeedback(nValue / 99.0f); this->m_FXSpinLock.Release(); break; @@ -875,16 +858,14 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue) break; case ParameterFXChainOrbitoneWet: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainOrbitoneWet(fValue); + this->setFXChainOrbitoneWet(nValue / 99.0f); this->m_FXSpinLock.Release(); break; case ParameterFXChainOrbitoneFeedback: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainOrbitoneFeedback(fValue); + this->setFXChainOrbitoneFeedback(nValue / 99.0f); this->m_FXSpinLock.Release(); break; @@ -897,23 +878,20 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue) break; case ParameterFXChainPhaserWet: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainPhaserWet(fValue); + this->setFXChainPhaserWet(nValue / 99.0f); this->m_FXSpinLock.Release(); break; case ParameterFXChainPhaserRate: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.01f, 5.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainPhaserRate(fValue); + this->setFXChainPhaserRate(mapfloat(nValue, 0, 99, 0.01f, 5.0f)); this->m_FXSpinLock.Release(); break; case ParameterFXChainPhaserResonance: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.5f, 10.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainPhaserResonance(fValue); + this->setFXChainPhaserResonance(mapfloat(nValue, 0, 99, 0.5f, 10.0f)); this->m_FXSpinLock.Release(); break; @@ -926,37 +904,32 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue) break; case ParameterFXChainTapeDelayWet: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainTapeDelayWet(fValue); + this->setFXChainTapeDelayWet(nValue / 99.0f); this->m_FXSpinLock.Release(); break; case ParameterFXChainTapeDelayLeftDelayTime: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainTapeDelayLeftDelayTime(0); + this->setFXChainTapeDelayLeftDelayTime(nValue / 99.0f); this->m_FXSpinLock.Release(); break; case ParameterFXChainTapeDelayRightDelayTime: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainTapeDelayRightDelayTime(0); + this->setFXChainTapeDelayRightDelayTime(nValue / 99.0f); this->m_FXSpinLock.Release(); break; case ParameterFXChainTapeDelayFlutter: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 0.1f); this->m_FXSpinLock.Acquire(); - this->setFXChainTapeDelayFlutter(fValue); + this->setFXChainTapeDelayFlutter(nValue / 990.0f); this->m_FXSpinLock.Release(); break; case ParameterFXChainTapeDelayFeedback: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainTapeDelayFeedback(fValue); + this->setFXChainTapeDelayFeedback(nValue / 99.0f); this->m_FXSpinLock.Release(); break; @@ -969,48 +942,42 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue) break; case ParameterFXChainShimmerReverbWet: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainShimmerReverbWet(fValue); + this->setFXChainShimmerReverbWet(nValue / 99.0f); this->m_FXSpinLock.Release(); break; case ParameterFXChainShimmerReverbDelayTimeLeft: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 2.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainShimmerReverbDelayTimeLeft(fValue); + this->setFXChainShimmerReverbDelayTimeLeft(2.0f * nValue / 99.0f); this->m_FXSpinLock.Release(); break; case ParameterFXChainShimmerReverbDelayTimeRight: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 2.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainShimmerReverbDelayTimeRight(fValue); + this->setFXChainShimmerReverbDelayTimeRight(2.0f * nValue / 99.0f); this->m_FXSpinLock.Release(); break; case ParameterFXChainShimmerReverbFrequency: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, static_cast(this->m_pConfig->GetSampleRate() >> 1)); this->m_FXSpinLock.Acquire(); - this->setFXChainShimmerReverbFrequency(fValue); + this->setFXChainShimmerReverbFrequency(2.0f * nValue / static_cast(this->m_pConfig->GetSampleRate())); this->m_FXSpinLock.Release(); break; case ParameterFXChainShimmerReverbAmplitude: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 1.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainShimmerReverbAmplitude(fValue); + this->setFXChainShimmerReverbAmplitude(nValue / 99.0f); this->m_FXSpinLock.Release(); break; case ParameterFXChainShimmerReverbDecayTime: nValue = constrain((int)nValue, 0, 99); - fValue = mapfloat(nValue, 0, 99, 0.0f, 2.0f); this->m_FXSpinLock.Acquire(); - this->setFXChainShimmerReverbDecayTime(fValue); + this->setFXChainShimmerReverbDecayTime(2.0f * nValue / 99.0f); this->m_FXSpinLock.Release(); break; + #endif // END FXChain parameters -#endif default: assert (0); @@ -1330,41 +1297,16 @@ void CMiniDexed::ProcessSound (void) // END adding reverb // BEGIN adding FXRack + #ifdef FXRACK_ENABLE if(this->fx_rack->isEnable() && this->fx_rack->getWetLevel() > 0.0f) { - // scale down and add left FXRack buffer by reverb level - if(this->fx_rack->getWetLevel() == 1.0f) - { - this->m_FXSpinLock.Acquire(); - this->fx_rack->process(SampleBuffer[indexL], SampleBuffer[indexR], SampleBuffer[indexL], SampleBuffer[indexR], nFrames); - this->m_FXSpinLock.Release(); - } - else - { - float32_t DryFXRackSendBuffer[2][nFrames]; - float32_t WetFXRackBuffer[2][nFrames]; - arm_fill_f32(0.0f, DryFXRackSendBuffer[indexR], nFrames); - arm_fill_f32(0.0f, DryFXRackSendBuffer[indexL], nFrames); - arm_fill_f32(0.0f, WetFXRackBuffer[indexL], nFrames); - arm_fill_f32(0.0f, WetFXRackBuffer[indexR], nFrames); - - this->m_FXSpinLock.Acquire(); + this->m_FXSpinLock.Acquire(); - this->fx_rack->process(SampleBuffer[indexL], SampleBuffer[indexR], WetFXRackBuffer[indexL], WetFXRackBuffer[indexR], nFrames); + this->fx_rack->process(SampleBuffer[indexL], SampleBuffer[indexR], SampleBuffer[indexL], SampleBuffer[indexR], nFrames); - // scale down and add left FXRack buffer by reverb level - arm_scale_f32(WetFXRackBuffer[indexL], this->fx_rack->getWetLevel(), WetFXRackBuffer[indexL], nFrames); - arm_scale_f32(SampleBuffer[indexL], 1.0f - this->fx_rack->getWetLevel(), DryFXRackSendBuffer[indexL], nFrames); - arm_add_f32(DryFXRackSendBuffer[indexL], WetFXRackBuffer[indexL], SampleBuffer[indexL], nFrames); - - // scale down and add right FXRack buffer by reverb level - arm_scale_f32(WetFXRackBuffer[indexR], this->fx_rack->getWetLevel(), WetFXRackBuffer[indexR], nFrames); - arm_scale_f32(SampleBuffer[indexR], 1.0f - this->fx_rack->getWetLevel(), DryFXRackSendBuffer[indexR], nFrames); - arm_add_f32(DryFXRackSendBuffer[indexR], WetFXRackBuffer[indexR], SampleBuffer[indexR], nFrames); - - this->m_FXSpinLock.Release(); - } + this->m_FXSpinLock.Release(); } + #endif // END adding FXRack // Convert dual float array (left, right) to single int16 array (left/right) @@ -1455,7 +1397,7 @@ bool CMiniDexed::DoSavePerformance (void) m_PerformanceConfig.SetReverbLevel (m_nParameter[ParameterReverbLevel]); // BEGIN FXRack parameters -#ifdef ARM_ALLOW_MULTI_CORE + #ifdef FXRACK_ENABLE this->m_PerformanceConfig.SetFXChainEnable(!!this->m_nParameter[ParameterFXChainEnable]); this->m_PerformanceConfig.SetFXChainWet(this->m_nParameter[ParameterFXChainWet]); this->m_PerformanceConfig.SetFXChainTubeEnable(!!this->m_nParameter[ParameterFXChainTubeEnable]); @@ -1492,8 +1434,8 @@ bool CMiniDexed::DoSavePerformance (void) this->m_PerformanceConfig.SetFXChainShimmerReverbFrequency(this->m_nParameter[ParameterFXChainShimmerReverbFrequency]); this->m_PerformanceConfig.SetFXChainShimmerReverbAmplitude(this->m_nParameter[ParameterFXChainShimmerReverbAmplitude]); this->m_PerformanceConfig.SetFXChainShimmerReverbDecayTime(this->m_nParameter[ParameterFXChainShimmerReverbDecayTime]); -#endif - // END FXRqck pqrqmeters + #endif + // END FXRack parameters if(m_bSaveAsDeault) { @@ -1883,6 +1825,45 @@ void CMiniDexed::LoadPerformanceParameters(void) SetParameter (ParameterReverbLowPass, m_PerformanceConfig.GetReverbLowPass ()); SetParameter (ParameterReverbDiffusion, m_PerformanceConfig.GetReverbDiffusion ()); SetParameter (ParameterReverbLevel, m_PerformanceConfig.GetReverbLevel ()); + + #ifdef FXRACK_ENABLE + this->SetParameter(ParameterFXChainEnable, this->m_PerformanceConfig.GetFXChainEnable()); + this->SetParameter(ParameterFXChainWet, this->m_PerformanceConfig.GetFXChainWet()); + this->SetParameter(ParameterFXChainTubeEnable, this->m_PerformanceConfig.GetFXChainTubeEnable()); + this->SetParameter(ParameterFXChainTubeWet, this->m_PerformanceConfig.GetFXChainTubeWet()); + this->SetParameter(ParameterFXChainTubeOverdrive, this->m_PerformanceConfig.GetFXChainTubeOverdrive()); + this->SetParameter(ParameterFXChainChorusEnable, this->m_PerformanceConfig.GetFXChainChorusEnable()); + this->SetParameter(ParameterFXChainChorusWet, this->m_PerformanceConfig.GetFXChainChorusWet()); + this->SetParameter(ParameterFXChainChorusRate, this->m_PerformanceConfig.GetFXChainChorusRate()); + this->SetParameter(ParameterFXChainChorusDepth, this->m_PerformanceConfig.GetFXChainChorusDepth()); + this->SetParameter(ParameterFXChainChorusFeedback, this->m_PerformanceConfig.GetFXChainChorusFeedback()); + this->SetParameter(ParameterFXChainFlangerEnable, this->m_PerformanceConfig.GetFXChainFlangerEnable()); + this->SetParameter(ParameterFXChainFlangerWet, this->m_PerformanceConfig.GetFXChainFlangerWet()); + this->SetParameter(ParameterFXChainFlangerDelayTime, this->m_PerformanceConfig.GetFXChainFlangerDelayTime()); + this->SetParameter(ParameterFXChainFlangerRate, this->m_PerformanceConfig.GetFXChainFlangerRate()); + this->SetParameter(ParameterFXChainFlangerDepth, this->m_PerformanceConfig.GetFXChainFlangerDepth()); + this->SetParameter(ParameterFXChainFlangerFeedback, this->m_PerformanceConfig.GetFXChainFlangerFeedback()); + this->SetParameter(ParameterFXChainOrbitoneEnable, this->m_PerformanceConfig.GetFXChainOrbitoneEnable()); + this->SetParameter(ParameterFXChainOrbitoneWet, this->m_PerformanceConfig.GetFXChainOrbitoneWet()); + this->SetParameter(ParameterFXChainOrbitoneFeedback, this->m_PerformanceConfig.GetFXChainOrbitoneFeedback()); + this->SetParameter(ParameterFXChainPhaserEnable, this->m_PerformanceConfig.GetFXChainPhaserEnable()); + this->SetParameter(ParameterFXChainPhaserWet, this->m_PerformanceConfig.GetFXChainPhaserWet()); + this->SetParameter(ParameterFXChainPhaserRate, this->m_PerformanceConfig.GetFXChainPhaserRate()); + this->SetParameter(ParameterFXChainPhaserResonance, this->m_PerformanceConfig.GetFXChainPhaserResonance()); + this->SetParameter(ParameterFXChainTapeDelayEnable, this->m_PerformanceConfig.GetFXChainTapeDelayEnable()); + this->SetParameter(ParameterFXChainTapeDelayWet, this->m_PerformanceConfig.GetFXChainTapeDelayWet()); + this->SetParameter(ParameterFXChainTapeDelayLeftDelayTime, this->m_PerformanceConfig.GetFXChainTapeDelayLeftDelayTime()); + this->SetParameter(ParameterFXChainTapeDelayRightDelayTime, this->m_PerformanceConfig.GetFXChainTapeDelayRightDelayTime()); + this->SetParameter(ParameterFXChainTapeDelayFlutter, this->m_PerformanceConfig.GetFXChainTapeDelayFlutter()); + this->SetParameter(ParameterFXChainTapeDelayFeedback, this->m_PerformanceConfig.GetFXChainTapeDelayFeedback()); + this->SetParameter(ParameterFXChainShimmerReverbEnable, this->m_PerformanceConfig.GetFXChainShimmerReverbEnable()); + this->SetParameter(ParameterFXChainShimmerReverbWet, this->m_PerformanceConfig.GetFXChainShimmerReverbWet()); + this->SetParameter(ParameterFXChainShimmerReverbDelayTimeLeft, this->m_PerformanceConfig.GetFXChainShimmerReverbDelayTimeLeft()); + this->SetParameter(ParameterFXChainShimmerReverbDelayTimeRight, this->m_PerformanceConfig.GetFXChainShimmerReverbDelayTimeRight()); + this->SetParameter(ParameterFXChainShimmerReverbFrequency, this->m_PerformanceConfig.GetFXChainShimmerReverbFrequency()); + this->SetParameter(ParameterFXChainShimmerReverbAmplitude, this->m_PerformanceConfig.GetFXChainShimmerReverbAmplitude()); + this->SetParameter(ParameterFXChainShimmerReverbDecayTime, this->m_PerformanceConfig.GetFXChainShimmerReverbDecayTime()); + #endif } std::string CMiniDexed::GetNewPerformanceDefaultName(void) @@ -2067,7 +2048,7 @@ unsigned CMiniDexed::getModController (unsigned controller, unsigned parameter, } -#ifdef ARM_ALLOW_MULTI_CORE +#ifdef FXRACK_ENABLE void CMiniDexed::setFXChainEnable(bool value) { this->fx_rack->setEnable(value); diff --git a/src/minidexed.h b/src/minidexed.h index 525d08e..604ee5d 100644 --- a/src/minidexed.h +++ b/src/minidexed.h @@ -20,6 +20,7 @@ #ifndef _minidexed_h #define _minidexed_h +#include "extra_features.h" #include "dexedadapter.h" #include "config.h" #include "userinterface.h" @@ -140,7 +141,7 @@ public: ParameterReverbLevel, // BEGIN FXRack global parameters definition -#ifdef ARM_ALLOW_MULTI_CORE + #ifdef FXRACK_ENABLE // FXChain parameters ParameterFXChainEnable, ParameterFXChainWet, @@ -192,7 +193,7 @@ public: ParameterFXChainShimmerReverbFrequency, ParameterFXChainShimmerReverbAmplitude, ParameterFXChainShimmerReverbDecayTime, -#endif + #endif // END FXRack global parameters definition ParameterUnknown @@ -264,7 +265,7 @@ public: void setMasterVolume (float32_t vol); // BEGIN FXRack parameters setters -#ifdef ARM_ALLOW_MULTI_CORE + #ifdef FXRACK_ENABLE void setFXChainEnable(bool value); void setFXChainWet(float32_t value); void setFXChainTubeEnable(bool value); @@ -301,7 +302,7 @@ public: void setFXChainShimmerReverbFrequency(float32_t value); void setFXChainShimmerReverbAmplitude(float32_t value); void setFXChainShimmerReverbDecayTime(float32_t value); -#endif + #endif // END FXRack parameters setters private: @@ -392,7 +393,9 @@ private: CSpinLock m_FXSpinLock; +#ifdef FXRACK_ENABLE FXRack* fx_rack; +#endif bool m_bSavePerformance; bool m_bSavePerformanceNewFile; diff --git a/src/uimenu.cpp b/src/uimenu.cpp index 61e97dd..9fa6844 100644 --- a/src/uimenu.cpp +++ b/src/uimenu.cpp @@ -82,7 +82,9 @@ const CUIMenu::TMenuItem CUIMenu::s_EffectsMenu[] = {"Compress", EditGlobalParameter, 0, CMiniDexed::ParameterCompressorEnable}, #ifdef ARM_ALLOW_MULTI_CORE {"Reverb", MenuHandler, s_ReverbMenu}, - {"FX Chain", MenuHandler, s_FXChainMenu}, +#endif +#ifdef FXRACK_ENABLE + {"FXChain", MenuHandler, s_FXChainMenu}, #endif {0} }; @@ -134,88 +136,92 @@ const CUIMenu::TMenuItem CUIMenu::s_ReverbMenu[] = {0} }; +#endif + +#ifdef FXRACK_ENABLE + const CUIMenu::TMenuItem CUIMenu::s_FXChainMenu[] = { // FXChain - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainEnable}, - {"Wet Level", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainEnable}, - - {"Tube", MenuHandler, s_FXChainTube}, - {"Chorus", MenuHandler, s_FXChainChorus}, - {"Flanger", MenuHandler, s_FXChainFlanger}, - {"Orbitone", MenuHandler, s_FXChainOrbitone}, - {"Phaser", MenuHandler, s_FXChainPhaser}, - {"TapeDelay", MenuHandler, s_FXChainTapeDelay}, - {"ShimmerReverb", MenuHandler, s_FXChainShimmerReverb}, + {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainEnable}, + {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainWet}, + + {"Tube", MenuHandler, s_FXChainTube}, + {"Chorus", MenuHandler, s_FXChainChorus}, + {"FlangR", MenuHandler, s_FXChainFlanger}, + {"Orb", MenuHandler, s_FXChainOrbitone}, + {"PhasR", MenuHandler, s_FXChainPhaser}, + {"Delay", MenuHandler, s_FXChainTapeDelay}, + {"Shimmer", MenuHandler, s_FXChainShimmerReverb}, {0} }; const CUIMenu::TMenuItem CUIMenu::s_FXChainTube[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTubeEnable}, - {"Wet Level", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTubeWet}, - {"Overdrive", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTubeOverdrive}, + {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTubeEnable}, + {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTubeWet}, + {"Overdrv", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTubeOverdrive}, {0} }; const CUIMenu::TMenuItem CUIMenu::s_FXChainChorus[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainChorusEnable}, - {"Wet Level", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainChorusWet}, - {"LFO Rate", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainChorusRate}, - {"Depth", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainChorusDepth}, - {"Feedback", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainChorusFeedback}, + {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainChorusEnable}, + {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainChorusWet}, + {"Rate", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainChorusRate}, + {"Depth", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainChorusDepth}, + {"Feedbck", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainChorusFeedback}, {0} }; const CUIMenu::TMenuItem CUIMenu::s_FXChainFlanger[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerEnable}, - {"Wet Level", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerWet}, - {"Delay Time", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerDelayTime}, - {"LFO Rate", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerRate}, - {"Depth", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerDepth}, - {"Feedback", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerFeedback}, + {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerEnable}, + {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerWet}, + {"Delay", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerDelayTime}, + {"Rate", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerRate}, + {"Depth", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerDepth}, + {"Feedbck", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerFeedback}, {0} }; const CUIMenu::TMenuItem CUIMenu::s_FXChainOrbitone[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainOrbitoneEnable}, - {"Wet Level", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainOrbitoneWet}, - {"Feedback", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainOrbitoneFeedback}, + {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainOrbitoneEnable}, + {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainOrbitoneWet}, + {"Feedbck", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainOrbitoneFeedback}, {0} }; const CUIMenu::TMenuItem CUIMenu::s_FXChainPhaser[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainPhaserEnable}, - {"Wet Level", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainPhaserWet}, - {"LFO Rate", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainPhaserRate}, - {"Resonance", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainPhaserResonance}, + {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainPhaserEnable}, + {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainPhaserWet}, + {"Rate", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainPhaserRate}, + {"Res", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainPhaserResonance}, {0} }; const CUIMenu::TMenuItem CUIMenu::s_FXChainTapeDelay[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTapeDelayEnable}, - {"Wet Level", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTapeDelayWet}, - {"Left Delay", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTapeDelayLeftDelayTime}, - {"Right Delay", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTapeDelayRightDelayTime}, - {"Flutter", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTapeDelayFlutter}, - {"Feedback", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTapeDelayFeedback}, + {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTapeDelayEnable}, + {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTapeDelayWet}, + {"L Delay", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTapeDelayLeftDelayTime}, + {"R Delay", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTapeDelayRightDelayTime}, + {"Flutter", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTapeDelayFlutter}, + {"Feedbck", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTapeDelayFeedback}, {0} }; const CUIMenu::TMenuItem CUIMenu::s_FXChainShimmerReverb[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbEnable}, - {"Wet Level", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbWet}, - {"Delay Left", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbDelayTimeLeft}, - {"Delay Right", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbDelayTimeRight}, - {"Frequency", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbFrequency}, - {"Amplitude", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbAmplitude}, - {"Decay Time", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbDecayTime}, + {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbEnable}, + {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbWet}, + {"L Delay", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbDelayTimeLeft}, + {"R Delay", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbDelayTimeRight}, + {"Freq", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbFrequency}, + {"Amp", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbAmplitude}, + {"Decay", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbDecayTime}, {0} }; @@ -301,10 +307,10 @@ const CUIMenu::TParameter CUIMenu::s_GlobalParameter[CMiniDexed::ParameterUnknow {0, 99, 1} // ParameterReverbLevel // BEGIN FXRack global parameters mapping definition -#ifdef ARM_ALLOW_MULTI_CORE + #ifdef FXRACK_ENABLE , // FXChain parameters - {0, 1, 1, ToOnOff}, // ParameterFXChainEnable + {0, 1, 1, ToOnOff}, // ParameterFXChainEnable {0, 99, 1}, // ParameterFXChainWet // FXChain > Tube parameters @@ -354,7 +360,8 @@ const CUIMenu::TParameter CUIMenu::s_GlobalParameter[CMiniDexed::ParameterUnknow {0, 99, 1}, // ParameterFXChainShimmerReverbFrequency {0, 99, 1}, // ParameterFXChainShimmerReverbAmplitude {0, 99, 1}, // ParameterFXChainShimmerReverbDecayTime -#endif + + #endif // END FXRack global parameters mapping definition }; diff --git a/src/uimenu.h b/src/uimenu.h index 0325e49..2783cb0 100644 --- a/src/uimenu.h +++ b/src/uimenu.h @@ -23,6 +23,7 @@ #ifndef _uimenu_h #define _uimenu_h +#include "extra_features.h" #include #include @@ -140,6 +141,8 @@ private: static const TMenuItem s_EffectsMenu[]; #ifdef ARM_ALLOW_MULTI_CORE static const TMenuItem s_ReverbMenu[]; +#endif +#ifdef FXRACK_ENABLE static const TMenuItem s_FXChainMenu[]; static const TMenuItem s_FXChainTube[]; static const TMenuItem s_FXChainChorus[];