From 253d36d89a6adbf79e4f62143596f1078af2abc2 Mon Sep 17 00:00:00 2001 From: Vincent Date: Fri, 26 May 2023 17:32:55 +0200 Subject: [PATCH] new fx implementation --- .gitignore | 10 +- src/CFileDevice.hpp | 78 + src/Makefile | 6 +- src/debug.hpp | 6 +- src/extra_features.h | 11 +- src/fx.cpp | 12 +- src/fx.h | 7 + src/fx_base.h | 20 + src/fx_chorus.h | 1 + src/fx_components.cpp | 52 +- src/fx_components.h | 4 + src/fx_delay.cpp | 98 +- src/fx_delay.h | 36 +- src/fx_diffuser.cpp | 71 + src/fx_diffuser.h | 65 + src/fx_dry.cpp | 21 + src/fx_dry.h | 43 + src/fx_engine.hpp | 21 + src/fx_flanger.h | 1 + src/fx_orbitone.cpp | 3 +- src/fx_orbitone.h | 1 + src/fx_phaser.cpp | 4 +- src/fx_phaser.h | 1 + src/fx_pitch_shifter.cpp | 104 ++ src/fx_pitch_shifter.h | 115 ++ src/fx_rack.h | 1 + src/fx_reverberator.h | 1 + src/fx_shimmer_helper.cpp | 135 ++ src/fx_shimmer_helper.h | 34 + src/fx_shimmer_reverb.cpp | 169 ++ src/fx_shimmer_reverb.h | 111 ++ src/fx_svf.h | 1 + src/fx_tube.cpp | 32 +- src/fx_tube.h | 3 +- src/fx_unit.hpp | 1 + src/fx_unit2.hpp | 104 ++ src/mididevice.cpp | 585 +++---- src/minidexed.cpp | 1589 +++++++++++++------ src/minidexed.h | 233 ++- src/mixing_console.hpp | 793 +++++++++ src/mixing_console_constants.h | 58 + src/performance.ini | 224 ++- src/performanceconfig.cpp | 549 +++---- src/performanceconfig.h | 229 +-- src/test/Makefile | 24 +- src/test/arm_functions.cpp | 13 +- src/test/beta.cpp | 390 +++++ src/test/test_fxLevelTuning.cpp | 2 - src/test/test_fx_components.cpp | 12 +- src/test/test_fx_helper.h | 19 + src/test/test_fx_mixing_console.cpp | 565 +++++++ src/test/test_fx_mixing_console_unitary.cpp | 187 +++ src/test/test_fx_rack.cpp | 6 +- src/test/test_fx_shimmer_reverb.cpp | 182 +++ src/test/test_unitFXTuning.cpp | 55 +- src/test/wave.h | 19 + src/uimenu.cpp | 1114 +++++++++---- src/uimenu.h | 42 +- wiki-update/Chorus--Channel.png | Bin 0 -> 33880 bytes wiki-update/Delay--Channel.png | Bin 0 -> 36274 bytes wiki-update/Flanger--Channel.png | Bin 0 -> 34889 bytes wiki-update/Orbitone--Channel.png | Bin 0 -> 60719 bytes wiki-update/Phaser--Channel.png | Bin 0 -> 36258 bytes wiki-update/PlateReverb--Channel.png | Bin 0 -> 35946 bytes wiki-update/Reverberator--Channel.png | Bin 0 -> 36036 bytes wiki-update/Tube--Channel.png | Bin 0 -> 33238 bytes wiki-update/Tube--overdrive-response.png | Bin 0 -> 206760 bytes wiki-update/fx-page.md | 470 ++++++ wiki-update/mixing-console--TG-Channel.png | Bin 0 -> 33310 bytes wiki-update/mixing-console-overview.png | Bin 0 -> 780354 bytes 70 files changed, 7064 insertions(+), 1679 deletions(-) create mode 100644 src/CFileDevice.hpp create mode 100644 src/fx_diffuser.cpp create mode 100644 src/fx_diffuser.h create mode 100644 src/fx_dry.cpp create mode 100644 src/fx_dry.h create mode 100644 src/fx_pitch_shifter.cpp create mode 100644 src/fx_pitch_shifter.h create mode 100644 src/fx_shimmer_helper.cpp create mode 100644 src/fx_shimmer_helper.h create mode 100644 src/fx_shimmer_reverb.cpp create mode 100644 src/fx_shimmer_reverb.h create mode 100644 src/fx_unit2.hpp create mode 100644 src/mixing_console.hpp create mode 100644 src/mixing_console_constants.h create mode 100644 src/test/beta.cpp create mode 100644 src/test/test_fx_mixing_console.cpp create mode 100644 src/test/test_fx_mixing_console_unitary.cpp create mode 100644 src/test/test_fx_shimmer_reverb.cpp create mode 100644 wiki-update/Chorus--Channel.png create mode 100644 wiki-update/Delay--Channel.png create mode 100644 wiki-update/Flanger--Channel.png create mode 100644 wiki-update/Orbitone--Channel.png create mode 100644 wiki-update/Phaser--Channel.png create mode 100644 wiki-update/PlateReverb--Channel.png create mode 100644 wiki-update/Reverberator--Channel.png create mode 100644 wiki-update/Tube--Channel.png create mode 100644 wiki-update/Tube--overdrive-response.png create mode 100644 wiki-update/fx-page.md create mode 100644 wiki-update/mixing-console--TG-Channel.png create mode 100644 wiki-update/mixing-console-overview.png diff --git a/.gitignore b/.gitignore index b28afb9..6d2b104 100644 --- a/.gitignore +++ b/.gitignore @@ -45,10 +45,8 @@ sdcard # Editor related files *.swp *.swo -.vscode/ -# temporary tests -src/test/*.bin -src/test/bin -src/test/results -src/test/objects +.vscode/ +src/test/bin/ +src/test/objects/ +src/test/results/ \ No newline at end of file diff --git a/src/CFileDevice.hpp b/src/CFileDevice.hpp new file mode 100644 index 0000000..c595809 --- /dev/null +++ b/src/CFileDevice.hpp @@ -0,0 +1,78 @@ +// 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 . + +// +// CFileDevice.h +// +// Device implementation that writes into a file. +// This device is a singleton dedicated to allow the Circle CLogger class to output log event into the file instead of the internal buffer. +// Author: Vincent Gauché +// + +#pragma once + +#include "extra_features.h" + +#include +#include +#include +#include +#include +#include + +class CFileDevice : public CDevice +{ + DISALLOW_COPY_AND_ASSIGN(CFileDevice); + +private: + CFileDevice() : + m_file(new FIL()) + { + FRESULT res = f_open(this->m_file, "SD:/debuglog.txt", FA_WRITE | FA_CREATE_ALWAYS); + assert(res == FR_OK); + } + +public: + static void UseMeForLogger() + { + CLogger::Get()->SetNewTarget(&CFileDevice::GetInstance()); + } + + static CFileDevice& GetInstance() + { + static CFileDevice Instance; + + return Instance; + } + + ~CFileDevice() + { + f_sync(this->m_file); + f_close(this->m_file); + } + + virtual int Write(const void* pBuffer, size_t nCount) override + { + UINT nb = 0; + if(nCount > 0) + { + f_write(this->m_file, pBuffer, nCount, &nb); + f_sync(this->m_file); + } + + return (int)nb; + } + +private: + FIL* m_file; +}; diff --git a/src/Makefile b/src/Makefile index 9fc196c..b9f244b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -30,8 +30,12 @@ OBJS += fx_flanger.o OBJS += fx_orbitone.o OBJS += fx_phaser.o OBJS += fx_delay.o +OBJS += fx_shimmer_helper.o +OBJS += fx_diffuser.o +OBJS += fx_pitch_shifter.o OBJS += fx_reverberator.o -OBJS += fx_rack.o +OBJS += fx_shimmer_reverb.o +OBJS += fx_dry.o OBJS += uibuttons.o OBJS += midipin.o diff --git a/src/debug.hpp b/src/debug.hpp index b0f845b..24a3adc 100644 --- a/src/debug.hpp +++ b/src/debug.hpp @@ -76,7 +76,7 @@ public: #define INSPECTABLE(clazz) clazz : public ValueInpectorDebugger #define IMPLEMENT_DUMP(code) \ public:\ - virtual void dump(std::ostream& out, bool deepInspection = true, const std::string& tag = "") const override\ + __attribute__((noinline)) virtual void dump(std::ostream& out, bool deepInspection = true, const std::string& tag = "") const override\ {\ code\ } @@ -88,7 +88,7 @@ public:\ #define IMPLEMENT_INSPECT(code) \ public:\ - virtual size_t inspect(ValueInpector inspector, bool deepInspection = true, const std::string& tag = "") const override\ + __attribute__((noinline)) virtual size_t inspect(ValueInpector inspector, bool deepInspection = true, const std::string& tag = "") const override\ {\ code\ } @@ -102,7 +102,7 @@ public:\ #define INSPECTABLE(clazz) clazz #define IMPLEMENT_DUMP(code) -#define IMPLEMENT_INSPECT(code) +#define IMPLEMENT_INSPECT(code) #define DUMP(clazz, out) #define DUMP2(clazz, out, tag) diff --git a/src/extra_features.h b/src/extra_features.h index 1a0c373..f3ee508 100644 --- a/src/extra_features.h +++ b/src/extra_features.h @@ -15,6 +15,7 @@ // extra_features.h // // Header file that centralizes MACROS to enable / disable extra features +// Author: Vincent Gauché // #pragma once @@ -23,7 +24,13 @@ void operator=(const TypeName&) = delete #if defined(ARM_ALLOW_MULTI_CORE) -#define FXRACK_ENABLE //Add support for the FXRack + + #if RASPPI < 3 + #define PLATE_REVERB_ENABLE // Add support for the PlateReverb + #else + #define MIXING_CONSOLE_ENABLE // Add support for the MixingConsole + #endif + #endif #ifdef DEBUG @@ -34,6 +41,8 @@ #include #include +using namespace std; + inline long long int getElapseTime(std::string marker = "") { static std::unordered_map marker_times; diff --git a/src/fx.cpp b/src/fx.cpp index b7cc565..7652e9e 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 520ca3f..27a0f50 100644 --- a/src/fx.h +++ b/src/fx.h @@ -15,6 +15,7 @@ // fx.h // // Base classes for Stereo audio effects proposed in the context of the MiniDexed project +// Author: Vincent Gauché // #pragma once @@ -59,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_base.h b/src/fx_base.h index ec6f135..9ae019b 100644 --- a/src/fx_base.h +++ b/src/fx_base.h @@ -1,3 +1,23 @@ +// 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 . + +// +// fx_base.h +// +// Base header file for the FX section of the MiniDexed project +// Author: Vincent Gauché +// + #pragma once #include "extra_features.h" diff --git a/src/fx_chorus.h b/src/fx_chorus.h index a7575c4..2186e64 100644 --- a/src/fx_chorus.h +++ b/src/fx_chorus.h @@ -16,6 +16,7 @@ // // Stereo Chorus audio effects proposed in the context of the MiniDexed project // This implemelntation is based on the Chorus FX from the Rings Eurorack module from Mutable Instruments +// Ported by: Vincent Gauché // #pragma once diff --git a/src/fx_components.cpp b/src/fx_components.cpp index 3610a8c..04ba3b9 100644 --- a/src/fx_components.cpp +++ b/src/fx_components.cpp @@ -174,6 +174,7 @@ FastLFO2::FastLFO2(float32_t sampling_rate, float32_t min_frequency, float32_t m max_frequency_(max_frequency), centered_(centered), frequency_(0.0f), + normalized_frequency_(0.0f), phase_(initial_phase), phase_increment_(0.0f), current_(0.0f) @@ -267,18 +268,53 @@ float32_t FastLFO2::current() const //////////////////////////////////////////////// // InterpolatedSineOscillator implemlentation // //////////////////////////////////////////////// +float32_t InterpolatedSineOscillator::Sin(float32_t phase) +{ + static bool initialized = false; + if(!initialized) + { + initialized = InterpolatedSineOscillator::ClassInitializer(); + } + + if(phase < 0.0f) while(phase < 0.0f) phase += Constants::M2PI; + else while(phase > Constants::M2PI) phase -= Constants::M2PI; + + float32_t findex = phase / InterpolatedSineOscillator::DeltaTime; + + size_t index1 = static_cast(findex); + size_t index2 = index1 + 1; + + float32_t f1 = InterpolatedSineOscillator::CenteredDataPoints[index1]; + float32_t f2 = InterpolatedSineOscillator::CenteredDataPoints[index2]; + float32_t r = findex - index1; + + return f1 + (f2 - f1) * r * InterpolatedSineOscillator::DeltaTime; +} + +float32_t InterpolatedSineOscillator::Cos(float32_t phase) +{ + return InterpolatedSineOscillator::Sin(Constants::MPI_2 - phase); +} + bool InterpolatedSineOscillator::ClassInitializer() { - float32_t phase_increment = Constants::M2PI / static_cast(InterpolatedSineOscillator::DataPointSize); - float32_t phase = 0.0; - for(size_t i = 0; i <= InterpolatedSineOscillator::DataPointSize; ++i) + static bool initialized = false; + + if(!initialized) { - InterpolatedSineOscillator::CenteredDataPoints[i] = std::sin(phase); - InterpolatedSineOscillator::UpliftDataPoints[i] = InterpolatedSineOscillator::CenteredDataPoints[i] * 0.5f + 0.5f; - phase += phase_increment; + float32_t phase_increment = Constants::M2PI / static_cast(InterpolatedSineOscillator::DataPointSize); + float32_t phase = 0.0; + for(size_t i = 0; i <= InterpolatedSineOscillator::DataPointSize; ++i) + { + InterpolatedSineOscillator::CenteredDataPoints[i] = std::sin(phase); + InterpolatedSineOscillator::UpliftDataPoints[i] = InterpolatedSineOscillator::CenteredDataPoints[i] * 0.5f + 0.5f; + phase += phase_increment; + } + + initialized = true; } - return true; + return initialized; } float32_t InterpolatedSineOscillator::CenteredDataPoints[InterpolatedSineOscillator::DataPointSize + 1]; @@ -574,7 +610,7 @@ void JitterGenerator::reset() float32_t JitterGenerator::process() { - float32_t out = arm_sin_f32(this->phase_); + float32_t out = InterpolatedSineOscillator::Sin(this->phase_); this->phase_ += this->phase_increment_ * (1.0f + this->magnitude_ * this->rnd_distribution_(this->rnd_generator_)); if(this->phase_ > Constants::M2PI) diff --git a/src/fx_components.h b/src/fx_components.h index 2a404fb..45276e1 100644 --- a/src/fx_components.h +++ b/src/fx_components.h @@ -15,6 +15,7 @@ // fx_components.h // // Several tools and components used in the implemlentation of FX +// Quthor: Vincent Gauché // #pragma once @@ -231,6 +232,9 @@ class InterpolatedSineOscillator : public FXBase DISALLOW_COPY_AND_ASSIGN(InterpolatedSineOscillator); public: + static float32_t Sin(float32_t phase); + static float32_t Cos(float32_t phase); + InterpolatedSineOscillator(float32_t sampling_rate, float32_t min_frequency = LFO_MIN_FREQUENCY, float32_t max_frequency = LFO_MAX_FREQUENCY, float32_t initial_phase = 0.0f, bool centered = true); virtual ~InterpolatedSineOscillator(); diff --git a/src/fx_delay.cpp b/src/fx_delay.cpp index e0b33f5..6ddaacb 100644 --- a/src/fx_delay.cpp +++ b/src/fx_delay.cpp @@ -2,8 +2,9 @@ #include -#define MAX_DELAY_TIME 2.0f -#define MAX_FLUTTER_DELAY_TIME 0.001f +#define MAX_DELAY_TIME 1.0f +#define MAX_FLUTTER_DELAY_TIME 0.2f +#define MAX_FLUTTER_DELAY_AMOUNT 0.01f #define LPF_CUTOFF_REF 12000.0f #define HPF_CUTOFF_REF 80.0f @@ -51,11 +52,10 @@ void Delay::LowHighPassFilter::processSample(float32_t inL, float32_t inR, float Delay::Delay(const float32_t sampling_rate, float32_t default_delay_time, float32_t default_flutter_level, float32_t default_feedback_level) : FXElement(sampling_rate, 2.2587f), - MaxSampleDelayTime((MAX_DELAY_TIME + MAX_FLUTTER_DELAY_TIME) * sampling_rate * MAX_DELAY_TIME), - read_pos_L_(0), - read_pos_R_(0), - filter_(sampling_rate), - jitter_generator_(sampling_rate) + MaxSampleDelayTime((MAX_DELAY_TIME + MAX_FLUTTER_DELAY_TIME) * sampling_rate), + write_pos_L_(0), + write_pos_R_(0), + filter_(sampling_rate) { this->buffer_L_ = new float32_t[this->MaxSampleDelayTime]; this->buffer_R_ = new float32_t[this->MaxSampleDelayTime]; @@ -63,8 +63,6 @@ Delay::Delay(const float32_t sampling_rate, float32_t default_delay_time, float3 this->setLeftDelayTime(default_delay_time); this->setRightDelayTime(default_delay_time); this->setFeedback(default_feedback_level); - this->setFlutterRate(0.2f); - this->setFlutterAmount(0.0f); this->reset(); } @@ -79,59 +77,49 @@ void Delay::reset() { memset(this->buffer_L_, 0, this->MaxSampleDelayTime * sizeof(float32_t)); memset(this->buffer_R_, 0, this->MaxSampleDelayTime * sizeof(float32_t)); - this->read_pos_L_ = 0; - this->read_pos_R_ = 0; + this->write_pos_L_ = 0; + this->write_pos_R_ = 0; this->filter_.reset(); - this->jitter_generator_.reset(); } void Delay::processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) { - static const float32_t max_delay_time = MAX_DELAY_TIME * this->getSamplingRate(); - float32_t jitter_delay_time = 0.0f; - if(this->jitter_amount_ != 0.0f) - { - float32_t jitter_ratio = this->jitter_generator_.process(); - if(jitter_ratio != 0.0f) - { - jitter_ratio *= this->jitter_amount_; - jitter_delay_time = MAX_FLUTTER_DELAY_TIME * jitter_ratio * this->getSamplingRate(); - } - } - - // this->filter_.setCutoffChangeRatio(jitter_ratio); - float32_t delay_time_L = jitter_delay_time + max_delay_time * this->getLeftDelayTime(); - float32_t delay_time_R = jitter_delay_time + max_delay_time * this->getRightDelayTime(); + // Write input to delay buffers + this->buffer_L_[this->write_pos_L_] *= this->getFeedback();; + this->buffer_L_[this->write_pos_L_] += inL; + this->buffer_R_[this->write_pos_R_] *= this->getFeedback();; + this->buffer_R_[this->write_pos_R_] += inR; - // Calculate write positions - unsigned write_pos_L = static_cast(this->MaxSampleDelayTime + this->read_pos_L_ + delay_time_L) % this->MaxSampleDelayTime; - unsigned write_pos_R = static_cast(this->MaxSampleDelayTime + this->read_pos_R_ + delay_time_R) % this->MaxSampleDelayTime; + // Calculate read positions + float32_t delay_time_L = std::abs(MAX_DELAY_TIME * this->getLeftDelayTime() ) * this->getSamplingRate(); + float32_t delay_time_R = std::abs(MAX_DELAY_TIME * this->getRightDelayTime()) * this->getSamplingRate(); + float32_t signL = this->getLeftDelayTime() >= 0 ? 1.0f : -1.0f; + float32_t signR = this->getRightDelayTime() >= 0 ? 1.0f : -1.0f; + unsigned read_pos_L = static_cast(this->MaxSampleDelayTime + signL * this->write_pos_L_ - delay_time_L) % this->MaxSampleDelayTime; + unsigned read_pos_R = static_cast(this->MaxSampleDelayTime + signR * this->write_pos_R_ - delay_time_R) % this->MaxSampleDelayTime; - // Write input to delay buffers - this->buffer_L_[write_pos_L] = inL; - this->buffer_R_[write_pos_R] = inR; // Read from delay buffers and apply feedback this->filter_.processSample( - this->buffer_L_[this->read_pos_L_], - this->buffer_R_[this->read_pos_R_], + this->buffer_L_[read_pos_L], + this->buffer_R_[read_pos_R], outL, outR ); - this->buffer_L_[write_pos_L] += outL * this->getFeedback(); - this->buffer_R_[write_pos_R] += outR * this->getFeedback(); + this->buffer_L_[this->write_pos_L_] += outL * this->getFeedback(); + this->buffer_R_[this->write_pos_R_] += outR * this->getFeedback(); // Increment read positions - ++this->read_pos_L_; - if(this->read_pos_L_ >= this->MaxSampleDelayTime) + ++ this->write_pos_L_; + if(this->write_pos_L_ >= this->MaxSampleDelayTime) { - this->read_pos_L_ -= this->MaxSampleDelayTime; + this->write_pos_L_ -= this->MaxSampleDelayTime; } - ++this->read_pos_R_; - if(this->read_pos_R_ >= this->MaxSampleDelayTime) + ++ this->write_pos_R_; + if(this->write_pos_R_ >= this->MaxSampleDelayTime) { - this->read_pos_R_ -= this->MaxSampleDelayTime; + this->write_pos_R_ -= this->MaxSampleDelayTime; } outL *= this->OutputLevelCorrector; @@ -140,7 +128,7 @@ void Delay::processSample(float32_t inL, float32_t inR, float32_t& outL, float32 void Delay::setLeftDelayTime(float32_t delay_time) { - this->delay_time_L_ = constrain(delay_time, 0.0f, 1.0f); + this->delay_time_L_ = constrain(delay_time, -1.0f, 1.0f); } float32_t Delay::getLeftDelayTime() const @@ -150,7 +138,7 @@ float32_t Delay::getLeftDelayTime() const void Delay::setRightDelayTime(float32_t delay_time) { - this->delay_time_R_ = constrain(delay_time, 0.0f, 1.0f); + this->delay_time_R_ = constrain(delay_time, -1.0f, 1.0f); } float32_t Delay::getRightDelayTime() const @@ -167,23 +155,3 @@ float32_t Delay::getFeedback() const { return this->feedback_; } - -void Delay::setFlutterRate(float32_t rate) -{ - this->jitter_generator_.setRate(rate); -} - -float32_t Delay::getFlutterRate() const -{ - return this->jitter_generator_.getRate(); -} - -void Delay::setFlutterAmount(float32_t amount) -{ - this->jitter_amount_ = constrain(amount, 0.0f, 1.0f); -} - -float32_t Delay::getFlutterAmount() const -{ - return this->jitter_amount_; -} diff --git a/src/fx_delay.h b/src/fx_delay.h index 08dc879..30e063e 100644 --- a/src/fx_delay.h +++ b/src/fx_delay.h @@ -16,6 +16,7 @@ // fx_tape_delay.h // // Stereo Delay proposed in the context of the MiniDexed project +// Author: Vincent Gauché // #pragma once @@ -104,25 +105,17 @@ public: void setFeedback(float32_t feedback); float32_t getFeedback() const; - void setFlutterRate(float32_t rate); - float32_t getFlutterRate() const; - - void setFlutterAmount(float32_t amount); - float32_t getFlutterAmount() const; - private: const size_t MaxSampleDelayTime; - unsigned read_pos_L_; - unsigned read_pos_R_; + unsigned write_pos_L_; + unsigned write_pos_R_; float32_t* buffer_L_; float32_t* buffer_R_; float32_t delay_time_L_; // Left delay time in seconds (0.0 - 2.0) float32_t delay_time_R_; // Right delay time in seconds (0.0 - 2.0) float32_t feedback_; // Feedback (0.0 - 1.0) - float32_t jitter_amount_; LowHighPassFilter filter_; - PerlinNoiseGenerator jitter_generator_; IMPLEMENT_DUMP( const size_t space = 18; @@ -133,13 +126,11 @@ private: out << "START " << tag << "(" << typeid(*this).name() << ") dump" << std::endl << std::endl; SS_RESET(ss, precision, std::left); - SS__TEXT(ss, ' ', space, std::left, '|', "read_pos_L_"); - SS__TEXT(ss, ' ', space, std::left, '|', "read_pos_R_"); + SS__TEXT(ss, ' ', space, std::left, '|', "write_pos_L_"); + SS__TEXT(ss, ' ', space, std::left, '|', "write_pos_R_"); SS__TEXT(ss, ' ', space, std::left, '|', "delay_time_L_"); SS__TEXT(ss, ' ', space, std::left, '|', "delay_time_R_"); SS__TEXT(ss, ' ', space, std::left, '|', "feedback_"); - SS__TEXT(ss, ' ', space, std::left, '|', "jitter_amount_"); - SS__TEXT(ss, ' ', space, std::left, '|', "filter_"); out << "\t" << ss.str() << std::endl; SS_RESET(ss, precision, std::left); @@ -148,16 +139,14 @@ private: SS_SPACE(ss, '-', space, std::left, '+'); SS_SPACE(ss, '-', space, std::left, '+'); SS_SPACE(ss, '-', space, std::left, '+'); - SS_SPACE(ss, '-', space, std::left, '+'); out << "\t" << ss.str() << std::endl; SS_RESET(ss, precision, std::left); - SS__TEXT(ss, ' ', space - 1, std::right, " |", this->read_pos_L_); - SS__TEXT(ss, ' ', space - 1, std::right, " |", this->read_pos_R_); + SS__TEXT(ss, ' ', space - 1, std::right, " |", this->write_pos_L_); + SS__TEXT(ss, ' ', space - 1, std::right, " |", this->write_pos_R_); SS__TEXT(ss, ' ', space - 1, std::right, " |", this->delay_time_L_); SS__TEXT(ss, ' ', space - 1, std::right, " |", this->delay_time_R_); SS__TEXT(ss, ' ', space - 1, std::right, " |", this->feedback_); - SS__TEXT(ss, ' ', space - 1, std::right, " |", this->jitter_amount_); out << "\t" << ss.str() << std::endl; if(deepInspection) @@ -186,7 +175,6 @@ private: } this->filter_.dump(out, deepInspection, tag + ".filter_"); - this->jitter_generator_.dump(out, deepInspection, tag + ".jitter_generator_"); } out << "END " << tag << "(" << typeid(*this).name() << ") dump" << std::endl << std::endl; @@ -194,12 +182,11 @@ private: IMPLEMENT_INSPECT( size_t nb_errors = 0; - nb_errors += inspector(tag + ".read_pos_L_", static_cast(this->read_pos_L_), 0.0f, static_cast(this->MaxSampleDelayTime), deepInspection); - nb_errors += inspector(tag + ".read_pos_R_", static_cast(this->read_pos_R_), 0.0f, static_cast(this->MaxSampleDelayTime), deepInspection); - nb_errors += inspector(tag + ".delay_time_L_", this->delay_time_L_, 0.0f, static_cast(this->MaxSampleDelayTime), deepInspection); - nb_errors += inspector(tag + ".delay_time_R_", this->delay_time_R_, 0.0f, static_cast(this->MaxSampleDelayTime), deepInspection); + nb_errors += inspector(tag + ".write_pos_L_", static_cast(this->write_pos_L_), 0.0f, static_cast(this->MaxSampleDelayTime), deepInspection); + nb_errors += inspector(tag + ".write_pos_R_", static_cast(this->write_pos_R_), 0.0f, static_cast(this->MaxSampleDelayTime), deepInspection); + nb_errors += inspector(tag + ".delay_time_L_", this->delay_time_L_, -1.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".delay_time_R_", this->delay_time_R_, -1.0f, 1.0f, deepInspection); nb_errors += inspector(tag + ".feedback_", this->feedback_, 0.0f, 1.0f, deepInspection); - nb_errors += inspector(tag + ".jitter_amount_", this->jitter_amount_, 0.0f, 1.0f, deepInspection); if(deepInspection) { @@ -210,7 +197,6 @@ private: } nb_errors += this->filter_.inspect(inspector, deepInspection, tag + ".filter_"); - nb_errors += this->jitter_generator_.inspect(inspector, deepInspection, tag + ".jitter_generator_"); } return nb_errors; diff --git a/src/fx_diffuser.cpp b/src/fx_diffuser.cpp new file mode 100644 index 0000000..936f2d3 --- /dev/null +++ b/src/fx_diffuser.cpp @@ -0,0 +1,71 @@ +#include "fx_diffuser.h" + +#include +#include + +#define TAIL , -1 + +Diffuser::Diffuser(float32_t sampling_frequency) : + FXElement(sampling_frequency), + engine_(sampling_frequency) +{ +} + +Diffuser::~Diffuser() +{ +} + +void Diffuser::reset() +{ + this->engine_.reset(); +} + +void Diffuser::processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) +{ + typedef Engine::Reserve<126, + Engine::Reserve<180, + Engine::Reserve<269, + Engine::Reserve<444, + Engine::Reserve<151, + Engine::Reserve<205, + Engine::Reserve<245, + Engine::Reserve<405> > > > > > > > Memory; + Engine::DelayLine apl1; + Engine::DelayLine apl2; + Engine::DelayLine apl3; + Engine::DelayLine apl4; + Engine::DelayLine apr1; + Engine::DelayLine apr2; + Engine::DelayLine apr3; + Engine::DelayLine apr4; + Engine::Context c; + + const float32_t kap = 0.625f; + float wet = 0.0f; + + engine_.start(&c); + + c.load(inL); + c.read(apl1 TAIL, kap); + c.writeAllPass(apl1, -kap); + c.read(apl2 TAIL, kap); + c.writeAllPass(apl2, -kap); + c.read(apl3 TAIL, kap); + c.writeAllPass(apl3, -kap); + c.read(apl4 TAIL, kap); + c.writeAllPass(apl4, -kap); + c.writeAndLoad(wet, 0.0f); + outL = wet; + + c.load(inR); + c.read(apr1 TAIL, kap); + c.writeAllPass(apr1, -kap); + c.read(apr2 TAIL, kap); + c.writeAllPass(apr2, -kap); + c.read(apr3 TAIL, kap); + c.writeAllPass(apr3, -kap); + c.read(apr4 TAIL, kap); + c.writeAllPass(apr4, -kap); + c.writeAndLoad(wet, 0.0f); + outR = wet; +} diff --git a/src/fx_diffuser.h b/src/fx_diffuser.h new file mode 100644 index 0000000..2fe1d48 --- /dev/null +++ b/src/fx_diffuser.h @@ -0,0 +1,65 @@ +// 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 . +// + +// +// fx_shimmer_reverb3.h +// +// Stereo Diffuser proposed in the context of the MiniDexed project +// It is adapted from the Diffuser that could be found on Cloud EuroRack module from Mutable Instrruments +// Ported by: Vincent Gauché +// +#pragma once + +#include "fx_components.h" +#include "fx_engine.hpp" + +#define DIFFUSER_BUFFER_SIZE 2048 + +class Diffuser : public FXElement +{ + DISALLOW_COPY_AND_ASSIGN(Diffuser); + +public: + Diffuser(float32_t sampling_frequency); + virtual ~Diffuser(); + + virtual void reset() override; + virtual void processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) override; + +private: + typedef FxEngine Engine; + Engine engine_; + + IMPLEMENT_DUMP( + out << "START " << tag << "(" << typeid(*this).name() << ") dump" << std::endl << std::endl; + + if(deepInspection) + { + this->engine_.dump(out, deepInspection, tag + ".engine_"); + } + + out << "END " << tag << "(" << typeid(*this).name() << ") dump" << std::endl << std::endl; + ) + + IMPLEMENT_INSPECT( + size_t nb_errors = 0u; + + if(deepInspection) + { + nb_errors += this->engine_.inspect(inspector, deepInspection, tag + ".engine_"); + } + + return nb_errors; + ) +}; diff --git a/src/fx_dry.cpp b/src/fx_dry.cpp new file mode 100644 index 0000000..a4c2931 --- /dev/null +++ b/src/fx_dry.cpp @@ -0,0 +1,21 @@ +#include "fx_dry.h" + +Dry::Dry(float32_t samplingRate) : + FXElement(samplingRate) +{ +} + +Dry::~Dry() +{ +} + +void Dry::reset() +{ + // nothing to be done +} + +void Dry::processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) +{ + outL = inL; + outR = inR; +} diff --git a/src/fx_dry.h b/src/fx_dry.h new file mode 100644 index 0000000..52cd552 --- /dev/null +++ b/src/fx_dry.h @@ -0,0 +1,43 @@ +// 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 . + +// +// fx_dry.h +// +// An FX that does nothing but used to generalize the processing. +// Author: Vincent Gauché +// +#pragma once + +#include "fx_components.h" + +class Dry : public FXElement +{ + DISALLOW_COPY_AND_ASSIGN(Dry); + +public: + Dry(float32_t sampling_rate); + virtual ~Dry(); + + virtual void reset() override; + virtual void processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) override; + + IMPLEMENT_DUMP( + out << "START " << tag << "(" << typeid(*this).name() << ") dump" << std::endl << std::endl; + out << "END " << tag << "(" << typeid(*this).name() << ") dump" << std::endl << std::endl; + ) + + IMPLEMENT_INSPECT( + return 0u; + ) +}; \ No newline at end of file diff --git a/src/fx_engine.hpp b/src/fx_engine.hpp index ec4de06..239969f 100644 --- a/src/fx_engine.hpp +++ b/src/fx_engine.hpp @@ -1,3 +1,24 @@ +// 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 . + +// +// fx_engine.h +// +// FX Engine used in some of the Mutable Instruments Eurorack modules. +// This version is ported for the MiniDexed project and brings some additional optimization to avoid unecessary multiplications. +// Ported by: Vincent Gauché +// + #pragma once #include diff --git a/src/fx_flanger.h b/src/fx_flanger.h index 8a52bf5..89c7513 100644 --- a/src/fx_flanger.h +++ b/src/fx_flanger.h @@ -15,6 +15,7 @@ // fx_flanger.h // // Stereo Flanger audio effects proposed in the context of the MiniDexed project +// Author: Vincent Gauché // #pragma once diff --git a/src/fx_orbitone.cpp b/src/fx_orbitone.cpp index 0632715..764b46d 100644 --- a/src/fx_orbitone.cpp +++ b/src/fx_orbitone.cpp @@ -69,14 +69,13 @@ void Orbitone::processSample(float32_t inL, float32_t inR, float32_t& outL, floa float32_t wet = 0.0f; c.directWrite(inL, line_l); - c.directWrite(inR, line_r); - c.interpolate(line_l, mod_1 + 1024, 0.33f); c.interpolate(line_l, mod_2 + 1024, 0.33f); c.interpolate(line_r, mod_3 + 1024, 0.33f); c.writeAndLoad(wet, 0.0f); outL = wet * this->OutputLevelCorrector; + c.directWrite(inR, line_r); c.interpolate(line_r, mod_1 + 1024, 0.33f); c.interpolate(line_r, mod_2 + 1024, 0.33f); c.interpolate(line_l, mod_3 + 1024, 0.33f); diff --git a/src/fx_orbitone.h b/src/fx_orbitone.h index bd0b9ff..f8e81e9 100644 --- a/src/fx_orbitone.h +++ b/src/fx_orbitone.h @@ -16,6 +16,7 @@ // // Stereo Orbitone audio effects proposed in the context of the MiniDexed project // This audio effect is based on the Ensemble audio effect of the Rings Eurorack module by Mutable Instruments +// Ported by: Vincent Gauché // #pragma once diff --git a/src/fx_phaser.cpp b/src/fx_phaser.cpp index 13fb5da..ba4f375 100644 --- a/src/fx_phaser.cpp +++ b/src/fx_phaser.cpp @@ -72,8 +72,8 @@ void Phaser::reset() void Phaser::processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) { - float32_t dL = this->dmin_ + (this->dmax_ - this->dmin_) * ((1.0f + this->lfo_[StereoChannels::Left ]->process()) / 2.0f); - float32_t dR = this->dmin_ + (this->dmax_ - this->dmin_) * ((1.0f + this->lfo_[StereoChannels::Right]->process()) / 2.0f); + float32_t dL = this->dmin_ + (this->dmax_ - this->dmin_) * this->lfo_[StereoChannels::Left ]->process(); + float32_t dR = this->dmin_ + (this->dmax_ - this->dmin_) * this->lfo_[StereoChannels::Right]->process(); float32_t sampleL = inL + this->feedback_ * this->z_[StereoChannels::Left ]; float32_t sampleR = inR + this->feedback_ * this->z_[StereoChannels::Right]; diff --git a/src/fx_phaser.h b/src/fx_phaser.h index 3b46a3a..6ff605b 100644 --- a/src/fx_phaser.h +++ b/src/fx_phaser.h @@ -15,6 +15,7 @@ // fx_phaser.h // // Stereo Phaser audio effects proposed in the context of the MiniDexed project +// Author: Vincent Gauché // #pragma once diff --git a/src/fx_pitch_shifter.cpp b/src/fx_pitch_shifter.cpp new file mode 100644 index 0000000..5bb053a --- /dev/null +++ b/src/fx_pitch_shifter.cpp @@ -0,0 +1,104 @@ +#include "fx_pitch_shifter.h" +#include "fx_shimmer_helper.h" + +#include +#include + +#define ONE_POLE(out, in, coefficient) out += (coefficient) * ((in) - out); + +#define TAIL , -1 + +PitchShifter::PitchShifter(float32_t sampling_rate, float32_t transpose_boundary) : + FXElement(sampling_rate), + engine_(sampling_rate), + TransposeBoundary(transpose_boundary), + phase_(0.0f), + transpose_(0.0f), + ratio_(0.0f), + size_(-1.0f), + sample_size_(0.0f) +{ + this->setTranspose(0.0f); + this->setSize(0.5f); +} + +PitchShifter::~PitchShifter() +{ +} + +void PitchShifter::reset() +{ + this->engine_.reset(); +} + +void PitchShifter::processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) +{ + typedef Engine::Reserve<2047, Engine::Reserve<2047> > Memory; + Engine::DelayLine left; + Engine::DelayLine right; + Engine::Context c; + + this->engine_.start(&c); + + this->phase_ += (1.0f - this->ratio_) / this->sample_size_; + if(this->phase_ >= 1.0f) + { + phase_ -= 1.0f; + } + if(this->phase_ <= 0.0f) + { + this->phase_ += 1.0f; + } + + float tri = 2.0f * (this->phase_ >= 0.5f ? 1.0f - phase_ : phase_); + float phase = this->phase_ * this->sample_size_; + float half = phase + this->sample_size_ * 0.5f; + if(half >= this->sample_size_) + { + half -= this->sample_size_; + } + + c.load(inL); + c.writeAndLoad(left, 0.0f); + c.interpolate(left, phase, tri); + c.interpolate(left, half, 1.0f - tri); + c.writeAndLoad(outL, 0.0f); + + c.load(inR); + c.writeAndLoad(right, 0.0f); + c.interpolate(right, phase, tri); + c.interpolate(right, half, 1.0f - tri); + c.writeAndLoad(outR, 0.0f); +} + +void PitchShifter::setTranspose(float32_t transpose) +{ + transpose = constrain(transpose, -this->TransposeBoundary, this->TransposeBoundary); + if(this->transpose_ != transpose) + { + this->transpose_ = transpose; + this->ratio_ = semitoneToRatio(transpose); + } +} + +float32_t PitchShifter::getTranspose() const +{ + return this->transpose_; +} + +void PitchShifter::setSize(float32_t size) +{ + size = constrain(size, 0.0f, 1.0f); + if(size != this->size_) + { + this->size_ = size; + + float32_t target_size = 128.0f + (2047.0f - 128.0f) * size * size * size; + ONE_POLE(this->sample_size_, target_size, 0.05f); + } +} + +float32_t PitchShifter::getSize() const +{ + return this->size_; +} \ No newline at end of file diff --git a/src/fx_pitch_shifter.h b/src/fx_pitch_shifter.h new file mode 100644 index 0000000..f7fdeec --- /dev/null +++ b/src/fx_pitch_shifter.h @@ -0,0 +1,115 @@ +// 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 . +// + +// +// fx_shimmer_reverb3.h +// +// Stereo Pitch Shifter proposed in the context of the MiniDexed project +// It is adapted from the Pitch Shifter that could be found on Cloud EuroRack module from Mutable Instrruments +// Ported by: Vincent Gauché +// +#pragma once + +#include "fx_components.h" +#include "fx_engine.hpp" + +#define PITCH_SHIFTER_BUFFER_SIZE 4096 +#define PITCH_SHIFTER_TRANSPOSE_BOUNDARY 36.0f + +class PitchShifter : public FXElement +{ + DISALLOW_COPY_AND_ASSIGN(PitchShifter); + +public: + PitchShifter(float32_t sampling_rate, float32_t transpose_boundary = PITCH_SHIFTER_TRANSPOSE_BOUNDARY); + virtual ~PitchShifter(); + + virtual void reset() override; + virtual void processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) override; + + void setTranspose(float32_t transpose); + float32_t getTranspose() const; + + void setSize(float32_t size); + float32_t getSize() const; + +private: + typedef FxEngine Engine; + Engine engine_; + + const float32_t TransposeBoundary; + float32_t phase_; + float32_t transpose_; + float32_t ratio_; + float32_t size_; + float32_t sample_size_; + + IMPLEMENT_DUMP( + const size_t space = 12; + const size_t precision = 6; + + std::stringstream ss; + + out << "START " << tag << "(" << typeid(*this).name() << ") dump" << std::endl << std::endl; + + SS_RESET(ss, precision, std::left); + SS__TEXT(ss, ' ', space, std::left, '|', "phase_"); + SS__TEXT(ss, ' ', space, std::left, '|', "transpose_"); + SS__TEXT(ss, ' ', space, std::left, '|', "ratio_"); + SS__TEXT(ss, ' ', space, std::left, '|', "size_"); + SS__TEXT(ss, ' ', space, std::left, '|', "sample_size_"); + out << "\t" << ss.str() << std::endl; + + SS_RESET(ss, precision, std::left); + SS_SPACE(ss, '-', space, std::left, '+'); + SS_SPACE(ss, '-', space, std::left, '+'); + SS_SPACE(ss, '-', space, std::left, '+'); + SS_SPACE(ss, '-', space, std::left, '+'); + SS_SPACE(ss, '-', space, std::left, '+'); + SS_SPACE(ss, '-', space, std::left, '+'); + out << "\t" << ss.str() << std::endl; + + SS_RESET(ss, precision, std::left); + SS__TEXT(ss, ' ', space - 1, std::right, " |", this->phase_); + SS__TEXT(ss, ' ', space - 1, std::right, " |", this->transpose_); + SS__TEXT(ss, ' ', space - 1, std::right, " |", this->ratio_); + SS__TEXT(ss, ' ', space - 1, std::right, " |", this->size_); + SS__TEXT(ss, ' ', space - 1, std::right, " |", this->sample_size_); + out << "\t" << ss.str() << std::endl; + + if(deepInspection) + { + this->engine_.dump(out, deepInspection, tag + ".engine_"); + } + + out << "END " << tag << "(" << typeid(*this).name() << ") dump" << std::endl << std::endl; + ) + + IMPLEMENT_INSPECT( + size_t nb_errors = 0u; + + nb_errors += inspector(tag + ".phase_", this->phase_, 0.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".transpose_", this->transpose_, -PITCH_SHIFTER_TRANSPOSE_BOUNDARY, PITCH_SHIFTER_TRANSPOSE_BOUNDARY, deepInspection); + nb_errors += inspector(tag + ".ratio_", this->ratio_, 0.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".size_", this->size_, 0.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".sample_size_", this->sample_size_, 0.0f, 1.0f, deepInspection); + + if(deepInspection) + { + nb_errors += this->engine_.inspect(inspector, deepInspection, tag + ".engine_"); + } + + return nb_errors; + ) +}; diff --git a/src/fx_rack.h b/src/fx_rack.h index 8e82675..0c61d72 100644 --- a/src/fx_rack.h +++ b/src/fx_rack.h @@ -15,6 +15,7 @@ // fx_rack.h // // Rack of audio effects proposed in the context of the MiniDexed project +// Author: Vincent Gauché // #pragma once diff --git a/src/fx_reverberator.h b/src/fx_reverberator.h index c5dc618..ef79883 100644 --- a/src/fx_reverberator.h +++ b/src/fx_reverberator.h @@ -17,6 +17,7 @@ // // Stereo Reverberator proposed in the context of the MiniDexed project // It is adapted from the Reverb that could be found on Cloud EuroRack module from Mutable Instrruments +// Ported by: Vincent Gauché // #pragma once diff --git a/src/fx_shimmer_helper.cpp b/src/fx_shimmer_helper.cpp new file mode 100644 index 0000000..bed1fad --- /dev/null +++ b/src/fx_shimmer_helper.cpp @@ -0,0 +1,135 @@ +#include "fx_shimmer_helper.h" + +const float lut_pitch_ratio_high[] = { + 6.151958251e-04, 6.517772725e-04, 6.905339660e-04, 7.315952524e-04, + 7.750981699e-04, 8.211879055e-04, 8.700182794e-04, 9.217522585e-04, + 9.765625000e-04, 1.034631928e-03, 1.096154344e-03, 1.161335073e-03, + 1.230391650e-03, 1.303554545e-03, 1.381067932e-03, 1.463190505e-03, + 1.550196340e-03, 1.642375811e-03, 1.740036559e-03, 1.843504517e-03, + 1.953125000e-03, 2.069263856e-03, 2.192308688e-03, 2.322670146e-03, + 2.460783301e-03, 2.607109090e-03, 2.762135864e-03, 2.926381010e-03, + 3.100392680e-03, 3.284751622e-03, 3.480073118e-03, 3.687009034e-03, + 3.906250000e-03, 4.138527712e-03, 4.384617376e-03, 4.645340293e-03, + 4.921566601e-03, 5.214218180e-03, 5.524271728e-03, 5.852762019e-03, + 6.200785359e-03, 6.569503244e-03, 6.960146235e-03, 7.374018068e-03, + 7.812500000e-03, 8.277055425e-03, 8.769234752e-03, 9.290680586e-03, + 9.843133202e-03, 1.042843636e-02, 1.104854346e-02, 1.170552404e-02, + 1.240157072e-02, 1.313900649e-02, 1.392029247e-02, 1.474803614e-02, + 1.562500000e-02, 1.655411085e-02, 1.753846950e-02, 1.858136117e-02, + 1.968626640e-02, 2.085687272e-02, 2.209708691e-02, 2.341104808e-02, + 2.480314144e-02, 2.627801298e-02, 2.784058494e-02, 2.949607227e-02, + 3.125000000e-02, 3.310822170e-02, 3.507693901e-02, 3.716272234e-02, + 3.937253281e-02, 4.171374544e-02, 4.419417382e-02, 4.682209615e-02, + 4.960628287e-02, 5.255602595e-02, 5.568116988e-02, 5.899214454e-02, + 6.250000000e-02, 6.621644340e-02, 7.015387802e-02, 7.432544469e-02, + 7.874506562e-02, 8.342749089e-02, 8.838834765e-02, 9.364419230e-02, + 9.921256575e-02, 1.051120519e-01, 1.113623398e-01, 1.179842891e-01, + 1.250000000e-01, 1.324328868e-01, 1.403077560e-01, 1.486508894e-01, + 1.574901312e-01, 1.668549818e-01, 1.767766953e-01, 1.872883846e-01, + 1.984251315e-01, 2.102241038e-01, 2.227246795e-01, 2.359685782e-01, + 2.500000000e-01, 2.648657736e-01, 2.806155121e-01, 2.973017788e-01, + 3.149802625e-01, 3.337099635e-01, 3.535533906e-01, 3.745767692e-01, + 3.968502630e-01, 4.204482076e-01, 4.454493591e-01, 4.719371563e-01, + 5.000000000e-01, 5.297315472e-01, 5.612310242e-01, 5.946035575e-01, + 6.299605249e-01, 6.674199271e-01, 7.071067812e-01, 7.491535384e-01, + 7.937005260e-01, 8.408964153e-01, 8.908987181e-01, 9.438743127e-01, + 1.000000000e+00, 1.059463094e+00, 1.122462048e+00, 1.189207115e+00, + 1.259921050e+00, 1.334839854e+00, 1.414213562e+00, 1.498307077e+00, + 1.587401052e+00, 1.681792831e+00, 1.781797436e+00, 1.887748625e+00, + 2.000000000e+00, 2.118926189e+00, 2.244924097e+00, 2.378414230e+00, + 2.519842100e+00, 2.669679708e+00, 2.828427125e+00, 2.996614154e+00, + 3.174802104e+00, 3.363585661e+00, 3.563594873e+00, 3.775497251e+00, + 4.000000000e+00, 4.237852377e+00, 4.489848193e+00, 4.756828460e+00, + 5.039684200e+00, 5.339359417e+00, 5.656854249e+00, 5.993228308e+00, + 6.349604208e+00, 6.727171322e+00, 7.127189745e+00, 7.550994501e+00, + 8.000000000e+00, 8.475704755e+00, 8.979696386e+00, 9.513656920e+00, + 1.007936840e+01, 1.067871883e+01, 1.131370850e+01, 1.198645662e+01, + 1.269920842e+01, 1.345434264e+01, 1.425437949e+01, 1.510198900e+01, + 1.600000000e+01, 1.695140951e+01, 1.795939277e+01, 1.902731384e+01, + 2.015873680e+01, 2.135743767e+01, 2.262741700e+01, 2.397291323e+01, + 2.539841683e+01, 2.690868529e+01, 2.850875898e+01, 3.020397801e+01, + 3.200000000e+01, 3.390281902e+01, 3.591878555e+01, 3.805462768e+01, + 4.031747360e+01, 4.271487533e+01, 4.525483400e+01, 4.794582646e+01, + 5.079683366e+01, 5.381737058e+01, 5.701751796e+01, 6.040795601e+01, + 6.400000000e+01, 6.780563804e+01, 7.183757109e+01, 7.610925536e+01, + 8.063494719e+01, 8.542975067e+01, 9.050966799e+01, 9.589165292e+01, + 1.015936673e+02, 1.076347412e+02, 1.140350359e+02, 1.208159120e+02, + 1.280000000e+02, 1.356112761e+02, 1.436751422e+02, 1.522185107e+02, + 1.612698944e+02, 1.708595013e+02, 1.810193360e+02, 1.917833058e+02, + 2.031873347e+02, 2.152694823e+02, 2.280700718e+02, 2.416318240e+02, + 2.560000000e+02, 2.712225522e+02, 2.873502844e+02, 3.044370214e+02, + 3.225397888e+02, 3.417190027e+02, 3.620386720e+02, 3.835666117e+02, + 4.063746693e+02, 4.305389646e+02, 4.561401437e+02, 4.832636481e+02, + 5.120000000e+02, 5.424451043e+02, 5.747005687e+02, 6.088740429e+02, + 6.450795775e+02, 6.834380053e+02, 7.240773439e+02, 7.671332234e+02, + 8.127493386e+02, 8.610779292e+02, 9.122802874e+02, 9.665272962e+02, + 1.024000000e+03, 1.084890209e+03, 1.149401137e+03, 1.217748086e+03, + 1.290159155e+03, 1.366876011e+03, 1.448154688e+03, 1.534266447e+03, +}; + +const float lut_pitch_ratio_low[] = { + 1.000000000e+00, 1.000225659e+00, 1.000451370e+00, 1.000677131e+00, + 1.000902943e+00, 1.001128806e+00, 1.001354720e+00, 1.001580685e+00, + 1.001806701e+00, 1.002032768e+00, 1.002258886e+00, 1.002485055e+00, + 1.002711275e+00, 1.002937546e+00, 1.003163868e+00, 1.003390242e+00, + 1.003616666e+00, 1.003843141e+00, 1.004069668e+00, 1.004296246e+00, + 1.004522874e+00, 1.004749554e+00, 1.004976285e+00, 1.005203068e+00, + 1.005429901e+00, 1.005656786e+00, 1.005883722e+00, 1.006110709e+00, + 1.006337747e+00, 1.006564836e+00, 1.006791977e+00, 1.007019169e+00, + 1.007246412e+00, 1.007473707e+00, 1.007701053e+00, 1.007928450e+00, + 1.008155898e+00, 1.008383398e+00, 1.008610949e+00, 1.008838551e+00, + 1.009066205e+00, 1.009293910e+00, 1.009521667e+00, 1.009749475e+00, + 1.009977334e+00, 1.010205245e+00, 1.010433207e+00, 1.010661221e+00, + 1.010889286e+00, 1.011117403e+00, 1.011345571e+00, 1.011573790e+00, + 1.011802061e+00, 1.012030384e+00, 1.012258758e+00, 1.012487183e+00, + 1.012715661e+00, 1.012944189e+00, 1.013172770e+00, 1.013401401e+00, + 1.013630085e+00, 1.013858820e+00, 1.014087607e+00, 1.014316445e+00, + 1.014545335e+00, 1.014774277e+00, 1.015003270e+00, 1.015232315e+00, + 1.015461411e+00, 1.015690560e+00, 1.015919760e+00, 1.016149011e+00, + 1.016378315e+00, 1.016607670e+00, 1.016837077e+00, 1.017066536e+00, + 1.017296046e+00, 1.017525609e+00, 1.017755223e+00, 1.017984889e+00, + 1.018214607e+00, 1.018444376e+00, 1.018674198e+00, 1.018904071e+00, + 1.019133996e+00, 1.019363973e+00, 1.019594002e+00, 1.019824083e+00, + 1.020054216e+00, 1.020284401e+00, 1.020514637e+00, 1.020744926e+00, + 1.020975266e+00, 1.021205659e+00, 1.021436104e+00, 1.021666600e+00, + 1.021897149e+00, 1.022127749e+00, 1.022358402e+00, 1.022589107e+00, + 1.022819863e+00, 1.023050672e+00, 1.023281533e+00, 1.023512446e+00, + 1.023743411e+00, 1.023974428e+00, 1.024205498e+00, 1.024436619e+00, + 1.024667793e+00, 1.024899019e+00, 1.025130297e+00, 1.025361627e+00, + 1.025593009e+00, 1.025824444e+00, 1.026055931e+00, 1.026287470e+00, + 1.026519061e+00, 1.026750705e+00, 1.026982401e+00, 1.027214149e+00, + 1.027445949e+00, 1.027677802e+00, 1.027909707e+00, 1.028141664e+00, + 1.028373674e+00, 1.028605736e+00, 1.028837851e+00, 1.029070017e+00, + 1.029302237e+00, 1.029534508e+00, 1.029766832e+00, 1.029999209e+00, + 1.030231638e+00, 1.030464119e+00, 1.030696653e+00, 1.030929239e+00, + 1.031161878e+00, 1.031394569e+00, 1.031627313e+00, 1.031860109e+00, + 1.032092958e+00, 1.032325859e+00, 1.032558813e+00, 1.032791820e+00, + 1.033024879e+00, 1.033257991e+00, 1.033491155e+00, 1.033724372e+00, + 1.033957641e+00, 1.034190964e+00, 1.034424338e+00, 1.034657766e+00, + 1.034891246e+00, 1.035124779e+00, 1.035358364e+00, 1.035592003e+00, + 1.035825694e+00, 1.036059437e+00, 1.036293234e+00, 1.036527083e+00, + 1.036760985e+00, 1.036994940e+00, 1.037228947e+00, 1.037463008e+00, + 1.037697121e+00, 1.037931287e+00, 1.038165506e+00, 1.038399777e+00, + 1.038634102e+00, 1.038868479e+00, 1.039102910e+00, 1.039337393e+00, + 1.039571929e+00, 1.039806518e+00, 1.040041160e+00, 1.040275855e+00, + 1.040510603e+00, 1.040745404e+00, 1.040980258e+00, 1.041215165e+00, + 1.041450125e+00, 1.041685138e+00, 1.041920204e+00, 1.042155323e+00, + 1.042390495e+00, 1.042625720e+00, 1.042860998e+00, 1.043096329e+00, + 1.043331714e+00, 1.043567151e+00, 1.043802642e+00, 1.044038185e+00, + 1.044273782e+00, 1.044509433e+00, 1.044745136e+00, 1.044980892e+00, + 1.045216702e+00, 1.045452565e+00, 1.045688481e+00, 1.045924450e+00, + 1.046160473e+00, 1.046396549e+00, 1.046632678e+00, 1.046868860e+00, + 1.047105096e+00, 1.047341385e+00, 1.047577727e+00, 1.047814123e+00, + 1.048050572e+00, 1.048287074e+00, 1.048523630e+00, 1.048760239e+00, + 1.048996902e+00, 1.049233618e+00, 1.049470387e+00, 1.049707210e+00, + 1.049944086e+00, 1.050181015e+00, 1.050417999e+00, 1.050655035e+00, + 1.050892125e+00, 1.051129269e+00, 1.051366466e+00, 1.051603717e+00, + 1.051841021e+00, 1.052078378e+00, 1.052315790e+00, 1.052553255e+00, + 1.052790773e+00, 1.053028345e+00, 1.053265971e+00, 1.053503650e+00, + 1.053741383e+00, 1.053979169e+00, 1.054217010e+00, 1.054454903e+00, + 1.054692851e+00, 1.054930852e+00, 1.055168907e+00, 1.055407016e+00, + 1.055645178e+00, 1.055883395e+00, 1.056121664e+00, 1.056359988e+00, + 1.056598366e+00, 1.056836797e+00, 1.057075282e+00, 1.057313821e+00, + 1.057552413e+00, 1.057791060e+00, 1.058029760e+00, 1.058268515e+00, + 1.058507323e+00, 1.058746185e+00, 1.058985101e+00, 1.059224071e+00, +}; diff --git a/src/fx_shimmer_helper.h b/src/fx_shimmer_helper.h new file mode 100644 index 0000000..582131c --- /dev/null +++ b/src/fx_shimmer_helper.h @@ -0,0 +1,34 @@ +// 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 . + +// +// fx_shimmer_helper.h +// +// Helper class for the FX Shimmer FX that is ported from Mutable Instruments +// Ported by: Vincent Gauché +// + +#pragma once + +#include "fx.h" + +extern const float lut_pitch_ratio_high[257]; +extern const float lut_pitch_ratio_low[257]; + +inline float32_t semitoneToRatio(float32_t semitones) +{ + float32_t pitch = semitones + 128.0f; + MAKE_INTEGRAL_FRACTIONAL(pitch); + + return lut_pitch_ratio_high[pitch_integral] * lut_pitch_ratio_low[static_cast(pitch_fractional * 256.0f)]; +} diff --git a/src/fx_shimmer_reverb.cpp b/src/fx_shimmer_reverb.cpp new file mode 100644 index 0000000..cc9ce02 --- /dev/null +++ b/src/fx_shimmer_reverb.cpp @@ -0,0 +1,169 @@ +#include "fx_shimmer_reverb.h" + +#define TAIL , -1 + +ShimmerReverb::ShimmerReverb(float32_t sampling_frequency) : + FXElement(sampling_frequency, 1.2f), + pitch_shifter_(sampling_frequency, PITCH_SHIFTER_TRANSPOSE_BOUNDARY), + lp_filter_(sampling_frequency, SVF::FilterMode::SVF_LP), + hp_filter_(sampling_frequency, SVF::FilterMode::SVF_HP), + reverberator_(sampling_frequency), + texture_(0.0f), + lp_cutoff_(0.0f), + hp_cutoff_(0.0f), + lpq_(0.0f), + amount_(0.0f), + feedback_(0.0f), + cutoff_(0.0f) +{ + this->setInputGain(0.2f); + this->setDiffusion(0.7f); + this->setCutoff(1.0f); + + this->reset(); +} + +ShimmerReverb::~ShimmerReverb() +{ +} + +void ShimmerReverb::reset() +{ + this->pitch_shifter_.reset(); + this->lp_filter_.reset(); + this->hp_filter_.reset(); + this->reverberator_.reset(); +} + +void ShimmerReverb::processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) +{ + this->pitch_shifter_.processSample(inL, inR, outL, outR); + this->lp_filter_.processSample(outL, outR, outL, outR); + this->hp_filter_.processSample(outL, outR, outL, outR); + this->reverberator_.processSample(outL, outR, outL, outR); + + outL *= this->OutputLevelCorrector; + outR *= this->OutputLevelCorrector; +} + +void ShimmerReverb::setInputGain(float32_t input_gain) +{ + this->reverberator_.setInputGain(input_gain); +} + +float32_t ShimmerReverb::getInputGain() const +{ + return this->reverberator_.getInputGain(); +} + +void ShimmerReverb::setDiffusion(float32_t diffusion) +{ + this->reverberator_.setDiffusion(diffusion); +} + +float32_t ShimmerReverb::getDiffusion() const +{ + return this->reverberator_.getDiffusion(); +} + +void ShimmerReverb::setTime(float32_t time) +{ + this->reverberator_.setTime(time); +} + +float32_t ShimmerReverb::getTime() const +{ + return this->reverberator_.getTime(); +} + +void ShimmerReverb::setReverbAmount(float32_t amount) +{ + amount = constrain(amount, 0.0f, 1.0f); + if(this->amount_ != amount) + { + this->amount_ = amount; + this->updateReverberatorCoefficients(); + } +} + +void ShimmerReverb::setTexture(float32_t texture) +{ + texture = constrain(texture, 0.0f, 1.0f); + if(this->texture_ != texture) + { + this->texture_ = texture; + this->updateFilterCoefficients(); + } +} + +float32_t ShimmerReverb::getTexture() const +{ + return this->texture_; +} + +void ShimmerReverb::setFeedback(float32_t feedback) +{ + feedback = constrain(feedback, 0.0f, 1.0f); + if(this->feedback_ != feedback) + { + this->feedback_ = feedback; + this->updateFilterCoefficients(); + this->updateReverberatorCoefficients(); + } +} + +float32_t ShimmerReverb::getFeedback() const +{ + return this->feedback_; +} + +void ShimmerReverb::setCutoff(float32_t cutoff) +{ + cutoff = constrain(cutoff, 0.0f, 1.0f); + if(this->cutoff_ != cutoff) + { + this->cutoff_ = cutoff; + this->updateFilterCoefficients(); + } +} + +void ShimmerReverb::updateFilterCoefficients() +{ + this->lp_cutoff_ = constrain(0.50f * semitoneToRatio((this->cutoff_ < 0.5f ? this->cutoff_ - 0.5f : 0.0f ) * 216.0f), 0.0f, 0.499f); + this->hp_cutoff_ = constrain(0.25f * semitoneToRatio((this->cutoff_ < 0.5f ? -0.5f : this->cutoff_ - 1.0f) * 216.0f), 0.0f, 0.499f); + this->lpq_ = 1.0f + 3.0f * (1.0f - this->feedback_) * (0.5f - this->lp_cutoff_); + + this->lp_filter_.setFQ(this->lp_cutoff_, this->lpq_); + this->hp_filter_.setFQ(this->hp_cutoff_, 1.0f); + + this->reverberator_.setLP(0.6f + 0.37f * this->feedback_); +} + +void ShimmerReverb::updateReverberatorCoefficients() +{ + float32_t reverb_amount = this->amount_ * 0.95f; + reverb_amount += this->feedback_ * (2.0f - this->feedback_); + reverb_amount = constrain(reverb_amount, 0.0f, 1.0f); + + this->setTime(0.35f + 0.63f * reverb_amount); +} + +void ShimmerReverb::setPitch(float32_t pitch) +{ + this->pitch_shifter_.setTranspose(pitch); +} + +float32_t ShimmerReverb::getPitch() const +{ + return this->pitch_shifter_.getTranspose(); +} + +void ShimmerReverb::setSize(float32_t size) +{ + this->pitch_shifter_.setSize(size); +} + +float32_t ShimmerReverb::getSize() const +{ + return this->pitch_shifter_.getSize(); +} diff --git a/src/fx_shimmer_reverb.h b/src/fx_shimmer_reverb.h new file mode 100644 index 0000000..115ed85 --- /dev/null +++ b/src/fx_shimmer_reverb.h @@ -0,0 +1,111 @@ +// 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 . +// + +// +// fx_shimmer_reverb.h +// +// Stereo ShimmerReverb Reverb proposed in the context of the MiniDexed project +// It is adapted from the ShimmerReverb Reverb that could be found on Cloud EuroRack module from Mutable Instrruments +// Ported by: Vincent Gauché +// +#pragma once + +#include "fx_components.h" +#include "fx_svf.h" +#include "fx_shimmer_helper.h" +#include "fx_pitch_shifter.h" +#include "fx_reverberator.h" + +class ShimmerReverb : public FXElement +{ + DISALLOW_COPY_AND_ASSIGN(ShimmerReverb); + +public: + ShimmerReverb(float32_t sampling_rate); + virtual ~ShimmerReverb(); + + virtual void reset() override; + virtual void processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) override; + + void setInputGain(float32_t input_gain); + float32_t getInputGain() const; + + void setDiffusion(float32_t diffusion); + float32_t getDiffusion() const; + + void setTime(float32_t time); + float32_t getTime() const; + + void setReverbAmount(float32_t amount); + + void setTexture(float32_t texture); + float32_t getTexture() const; + + void setFeedback(float32_t feedback); + float32_t getFeedback() const; + + void setPitch(float32_t pitch); + float32_t getPitch() const; + + void setSize(float32_t size); + float32_t getSize() const; + + void setCutoff(float32_t cutoff); + float32_t getCutoff() const; + +private: + void updateFilterCoefficients(); + void updateReverberatorCoefficients(); + + PitchShifter pitch_shifter_; + SVF lp_filter_; + SVF hp_filter_; + Reverberator reverberator_; + + float32_t texture_; + float32_t lp_cutoff_; + float32_t hp_cutoff_; + float32_t lpq_; + float32_t amount_; + float32_t feedback_; + float32_t cutoff_; + + IMPLEMENT_DUMP( + out << "START " << tag << "(" << typeid(*this).name() << ") dump" << std::endl << std::endl; + + out << "END " << tag << "(" << typeid(*this).name() << ") dump" << std::endl << std::endl; + ) + + IMPLEMENT_INSPECT( + size_t nb_errors = 0u; + + nb_errors += inspector(tag + ".texture_", this->texture_, 0.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".lp_cutoff_", this->lp_cutoff_, 0.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".hp_cutoff_", this->hp_cutoff_, 0.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".lpq_", this->lpq_, 0.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".amount_", this->amount_, 0.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".feedback_", this->feedback_, 0.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".cutoff_", this->cutoff_, 0.0f, 1.0f, deepInspection); + + if(deepInspection) + { + nb_errors += this->pitch_shifter_.inspect(inspector, deepInspection, tag + ".pitch_shifter_"); + nb_errors += this->lp_filter_.inspect(inspector, deepInspection, tag + ".lp_filter_"); + nb_errors += this->hp_filter_.inspect(inspector, deepInspection, tag + ".hp_filter_"); + nb_errors += this->reverberator_.inspect(inspector, deepInspection, tag + ".reverberator_"); + } + + return nb_errors; + ) +}; diff --git a/src/fx_svf.h b/src/fx_svf.h index 61a53ba..361dc6e 100644 --- a/src/fx_svf.h +++ b/src/fx_svf.h @@ -16,6 +16,7 @@ // fx_svf.h // // State Variable Filter used in Tape Delay +// Author: Vincent Gauché // #pragma once diff --git a/src/fx_tube.cpp b/src/fx_tube.cpp index 7e926fe..2b171d9 100644 --- a/src/fx_tube.cpp +++ b/src/fx_tube.cpp @@ -22,29 +22,35 @@ void Tube::reset() void Tube::processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) { - float32_t x = inL * this->saturator_factor_; - float32_t abs_x = abs(x); - float32_t sat_x = log(1.0f + abs_x) * this->gain_factor_; - - outL = inL > 0 ? sat_x : -sat_x; - - x = inR * this->saturator_factor_; - abs_x = abs(x); - sat_x = log(1.0f + abs_x) * this->gain_factor_; + if(inL == 0.0f) + { + outL = 0.0f; + } + else + { + outL = std::tanh(this->saturator_factor_ * inL) * this->gain_factor_; + } - outR = inR > 0 ? sat_x : -sat_x; + if(inR == 0.0f) + { + outR = 0.0f; + } + else + { + outR = std::tanh(this->saturator_factor_ * inR) * this->gain_factor_; + } } void Tube::setOverdrive(float32_t overdrive) { - static const float32_t N = 200.0f; + static const float32_t N = 3.0f; overdrive = constrain(overdrive, 0.0f, 1.0f); if(this->overdrive_ != overdrive) { this->overdrive_ = overdrive; - this->saturator_factor_ = 1.0f + N * overdrive; - this->gain_factor_ = this->OutputLevelCorrector / log(1.0f + this->saturator_factor_); + this->saturator_factor_ = 1.0 + N * overdrive; + this->gain_factor_ = this->OutputLevelCorrector / std::tanh(this->saturator_factor_); } } diff --git a/src/fx_tube.h b/src/fx_tube.h index fa775e3..99a163d 100644 --- a/src/fx_tube.h +++ b/src/fx_tube.h @@ -15,6 +15,7 @@ // fx_tube.h // // Stereo Tube overdrive audio effects proposed in the context of the MiniDexed project +// Author: Vincent Gauché // #pragma once @@ -77,4 +78,4 @@ private: return nb_errors; ) -}; \ No newline at end of file +}; diff --git a/src/fx_unit.hpp b/src/fx_unit.hpp index 3761497..344cdc7 100644 --- a/src/fx_unit.hpp +++ b/src/fx_unit.hpp @@ -15,6 +15,7 @@ // fx_unit.h // // Unit of FX that handle enable and wet parameters +// Author: Vincent Gauché // #pragma once diff --git a/src/fx_unit2.hpp b/src/fx_unit2.hpp new file mode 100644 index 0000000..e26213c --- /dev/null +++ b/src/fx_unit2.hpp @@ -0,0 +1,104 @@ +// 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 . + +// +// fx_unit2.h +// +// Unit of FX that handle the mute parameter +// Author: Vincent Gauché +// +#pragma once + +#include "fx_components.h" + +class FXUnitModule2 +{ + DISALLOW_COPY_AND_ASSIGN(FXUnitModule2); + +public: + FXUnitModule2(bool mute = false) + { + this->setMute(mute); + } + + virtual ~FXUnitModule2() + { + } + + virtual void processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) = 0; + + inline void setMute(bool mute = false) + { + this->mute_ = mute; + } + + inline bool isMute() const + { + return this->mute_; + } + +protected: + bool mute_; +}; + +template +class FXUnit2 : public virtual FXUnitModule2, public virtual _FXElement +{ + DISALLOW_COPY_AND_ASSIGN(FXUnit2); + +public: + FXUnit2(float32_t sampling_rate, bool mute = false) : + FXUnitModule2(mute), + _FXElement(sampling_rate), + is_reset_(false) + { + this->setMute(mute); + } + + virtual ~FXUnit2() + { + } + + inline void reset() override + { + if(!this->is_reset_) + { + _FXElement::reset(); + this->is_reset_ = true; + } + } + + inline void processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) override + { + if(this->isMute()) + { + this->reset(); + + outL = 0.0f; + outR = 0.0f; + } + else if(this->bypassFXProcess()) + { + outL = inL; + outR = inR; + } + else + { + this->is_reset_ = false; + _FXElement::processSample(inL, inR, outL, outR); + } + } + +private: + bool is_reset_; +}; diff --git a/src/mididevice.cpp b/src/mididevice.cpp index e1f983c..fadfd61 100644 --- a/src/mididevice.cpp +++ b/src/mididevice.cpp @@ -29,41 +29,44 @@ #include #include "userinterface.h" -LOGMODULE ("mididevice"); - -#define MIDI_NOTE_OFF 0b1000 -#define MIDI_NOTE_ON 0b1001 -#define MIDI_AFTERTOUCH 0b1010 // TODO -#define MIDI_CHANNEL_AFTERTOUCH 0b1101 // right now Synth_Dexed just manage Channel Aftertouch not Polyphonic AT -> 0b1010 -#define MIDI_CONTROL_CHANGE 0b1011 - #define MIDI_CC_BANK_SELECT_MSB 0 - #define MIDI_CC_MODULATION 1 - #define MIDI_CC_BREATH_CONTROLLER 2 - #define MIDI_CC_FOOT_PEDAL 4 - #define MIDI_CC_VOLUME 7 - #define MIDI_CC_PAN_POSITION 10 - #define MIDI_CC_BANK_SELECT_LSB 32 - #define MIDI_CC_BANK_SUSTAIN 64 - #define MIDI_CC_RESONANCE 71 - #define MIDI_CC_FREQUENCY_CUTOFF 74 - #define MIDI_CC_REVERB_LEVEL 91 - #define MIDI_CC_DETUNE_LEVEL 94 - #define MIDI_CC_ALL_SOUND_OFF 120 - #define MIDI_CC_ALL_NOTES_OFF 123 -#define MIDI_PROGRAM_CHANGE 0b1100 -#define MIDI_PITCH_BEND 0b1110 - -#define MIDI_SYSTEM_EXCLUSIVE_BEGIN 0xF0 -#define MIDI_SYSTEM_EXCLUSIVE_END 0xF7 -#define MIDI_TIMING_CLOCK 0xF8 -#define MIDI_ACTIVE_SENSING 0xFE +LOGMODULE("mididevice"); + +#define MIDI_NOTE_OFF 0b1000 +#define MIDI_NOTE_ON 0b1001 +#define MIDI_AFTERTOUCH 0b1010 // TODO +#define MIDI_CHANNEL_AFTERTOUCH 0b1101 // right now Synth_Dexed just manage Channel Aftertouch not Polyphonic AT -> 0b1010 +#define MIDI_CONTROL_CHANGE 0b1011 +#define MIDI_CC_BANK_SELECT_MSB 0 +#define MIDI_CC_MODULATION 1 +#define MIDI_CC_BREATH_CONTROLLER 2 +#define MIDI_CC_FOOT_PEDAL 4 +#define MIDI_CC_VOLUME 7 +#define MIDI_CC_PAN_POSITION 10 +#define MIDI_CC_BANK_SELECT_LSB 32 +#define MIDI_CC_BANK_SUSTAIN 64 +#define MIDI_CC_RESONANCE 71 +#define MIDI_CC_FREQUENCY_CUTOFF 74 +#define MIDI_CC_REVERB_LEVEL 91 +#define MIDI_CC_ORBITONE_LEVEL 92 // added with mixing console +#define MIDI_CC_CHORUS_LEVEL 93 // added with mixing console +#define MIDI_CC_DETUNE_LEVEL 94 +#define MIDI_CC_PHASER_LEVEL 95 // added with mixing console +#define MIDI_CC_ALL_SOUND_OFF 120 +#define MIDI_CC_ALL_NOTES_OFF 123 +#define MIDI_PROGRAM_CHANGE 0b1100 +#define MIDI_PITCH_BEND 0b1110 + +#define MIDI_SYSTEM_EXCLUSIVE_BEGIN 0xF0 +#define MIDI_SYSTEM_EXCLUSIVE_END 0xF7 +#define MIDI_TIMING_CLOCK 0xF8 +#define MIDI_ACTIVE_SENSING 0xFE CMIDIDevice::TDeviceMap CMIDIDevice::s_DeviceMap; -CMIDIDevice::CMIDIDevice (CMiniDexed *pSynthesizer, CConfig *pConfig, CUserInterface *pUI) -: m_pSynthesizer (pSynthesizer), - m_pConfig (pConfig), - m_pUI (pUI) +CMIDIDevice::CMIDIDevice(CMiniDexed *pSynthesizer, CConfig *pConfig, CUserInterface *pUI) + : m_pSynthesizer(pSynthesizer), + m_pConfig(pConfig), + m_pUI(pUI) { for (unsigned nTG = 0; nTG < CConfig::ToneGenerators; nTG++) { @@ -71,94 +74,93 @@ CMIDIDevice::CMIDIDevice (CMiniDexed *pSynthesizer, CConfig *pConfig, CUserInter } } -CMIDIDevice::~CMIDIDevice (void) +CMIDIDevice::~CMIDIDevice(void) { m_pSynthesizer = 0; } -void CMIDIDevice::SetChannel (u8 ucChannel, unsigned nTG) +void CMIDIDevice::SetChannel(u8 ucChannel, unsigned nTG) { - assert (nTG < CConfig::ToneGenerators); + assert(nTG < CConfig::ToneGenerators); m_ChannelMap[nTG] = ucChannel; } -u8 CMIDIDevice::GetChannel (unsigned nTG) const +u8 CMIDIDevice::GetChannel(unsigned nTG) const { - assert (nTG < CConfig::ToneGenerators); + assert(nTG < CConfig::ToneGenerators); return m_ChannelMap[nTG]; } -void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsigned nCable) +void CMIDIDevice::MIDIMessageHandler(const u8 *pMessage, size_t nLength, unsigned nCable) { // The packet contents are just normal MIDI data - see // https://www.midi.org/specifications/item/table-1-summary-of-midi-message - if (m_pConfig->GetMIDIDumpEnabled ()) + if (m_pConfig->GetMIDIDumpEnabled()) { switch (nLength) { case 1: - if ( pMessage[0] != MIDI_TIMING_CLOCK - && pMessage[0] != MIDI_ACTIVE_SENSING) + if (pMessage[0] != MIDI_TIMING_CLOCK && pMessage[0] != MIDI_ACTIVE_SENSING) { - printf ("MIDI%u: %02X\n", nCable, (unsigned) pMessage[0]); + printf("MIDI%u: %02X\n", nCable, (unsigned)pMessage[0]); } break; case 2: - printf ("MIDI%u: %02X %02X\n", nCable, - (unsigned) pMessage[0], (unsigned) pMessage[1]); + printf("MIDI%u: %02X %02X\n", nCable, + (unsigned)pMessage[0], (unsigned)pMessage[1]); break; case 3: - printf ("MIDI%u: %02X %02X %02X\n", nCable, - (unsigned) pMessage[0], (unsigned) pMessage[1], - (unsigned) pMessage[2]); + printf("MIDI%u: %02X %02X %02X\n", nCable, + (unsigned)pMessage[0], (unsigned)pMessage[1], + (unsigned)pMessage[2]); break; default: - switch(pMessage[0]) + switch (pMessage[0]) { - case MIDI_SYSTEM_EXCLUSIVE_BEGIN: - printf("MIDI%u: SysEx data length: [%d]:",nCable, uint16_t(nLength)); - for (uint16_t i = 0; i < nLength; i++) - { - if((i % 16) == 0) - printf("\n%04d:",i); - printf(" 0x%02x",pMessage[i]); - } - printf("\n"); - break; - default: - printf("MIDI%u: Unhandled MIDI event type %0x02x\n",nCable,pMessage[0]); + case MIDI_SYSTEM_EXCLUSIVE_BEGIN: + printf("MIDI%u: SysEx data length: [%d]:", nCable, uint16_t(nLength)); + for (uint16_t i = 0; i < nLength; i++) + { + if ((i % 16) == 0) + printf("\n%04d:", i); + printf(" 0x%02x", pMessage[i]); + } + printf("\n"); + break; + default: + printf("MIDI%u: Unhandled MIDI event type %0x02x\n", nCable, pMessage[0]); } break; } } // Only for debugging: -/* - if(pMessage[0]==MIDI_SYSTEM_EXCLUSIVE_BEGIN) - { - printf("MIDI%u: SysEx data length: [%d]:",nCable, uint16_t(nLength)); - for (uint16_t i = 0; i < nLength; i++) + /* + if(pMessage[0]==MIDI_SYSTEM_EXCLUSIVE_BEGIN) { - if((i % 16) == 0) - printf("\n%04d:",i); - printf(" 0x%02x",pMessage[i]); + printf("MIDI%u: SysEx data length: [%d]:",nCable, uint16_t(nLength)); + for (uint16_t i = 0; i < nLength; i++) + { + if((i % 16) == 0) + printf("\n%04d:",i); + printf(" 0x%02x",pMessage[i]); + } + printf("\n"); } - printf("\n"); - } -*/ + */ // Handle MIDI Thru - if (m_DeviceName.compare (m_pConfig->GetMIDIThruIn ()) == 0) + if (m_DeviceName.compare(m_pConfig->GetMIDIThruIn()) == 0) { TDeviceMap::const_iterator Iterator; - Iterator = s_DeviceMap.find (m_pConfig->GetMIDIThruOut ()); - if (Iterator != s_DeviceMap.end ()) + Iterator = s_DeviceMap.find(m_pConfig->GetMIDIThruOut()); + if (Iterator != s_DeviceMap.end()) { - Iterator->second->Send (pMessage, nLength, nCable); + Iterator->second->Send(pMessage, nLength, nCable); } } @@ -168,17 +170,17 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign return; } - m_MIDISpinLock.Acquire (); + m_MIDISpinLock.Acquire(); - u8 ucStatus = pMessage[0]; + u8 ucStatus = pMessage[0]; u8 ucChannel = ucStatus & 0x0F; - u8 ucType = ucStatus >> 4; + u8 ucType = ucStatus >> 4; // GLOBAL MIDI SYSEX - if (pMessage[0] == MIDI_SYSTEM_EXCLUSIVE_BEGIN && pMessage[3] == 0x04 && pMessage[4] == 0x01 && pMessage[nLength-1] == MIDI_SYSTEM_EXCLUSIVE_END) // MASTER VOLUME + if (pMessage[0] == MIDI_SYSTEM_EXCLUSIVE_BEGIN && pMessage[3] == 0x04 && pMessage[4] == 0x01 && pMessage[nLength - 1] == MIDI_SYSTEM_EXCLUSIVE_END) // MASTER VOLUME { - float32_t nMasterVolume=((pMessage[5] & 0x7c) & ((pMessage[6] & 0x7c) <<7))/(1<<14); - LOGNOTE("Master volume: %f",nMasterVolume); + float32_t nMasterVolume = ((pMessage[5] & 0x7c) & ((pMessage[6] & 0x7c) << 7)) / (1 << 14); + LOGNOTE("Master volume: %f", nMasterVolume); m_pSynthesizer->setMasterVolume(nMasterVolume); } else @@ -191,9 +193,9 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign case MIDI_NOTE_ON: if (nLength < 3) { - break; + break; } - m_pUI->UIMIDICmdHandler (ucChannel, ucStatus & 0xF0, pMessage[1], pMessage[2]); + m_pUI->UIMIDICmdHandler(ucChannel, ucStatus & 0xF0, pMessage[1], pMessage[2]); break; } @@ -206,14 +208,13 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign uint8_t ucSysExChannel = (pMessage[2] & 0x0F); if (m_ChannelMap[nTG] == ucSysExChannel || m_ChannelMap[nTG] == OmniMode) { - LOGNOTE("MIDI-SYSEX: channel: %u, len: %u, TG: %u",m_ChannelMap[nTG],nLength,nTG); + LOGNOTE("MIDI-SYSEX: channel: %u, len: %u, TG: %u", m_ChannelMap[nTG], nLength, nTG); HandleSystemExclusive(pMessage, nLength, nCable, nTG); } } else { - if ( m_ChannelMap[nTG] == ucChannel - || m_ChannelMap[nTG] == OmniMode) + if (m_ChannelMap[nTG] == ucChannel || m_ChannelMap[nTG] == OmniMode) { switch (ucType) { @@ -222,138 +223,156 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign { break; } - + if (pMessage[2] > 0) { if (pMessage[2] <= 127) { - m_pSynthesizer->keydown (pMessage[1], - pMessage[2], nTG); + m_pSynthesizer->keydown(pMessage[1], + pMessage[2], nTG); } } else { - m_pSynthesizer->keyup (pMessage[1], nTG); + m_pSynthesizer->keyup(pMessage[1], nTG); } break; - + case MIDI_NOTE_OFF: if (nLength < 3) { break; } - - m_pSynthesizer->keyup (pMessage[1], nTG); + + m_pSynthesizer->keyup(pMessage[1], nTG); break; - + case MIDI_CHANNEL_AFTERTOUCH: - - m_pSynthesizer->setAftertouch (pMessage[1], nTG); - m_pSynthesizer->ControllersRefresh (nTG); + + m_pSynthesizer->setAftertouch(pMessage[1], nTG); + m_pSynthesizer->ControllersRefresh(nTG); break; - + case MIDI_CONTROL_CHANGE: if (nLength < 3) { break; } - + switch (pMessage[1]) { case MIDI_CC_MODULATION: - m_pSynthesizer->setModWheel (pMessage[2], nTG); - m_pSynthesizer->ControllersRefresh (nTG); + m_pSynthesizer->setModWheel(pMessage[2], nTG); + m_pSynthesizer->ControllersRefresh(nTG); break; - + case MIDI_CC_FOOT_PEDAL: - m_pSynthesizer->setFootController (pMessage[2], nTG); - m_pSynthesizer->ControllersRefresh (nTG); + m_pSynthesizer->setFootController(pMessage[2], nTG); + m_pSynthesizer->ControllersRefresh(nTG); break; case MIDI_CC_BREATH_CONTROLLER: - m_pSynthesizer->setBreathController (pMessage[2], nTG); - m_pSynthesizer->ControllersRefresh (nTG); + m_pSynthesizer->setBreathController(pMessage[2], nTG); + m_pSynthesizer->ControllersRefresh(nTG); break; - + case MIDI_CC_VOLUME: - m_pSynthesizer->SetVolume (pMessage[2], nTG); + m_pSynthesizer->SetVolume(pMessage[2], nTG); break; - + case MIDI_CC_PAN_POSITION: - m_pSynthesizer->SetPan (pMessage[2], nTG); + m_pSynthesizer->SetPan(pMessage[2], nTG); break; - + case MIDI_CC_BANK_SELECT_MSB: - m_pSynthesizer->BankSelectMSB (pMessage[2], nTG); + m_pSynthesizer->BankSelectMSB(pMessage[2], nTG); break; - + case MIDI_CC_BANK_SELECT_LSB: - m_pSynthesizer->BankSelectLSB (pMessage[2], nTG); + m_pSynthesizer->BankSelectLSB(pMessage[2], nTG); break; - + case MIDI_CC_BANK_SUSTAIN: - m_pSynthesizer->setSustain (pMessage[2] >= 64, nTG); + m_pSynthesizer->setSustain(pMessage[2] >= 64, nTG); break; - + case MIDI_CC_RESONANCE: - m_pSynthesizer->SetResonance (maplong (pMessage[2], 0, 127, 0, 99), nTG); + m_pSynthesizer->SetResonance(maplong(pMessage[2], 0, 127, 0, 99), nTG); break; - + case MIDI_CC_FREQUENCY_CUTOFF: - m_pSynthesizer->SetCutoff (maplong (pMessage[2], 0, 127, 0, 99), nTG); + m_pSynthesizer->SetCutoff(maplong(pMessage[2], 0, 127, 0, 99), nTG); break; - + case MIDI_CC_REVERB_LEVEL: - m_pSynthesizer->SetReverbSend (maplong (pMessage[2], 0, 127, 0, 99), nTG); +#if defined(MIXING_CONSOLE_ENABLE) + this->m_pSynthesizer->setMixingConsoleSendLevel(nTG, MixerOutput::FX_PlateReverb, maplong(pMessage[2], 0, 127, 0, 99)); +#elif defined(PLATE_REVERB_ENABLE) + m_pSynthesizer->SetReverbSend(maplong(pMessage[2], 0, 127, 0, 99), nTG); +#endif + break; + +#if defined(MIXING_CONSOLE_ENABLE) + case MIDI_CC_ORBITONE_LEVEL: + this->m_pSynthesizer->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Orbitone, maplong(pMessage[2], 0, 127, 0, 99)); break; - + case MIDI_CC_CHORUS_LEVEL: + this->m_pSynthesizer->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Chorus, maplong(pMessage[2], 0, 127, 0, 99)); + break; + case MIDI_CC_PHASER_LEVEL: + this->m_pSynthesizer->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Phaser, maplong(pMessage[2], 0, 127, 0, 99)); + break; +#endif + case MIDI_CC_DETUNE_LEVEL: if (pMessage[2] == 0) { // "0 to 127, with 0 being no celeste (detune) effect applied at all." - m_pSynthesizer->SetMasterTune (0, nTG); + m_pSynthesizer->SetMasterTune(0, nTG); } else { - m_pSynthesizer->SetMasterTune (maplong (pMessage[2], 1, 127, -99, 99), nTG); + m_pSynthesizer->SetMasterTune(maplong(pMessage[2], 1, 127, -99, 99), nTG); } break; - + case MIDI_CC_ALL_SOUND_OFF: - m_pSynthesizer->panic (pMessage[2], nTG); + m_pSynthesizer->panic(pMessage[2], nTG); break; - + case MIDI_CC_ALL_NOTES_OFF: // As per "MIDI 1.0 Detailed Specification" v4.2 // From "ALL NOTES OFF" states: // "Receivers should ignore an All Notes Off message while Omni is on (Modes 1 & 2)" - if (!m_pConfig->GetIgnoreAllNotesOff () && m_ChannelMap[nTG] != OmniMode) + if (!m_pConfig->GetIgnoreAllNotesOff() && m_ChannelMap[nTG] != OmniMode) { - m_pSynthesizer->notesOff (pMessage[2], nTG); + m_pSynthesizer->notesOff(pMessage[2], nTG); } break; } break; - + case MIDI_PROGRAM_CHANGE: // do program change only if enabled in config - if( m_pConfig->GetMIDIRXProgramChange() ) - m_pSynthesizer->ProgramChange (pMessage[1], nTG); + if (m_pConfig->GetMIDIRXProgramChange()) + m_pSynthesizer->ProgramChange(pMessage[1], nTG); break; - - case MIDI_PITCH_BEND: { + + case MIDI_PITCH_BEND: + { if (nLength < 3) { break; } - + s16 nValue = pMessage[1]; - nValue |= (s16) pMessage[2] << 7; + nValue |= (s16)pMessage[2] << 7; nValue -= 0x2000; - - m_pSynthesizer->setPitchbend (nValue, nTG); - } break; - + + m_pSynthesizer->setPitchbend(nValue, nTG); + } + break; + default: break; } @@ -361,161 +380,161 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign } } } - m_MIDISpinLock.Release (); + m_MIDISpinLock.Release(); } -void CMIDIDevice::AddDevice (const char *pDeviceName) +void CMIDIDevice::AddDevice(const char *pDeviceName) { - assert (pDeviceName); + assert(pDeviceName); - assert (m_DeviceName.empty ()); + assert(m_DeviceName.empty()); m_DeviceName = pDeviceName; - assert (!m_DeviceName.empty ()); + assert(!m_DeviceName.empty()); - s_DeviceMap.insert (std::pair (pDeviceName, this)); + s_DeviceMap.insert(std::pair(pDeviceName, this)); } -void CMIDIDevice::HandleSystemExclusive(const uint8_t* pMessage, const size_t nLength, const unsigned nCable, const uint8_t nTG) +void CMIDIDevice::HandleSystemExclusive(const uint8_t *pMessage, const size_t nLength, const unsigned nCable, const uint8_t nTG) { - int16_t sysex_return; - - sysex_return = m_pSynthesizer->checkSystemExclusive(pMessage, nLength, nTG); - LOGDBG("SYSEX handler return value: %d", sysex_return); - - switch (sysex_return) - { - case -1: - LOGERR("SysEx end status byte not detected."); - break; - case -2: - LOGERR("SysEx vendor not Yamaha."); - break; - case -3: - LOGERR("Unknown SysEx parameter change."); - break; - case -4: - LOGERR("Unknown SysEx voice or function."); - break; - case -5: - LOGERR("Not a SysEx voice bulk upload."); - break; - case -6: - LOGERR("Wrong length for SysEx voice bulk upload (not 155)."); - break; - case -7: - LOGERR("Checksum error for one voice."); - break; - case -8: - LOGERR("Not a SysEx bank bulk upload."); - break; - case -9: - LOGERR("Wrong length for SysEx bank bulk upload (not 4096)."); - case -10: - LOGERR("Checksum error for bank."); - break; - case -11: - LOGERR("Unknown SysEx message."); - break; - case 64: - LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]); - m_pSynthesizer->setMonoMode(pMessage[5],nTG); - break; - case 65: - LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]); - m_pSynthesizer->setPitchbendRange(pMessage[5],nTG); - break; - case 66: - LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]); - m_pSynthesizer->setPitchbendStep(pMessage[5],nTG); - break; - case 67: - LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]); - m_pSynthesizer->setPortamentoMode(pMessage[5],nTG); - break; - case 68: - LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]); - m_pSynthesizer->setPortamentoGlissando(pMessage[5],nTG); - break; - case 69: - LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]); - m_pSynthesizer->setPortamentoTime(pMessage[5],nTG); - break; - case 70: - LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]); - m_pSynthesizer->setModWheelRange(pMessage[5],nTG); - break; - case 71: - LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]); - m_pSynthesizer->setModWheelTarget(pMessage[5],nTG); - break; - case 72: - LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]); - m_pSynthesizer->setFootControllerRange(pMessage[5],nTG); - break; - case 73: - LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]); - m_pSynthesizer->setFootControllerTarget(pMessage[5],nTG); - break; - case 74: - LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]); - m_pSynthesizer->setBreathControllerRange(pMessage[5],nTG); - break; - case 75: - LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]); - m_pSynthesizer->setBreathControllerTarget(pMessage[5],nTG); - break; - case 76: - LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]); - m_pSynthesizer->setAftertouchRange(pMessage[5],nTG); - break; - case 77: - LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]); - m_pSynthesizer->setAftertouchTarget(pMessage[5],nTG); - break; - case 100: - // load sysex-data into voice memory - LOGDBG("One Voice bulk upload"); - m_pSynthesizer->loadVoiceParameters(pMessage,nTG); - break; - case 200: - LOGDBG("Bank bulk upload."); - //TODO: add code for storing a bank bulk upload - LOGNOTE("Currently code for storing a bulk bank upload is missing!"); - break; - default: - if(sysex_return >= 300 && sysex_return < 500) - { - LOGDBG("SysEx voice parameter change: Parameter %d value: %d",pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5]); - m_pSynthesizer->setVoiceDataElement(pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5],nTG); - switch(pMessage[4] + ((pMessage[3] & 0x03) * 128)) - { - case 134: - m_pSynthesizer->notesOff(0,nTG); - break; - } - } - else if(sysex_return >= 500 && sysex_return < 600) - { - LOGDBG("SysEx send voice %u request",sysex_return-500); - SendSystemExclusiveVoice(sysex_return-500, nCable, nTG); - } - break; - } + int16_t sysex_return; + + sysex_return = m_pSynthesizer->checkSystemExclusive(pMessage, nLength, nTG); + LOGDBG("SYSEX handler return value: %d", sysex_return); + + switch (sysex_return) + { + case -1: + LOGERR("SysEx end status byte not detected."); + break; + case -2: + LOGERR("SysEx vendor not Yamaha."); + break; + case -3: + LOGERR("Unknown SysEx parameter change."); + break; + case -4: + LOGERR("Unknown SysEx voice or function."); + break; + case -5: + LOGERR("Not a SysEx voice bulk upload."); + break; + case -6: + LOGERR("Wrong length for SysEx voice bulk upload (not 155)."); + break; + case -7: + LOGERR("Checksum error for one voice."); + break; + case -8: + LOGERR("Not a SysEx bank bulk upload."); + break; + case -9: + LOGERR("Wrong length for SysEx bank bulk upload (not 4096)."); + case -10: + LOGERR("Checksum error for bank."); + break; + case -11: + LOGERR("Unknown SysEx message."); + break; + case 64: + LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); + m_pSynthesizer->setMonoMode(pMessage[5], nTG); + break; + case 65: + LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); + m_pSynthesizer->setPitchbendRange(pMessage[5], nTG); + break; + case 66: + LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); + m_pSynthesizer->setPitchbendStep(pMessage[5], nTG); + break; + case 67: + LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); + m_pSynthesizer->setPortamentoMode(pMessage[5], nTG); + break; + case 68: + LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); + m_pSynthesizer->setPortamentoGlissando(pMessage[5], nTG); + break; + case 69: + LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); + m_pSynthesizer->setPortamentoTime(pMessage[5], nTG); + break; + case 70: + LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); + m_pSynthesizer->setModWheelRange(pMessage[5], nTG); + break; + case 71: + LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); + m_pSynthesizer->setModWheelTarget(pMessage[5], nTG); + break; + case 72: + LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); + m_pSynthesizer->setFootControllerRange(pMessage[5], nTG); + break; + case 73: + LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); + m_pSynthesizer->setFootControllerTarget(pMessage[5], nTG); + break; + case 74: + LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); + m_pSynthesizer->setBreathControllerRange(pMessage[5], nTG); + break; + case 75: + LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); + m_pSynthesizer->setBreathControllerTarget(pMessage[5], nTG); + break; + case 76: + LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); + m_pSynthesizer->setAftertouchRange(pMessage[5], nTG); + break; + case 77: + LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); + m_pSynthesizer->setAftertouchTarget(pMessage[5], nTG); + break; + case 100: + // load sysex-data into voice memory + LOGDBG("One Voice bulk upload"); + m_pSynthesizer->loadVoiceParameters(pMessage, nTG); + break; + case 200: + LOGDBG("Bank bulk upload."); + // TODO: add code for storing a bank bulk upload + LOGNOTE("Currently code for storing a bulk bank upload is missing!"); + break; + default: + if (sysex_return >= 300 && sysex_return < 500) + { + LOGDBG("SysEx voice parameter change: Parameter %d value: %d", pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5]); + m_pSynthesizer->setVoiceDataElement(pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5], nTG); + switch (pMessage[4] + ((pMessage[3] & 0x03) * 128)) + { + case 134: + m_pSynthesizer->notesOff(0, nTG); + break; + } + } + else if (sysex_return >= 500 && sysex_return < 600) + { + LOGDBG("SysEx send voice %u request", sysex_return - 500); + SendSystemExclusiveVoice(sysex_return - 500, nCable, nTG); + } + break; + } } void CMIDIDevice::SendSystemExclusiveVoice(uint8_t nVoice, const unsigned nCable, uint8_t nTG) { - uint8_t voicedump[163]; + uint8_t voicedump[163]; - // Get voice sysex dump from TG - m_pSynthesizer->getSysExVoiceDump(voicedump, nTG); + // Get voice sysex dump from TG + m_pSynthesizer->getSysExVoiceDump(voicedump, nTG); - TDeviceMap::const_iterator Iterator; + TDeviceMap::const_iterator Iterator; - // send voice dump to all MIDI interfaces - for(Iterator = s_DeviceMap.begin(); Iterator != s_DeviceMap.end(); ++Iterator) - { - Iterator->second->Send (voicedump, sizeof(voicedump)*sizeof(uint8_t)); - // LOGDBG("Send SYSEX voice dump %u to \"%s\"",nVoice,Iterator->first.c_str()); - } -} + // send voice dump to all MIDI interfaces + for (Iterator = s_DeviceMap.begin(); Iterator != s_DeviceMap.end(); ++Iterator) + { + Iterator->second->Send(voicedump, sizeof(voicedump) * sizeof(uint8_t)); + // LOGDBG("Send SYSEX voice dump %u to \"%s\"",nVoice,Iterator->first.c_str()); + } +} diff --git a/src/minidexed.cpp b/src/minidexed.cpp index db9254a..fdc2ae2 100644 --- a/src/minidexed.cpp +++ b/src/minidexed.cpp @@ -30,9 +30,13 @@ LOGMODULE ("minidexed"); -CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt, - CGPIOManager *pGPIOManager, CI2CMaster *pI2CMaster, FATFS *pFileSystem) -: +CMiniDexed::CMiniDexed ( + CConfig *pConfig, + CInterruptSystem *pInterrupt, + CGPIOManager *pGPIOManager, + CI2CMaster *pI2CMaster, + FATFS *pFileSystem +) : #ifdef ARM_ALLOW_MULTI_CORE CMultiCoreSupport (CMemorySystem::Get ()), #endif @@ -47,8 +51,9 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt, #ifdef ARM_ALLOW_MULTI_CORE m_nActiveTGsLog2 (0), #endif - m_GetChunkTimer ("GetChunk", - 1000000U * pConfig->GetChunkSize ()/2 / pConfig->GetSampleRate ()), + + + m_GetChunkTimer ("GetChunk", 1000000U * pConfig->GetChunkSize ()/2 / pConfig->GetSampleRate ()), m_bProfileEnabled (m_pConfig->GetProfileEnabled ()), m_bSavePerformance (false), m_bSavePerformanceNewFile (false), @@ -79,16 +84,29 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt, m_nNoteLimitHigh[i] = 127; m_nNoteShift[i] = 0; - m_nModulationWheelRange[i]=99; - m_nModulationWheelTarget[i]=7; - m_nFootControlRange[i]=99; - m_nFootControlTarget[i]=0; - m_nBreathControlRange[i]=99; - m_nBreathControlTarget[i]=0; - m_nAftertouchRange[i]=99; - m_nAftertouchTarget[i]=0; - + + + + + + + + + + m_nModulationWheelRange[i] = 99; + m_nModulationWheelTarget[i] = 7; + m_nFootControlRange[i] = 99; + m_nFootControlTarget[i] = 0; + m_nBreathControlRange[i] = 99; + m_nBreathControlTarget[i] = 0; + m_nAftertouchRange[i] = 99; + m_nAftertouchTarget[i] = 0; + +#if defined(MIXING_CONSOLE_ENABLE) + memset(this->m_nTGSendLevel[i], 0, MixerOutput::kFXCount * sizeof(unsigned)); +#elif defined(PLATE_REVERB_ENABLE) m_nReverbSend[i] = 0; +#endif m_uchOPMask[i] = 0b111111; // All operators on m_pTG[i] = new CDexedAdapter (CConfig::MaxNotes, pConfig->GetSampleRate ()); @@ -97,6 +115,17 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt, 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); @@ -139,7 +168,69 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt, } #endif - setMasterVolume(1.0); + this->setMasterVolume(1.0); + +#if defined(MIXING_CONSOLE_ENABLE) + this->mixing_console_ = new Mixer(static_cast(pConfig->GetSampleRate()), CConfig::MaxChunkSize, this->m_bChannelsSwapped); + for (uint8_t i = 0; i < CConfig::ToneGenerators; i++) + { + memset(this->m_OutputLevel[i], 0, CConfig::MaxChunkSize * sizeof(float32_t)); + this->mixing_console_->setInputSampleBuffer(i, this->m_OutputLevel[i]); + } + + // Tube parameters + this->SetParameter(TParameter::ParameterFXTubeEnable, 1); + this->SetParameter(TParameter::ParameterFXTubeOverdrive, 25); + + // Chorus parameters + this->SetParameter(TParameter::ParameterFXChorusEnable, 1); + this->SetParameter(TParameter::ParameterFXChorusRate, 50); + this->SetParameter(TParameter::ParameterFXChorusDepth, 50); + + // Flanger parameters + this->SetParameter(TParameter::ParameterFXFlangerEnable, 1); + this->SetParameter(TParameter::ParameterFXFlangerRate, 3); + this->SetParameter(TParameter::ParameterFXFlangerDepth, 75); + this->SetParameter(TParameter::ParameterFXFlangerFeedback, 50); + + // Orbitone parameters + this->SetParameter(TParameter::ParameterFXOrbitoneEnable, 1); + this->SetParameter(TParameter::ParameterFXOrbitoneRate, 40); + this->SetParameter(TParameter::ParameterFXOrbitoneDepth, 50); + + // Phaser parameters + this->SetParameter(TParameter::ParameterFXPhaserEnable, 1); + this->SetParameter(TParameter::ParameterFXPhaserRate, 5); + this->SetParameter(TParameter::ParameterFXPhaserDepth, 99); + this->SetParameter(TParameter::ParameterFXPhaserFeedback, 50); + this->SetParameter(TParameter::ParameterFXPhaserNbStages, 12); + + // Delay parameters + this->SetParameter(TParameter::ParameterFXDelayEnable, 1); + this->SetParameter(TParameter::ParameterFXDelayLeftDelayTime, 15); + this->SetParameter(TParameter::ParameterFXDelayRightDelayTime, 22); + this->SetParameter(TParameter::ParameterFXDelayFeedback, 35); + + // AudioEffectPlateReverb parameters + this->SetParameter(TParameter::ParameterReverbEnable, 1); + this->SetParameter(TParameter::ParameterReverbSize, 70); + this->SetParameter(TParameter::ParameterReverbHighDamp, 50); + this->SetParameter(TParameter::ParameterReverbLowDamp, 50); + this->SetParameter(TParameter::ParameterReverbLowPass, 30); + this->SetParameter(TParameter::ParameterReverbDiffusion, 65); + this->SetParameter(TParameter::ParameterReverbLevel, 99); + + // Reverberator parameters + this->SetParameter(TParameter::ParameterFXReverberatorEnable, 1); + this->SetParameter(TParameter::ParameterFXReverberatorInputGain, 99); + this->SetParameter(TParameter::ParameterFXReverberatorTime, 80); + this->SetParameter(TParameter::ParameterFXReverberatorDiffusion, 80); + this->SetParameter(TParameter::ParameterFXReverberatorLP, 70); + + // Bypass + this->SetParameter(TParameter::ParameterFXBypass, 0); + +#elif defined(PLATE_REVERB_ENABLE) // BEGIN setup tg_mixer tg_mixer = new AudioStereoMixer(pConfig->GetChunkSize()/2); @@ -148,73 +239,18 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt, // BEGIN setup reverb reverb_send_mixer = new AudioStereoMixer(pConfig->GetChunkSize()/2); reverb = new AudioEffectPlateReverb(pConfig->GetSampleRate()); - SetParameter (ParameterReverbEnable, 1); - SetParameter (ParameterReverbSize, 70); - SetParameter (ParameterReverbHighDamp, 50); - SetParameter (ParameterReverbLowDamp, 50); - SetParameter (ParameterReverbLowPass, 30); - SetParameter (ParameterReverbDiffusion, 65); - SetParameter (ParameterReverbLevel, 99); + SetParameter (TParameter::ParameterReverbEnable, 1); + SetParameter (TParameter::ParameterReverbSize, 70); + SetParameter (TParameter::ParameterReverbHighDamp, 50); + SetParameter (TParameter::ParameterReverbLowDamp, 50); + SetParameter (TParameter::ParameterReverbLowPass, 30); + SetParameter (TParameter::ParameterReverbDiffusion, 65); + SetParameter (TParameter::ParameterReverbLevel, 99); // END setup reverb - SetParameter (ParameterCompressorEnable, 1); - - // BEGIN setup FXRack - #ifdef FXRACK_ENABLE - this->fx_rack = new FXRack(static_cast(pConfig->GetSampleRate())); - - // FXChain parameters - this->SetParameter(ParameterFXChainEnable, 1); - this->SetParameter(ParameterFXChainWet, 99); - - // FXChain > Tube parameters - this->SetParameter(ParameterFXChainTubeEnable, 1); - this->SetParameter(ParameterFXChainTubeWet, 50); - this->SetParameter(ParameterFXChainTubeOverdrive, 10); +#endif - // FXChain > Chorus parameters - this->SetParameter(ParameterFXChainChorusEnable, 1); - this->SetParameter(ParameterFXChainChorusWet, 50); - this->SetParameter(ParameterFXChainChorusRate, 50); - this->SetParameter(ParameterFXChainChorusDepth, 50); - - // FXChain > Flanger parameters - this->SetParameter(ParameterFXChainFlangerEnable, 1); - this->SetParameter(ParameterFXChainFlangerWet, 50); - this->SetParameter(ParameterFXChainFlangerRate, 3); - this->SetParameter(ParameterFXChainFlangerDepth, 75); - this->SetParameter(ParameterFXChainFlangerFeedback, 50); - - // FXChain > Orbitone parameters - this->SetParameter(ParameterFXChainOrbitoneEnable, 1); - this->SetParameter(ParameterFXChainOrbitoneWet, 80); - this->SetParameter(ParameterFXChainOrbitoneRate, 40); - this->SetParameter(ParameterFXChainOrbitoneDepth, 50); - - // FXChain > Phaser parameters - this->SetParameter(ParameterFXChainPhaserEnable, 1); - this->SetParameter(ParameterFXChainPhaserWet, 50); - this->SetParameter(ParameterFXChainPhaserRate, 5); - this->SetParameter(ParameterFXChainPhaserDepth, 99); - this->SetParameter(ParameterFXChainPhaserFeedback, 50); - this->SetParameter(ParameterFXChainPhaserNbStages, 12); - - // FXChain > Delay parameters - this->SetParameter(ParameterFXChainDelayEnable, 1); - this->SetParameter(ParameterFXChainDelayWet, 50); - this->SetParameter(ParameterFXChainDelayLeftDelayTime, 15); - this->SetParameter(ParameterFXChainDelayRightDelayTime, 22); - this->SetParameter(ParameterFXChainDelayFeedback, 35); - - // FXChain > ShimmerReverb parameters - this->SetParameter(ParameterFXChainShimmerReverbEnable, 1); - this->SetParameter(ParameterFXChainShimmerReverbWet, 70); - this->SetParameter(ParameterFXChainShimmerReverbInputGain, 99); - this->SetParameter(ParameterFXChainShimmerReverbTime, 80); - this->SetParameter(ParameterFXChainShimmerReverbDiffusion, 80); - this->SetParameter(ParameterFXChainShimmerReverbLP, 70); - #endif - // END setup FXRack + this->SetParameter (TParameter::ParameterCompressorEnable, 1); }; bool CMiniDexed::Initialize (void) @@ -252,10 +288,21 @@ bool CMiniDexed::Initialize (void) m_pTG[i]->setBCController (99, 1, 0); m_pTG[i]->setATController (99, 1, 0); +#if defined(MIXING_CONSOLE_ENABLE) + this->mixing_console_->reset(); + this->mixing_console_->setPan(i, this->m_nPan[i] / 127.0f); + + 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) + tg_mixer->pan(i,mapfloat(m_nPan[i],0,127,0.0f,1.0f)); tg_mixer->gain(i,1.0f); reverb_send_mixer->pan(i,mapfloat(m_nPan[i],0,127,0.0f,1.0f)); reverb_send_mixer->gain(i,mapfloat(m_nReverbSend[i],0,99,0.0f,1.0f)); +#endif } if (m_PerformanceConfig.Load ()) @@ -281,24 +328,26 @@ bool CMiniDexed::Initialize (void) return false; } -#ifndef ARM_ALLOW_MULTI_CORE - m_pSoundDevice->SetWriteFormat (SoundFormatSigned16, 1); // 16-bit Mono -#else +#if defined(ARM_ALLOW_MULTI_CORE) + + m_pSoundDevice->SetWriteFormat (SoundFormatSigned16, 2); // 16-bit Stereo +#else + m_pSoundDevice->SetWriteFormat (SoundFormatSigned16, 1); // 16-bit Mono #endif m_nQueueSizeFrames = m_pSoundDevice->GetQueueSizeFrames (); m_pSoundDevice->Start (); -#ifdef ARM_ALLOW_MULTI_CORE +#if defined(ARM_ALLOW_MULTI_CORE) // start secondary cores if (!CMultiCoreSupport::Initialize ()) { return false; } #endif - + return true; } @@ -411,6 +460,10 @@ void CMiniDexed::Run (unsigned nCore) { assert (m_pTG[nTG]); m_pTG[nTG]->getSamples (m_OutputLevel[nTG],m_nFramesToProcess); + +#if defined(MIXING_CONSOLE_ENABLE) + this->mixing_console_->preProcessInputSampleBuffer(nTG, this->m_nFramesToProcess); +#endif } } } @@ -525,6 +578,10 @@ void CMiniDexed::SetVolume (unsigned nVolume, unsigned nTG) assert (m_pTG[nTG]); m_pTG[nTG]->setGain (nVolume / 127.0f); +#if defined(MIXING_CONSOLE_ENABLE) + this->mixing_console_->setChannelLevel(nTG, nVolume == 0 ? 0.0f : 1.0f); +#endif + m_UI.ParameterChanged (); } @@ -534,13 +591,52 @@ void CMiniDexed::SetPan (unsigned nPan, unsigned nTG) assert (nTG < CConfig::ToneGenerators); m_nPan[nTG] = nPan; - + +#if defined(MIXING_CONSOLE_ENABLE) + this->mixing_console_->setPan(nTG, nPan / 127.0f); + +#elif defined(PLATE_REVERB_ENABLE) + tg_mixer->pan(nTG,mapfloat(nPan,0,127,0.0f,1.0f)); reverb_send_mixer->pan(nTG,mapfloat(nPan,0,127,0.0f,1.0f)); +#endif m_UI.ParameterChanged (); } +#if defined(MIXING_CONSOLE_ENABLE) + +unsigned CMiniDexed::getMixingConsoleSendLevel(unsigned nTG, MixerOutput fx) const +{ + assert (nTG < CConfig::ToneGenerators); + return this->m_nTGSendLevel[nTG][fx]; +} + +void CMiniDexed::setMixingConsoleSendLevel(unsigned nTG, MixerOutput fx, unsigned nFXSend) +{ + assert (nTG < CConfig::ToneGenerators); + nFXSend = constrain((int)nFXSend, 0, 99); + + this->m_nTGSendLevel[nTG][fx] = nFXSend; + this->mixing_console_->setSendLevel(nTG, fx, nFXSend / 99.0f); + + this->m_UI.ParameterChanged(); +} + +void CMiniDexed::setMixingConsoleFXSendLevel(MixerOutput fromFX, MixerOutput toFX, unsigned nFXSend) +{ + assert(fromFX < (MixerOutput::kFXCount - 1)); + assert(toFX < MixerOutput::kFXCount); + if(fromFX != toFX) + { + nFXSend = constrain((int)nFXSend, 0, 99); + this->m_nFXSendLevel[fromFX][toFX] = nFXSend; + this->mixing_console_->setFXSendLevel(fromFX, toFX, nFXSend / 99.0f); + } +} + +#elif defined(PLATE_REVERB_ENABLE) + void CMiniDexed::SetReverbSend (unsigned nReverbSend, unsigned nTG) { nReverbSend=constrain((int)nReverbSend,0,99); @@ -553,6 +649,8 @@ void CMiniDexed::SetReverbSend (unsigned nReverbSend, unsigned nTG) m_UI.ParameterChanged (); } +#endif + void CMiniDexed::SetMasterTune (int nMasterTune, unsigned nTG) { nMasterTune=constrain((int)nMasterTune,-99,99); @@ -747,298 +845,688 @@ void CMiniDexed::ControllersRefresh (unsigned nTG) void CMiniDexed::SetParameter (TParameter Parameter, int nValue) { - assert (reverb); + - assert (Parameter < ParameterUnknown); + assert(Parameter < TParameter::ParameterUnknown); + m_nParameter[Parameter] = nValue; switch (Parameter) { - case ParameterCompressorEnable: - for (unsigned nTG = 0; nTG < CConfig::ToneGenerators; nTG++) + case TParameter::ParameterCompressorEnable: + for (unsigned nTG = 0; nTG < CConfig::ToneGenerators; ++nTG) { - assert (m_pTG[nTG]); + assert(m_pTG[nTG]); m_pTG[nTG]->setCompressor (!!nValue); } break; - case ParameterReverbEnable: - nValue=constrain((int)nValue,0,1); - m_FXSpinLock.Acquire (); - reverb->set_bypass (!nValue); - m_FXSpinLock.Release (); +#if defined(MIXING_CONSOLE_ENABLE) + + // Tube parameters + case TParameter::ParameterFXTubeEnable: + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getTube()->setMute(!!!nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXTubeOverdrive: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getTube()->setOverdrive(nValue / 99.0f); + this->m_FXSpinLock.Release(); + break; + + // Chorus parameters + case TParameter::ParameterFXChorusEnable: + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getChorus()->setMute(!!!nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXChorusRate: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getChorus()->setRate(nValue / 99.0f); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXChorusDepth: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getChorus()->setDepth(nValue / 9.9f); + this->m_FXSpinLock.Release(); + break; + + // Flanger parameters + case TParameter::ParameterFXFlangerEnable: + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getFlanger()->setMute(!!!nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXFlangerRate: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getFlanger()->setRate(nValue / 99.0f); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXFlangerDepth: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getFlanger()->setDepth(nValue / 99.0f); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXFlangerFeedback: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getFlanger()->setFeedback(mapfloat(nValue, 0, 99, 0.0f, 0.97f)); + this->m_FXSpinLock.Release(); + break; + + // Orbitone parameters + case TParameter::ParameterFXOrbitoneEnable: + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getOrbitone()->setMute(!!!nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXOrbitoneRate: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getOrbitone()->setRate(nValue / 99.0f); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXOrbitoneDepth: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getOrbitone()->setDepth(nValue / 99.0f); + this->m_FXSpinLock.Release(); + break; + + // Phaser parameters + case TParameter::ParameterFXPhaserEnable: + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getPhaser()->setMute(!!!nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPhaserRate: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getPhaser()->setRate(nValue / 99.0f); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPhaserDepth: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getPhaser()->setDepth(nValue / 99.0f); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPhaserFeedback: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getPhaser()->setFeedback(mapfloat(nValue, 0, 99, 0.0f, 0.97f)); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPhaserNbStages: + nValue = constrain((int)nValue, 2, MAX_NB_PHASES); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getPhaser()->setNbStages(nValue); + this->m_FXSpinLock.Release(); break; - case ParameterReverbSize: - nValue=constrain((int)nValue,0,99); - m_FXSpinLock.Acquire (); - reverb->size (nValue / 99.0f); - m_FXSpinLock.Release (); + // Delay parameters + case TParameter::ParameterFXDelayEnable: + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getDelay()->setMute(!!!nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXDelayLeftDelayTime: + nValue = constrain((int)nValue, -99, 99); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getDelay()->setLeftDelayTime(nValue / 99.0f); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXDelayRightDelayTime: + nValue = constrain((int)nValue, -99, 99); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getDelay()->setRightDelayTime(nValue / 99.0f); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXDelayFeedback: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->getDelay()->setFeedback(nValue / 99.0f); + this->m_FXSpinLock.Release(); break; - case ParameterReverbHighDamp: + // AudioEffectPlateReverb parameters + case TParameter::ParameterReverbEnable: + this->m_FXSpinLock.Acquire (); + this->mixing_console_->getPlateReverb()->set_bypass (!!!nValue); + this->m_FXSpinLock.Release (); + break; + case TParameter::ParameterReverbSize: nValue=constrain((int)nValue,0,99); - m_FXSpinLock.Acquire (); - reverb->hidamp (nValue / 99.0f); - m_FXSpinLock.Release (); + this->m_FXSpinLock.Acquire (); + this->mixing_console_->getPlateReverb()->size (nValue / 99.0f); + this->m_FXSpinLock.Release (); break; - - case ParameterReverbLowDamp: + case TParameter::ParameterReverbHighDamp: nValue=constrain((int)nValue,0,99); - m_FXSpinLock.Acquire (); - reverb->lodamp (nValue / 99.0f); - m_FXSpinLock.Release (); + this->m_FXSpinLock.Acquire (); + this->mixing_console_->getPlateReverb()->hidamp (nValue / 99.0f); + this->m_FXSpinLock.Release (); break; - - case ParameterReverbLowPass: + case TParameter::ParameterReverbLowDamp: nValue=constrain((int)nValue,0,99); - m_FXSpinLock.Acquire (); - reverb->lowpass (nValue / 99.0f); - m_FXSpinLock.Release (); + this->m_FXSpinLock.Acquire (); + this->mixing_console_->getPlateReverb()->lodamp (nValue / 99.0f); + this->m_FXSpinLock.Release (); break; - - case ParameterReverbDiffusion: + case TParameter::ParameterReverbLowPass: nValue=constrain((int)nValue,0,99); - m_FXSpinLock.Acquire (); - reverb->diffusion (nValue / 99.0f); - m_FXSpinLock.Release (); + this->m_FXSpinLock.Acquire (); + this->mixing_console_->getPlateReverb()->lowpass (nValue / 99.0f); + this->m_FXSpinLock.Release (); break; - - case ParameterReverbLevel: + case TParameter::ParameterReverbDiffusion: nValue=constrain((int)nValue,0,99); - m_FXSpinLock.Acquire (); - reverb->level (nValue / 99.0f); - m_FXSpinLock.Release (); + this->m_FXSpinLock.Acquire (); + this->mixing_console_->getPlateReverb()->diffusion (nValue / 99.0f); + this->m_FXSpinLock.Release (); + break; + case TParameter::ParameterReverbLevel: + nValue=constrain((int)nValue,0,99); + this->m_FXSpinLock.Acquire (); + this->mixing_console_->getPlateReverb()->level (nValue / 99.0f); + this->m_FXSpinLock.Release (); break; - // BEGIN FXChain parameters - #ifdef FXRACK_ENABLE - case ParameterFXChainEnable: - nValue = constrain((int)nValue, 0, 1); + // Reverberator parameters + case TParameter::ParameterFXReverberatorEnable: this->m_FXSpinLock.Acquire(); - this->fx_rack->setEnable(!!nValue); + this->mixing_console_->getReverberator()->setMute(!!!nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainWet: + case TParameter::ParameterFXReverberatorInputGain: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->setWetLevel(nValue / 99.0f); + this->mixing_console_->getReverberator()->setInputGain(nValue / 99.0f); this->m_FXSpinLock.Release(); break; - - // FXChain > Tube parameters - case ParameterFXChainTubeEnable: - nValue = constrain((int)nValue, 0, 1); + case TParameter::ParameterFXReverberatorTime: + nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getTube()->setEnable(!!nValue); + this->mixing_console_->getReverberator()->setTime(nValue / 99.0f); this->m_FXSpinLock.Release(); break; - case ParameterFXChainTubeWet: + case TParameter::ParameterFXReverberatorDiffusion: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getTube()->setWetLevel(nValue / 99.0f); + this->mixing_console_->getReverberator()->setDiffusion(nValue / 99.0f); this->m_FXSpinLock.Release(); break; - case ParameterFXChainTubeOverdrive: + case TParameter::ParameterFXReverberatorLP: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getTube()->setOverdrive(nValue / 99.0f); + this->mixing_console_->getReverberator()->setLP(nValue / 99.0f); this->m_FXSpinLock.Release(); break; - - // FXChain > Chorus parameters - case ParameterFXChainChorusEnable: - nValue = constrain((int)nValue, 0, 1); + + // Tube Send parameters + case TParameter::ParameterFXTube_ChorusSend: + nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getChorus()->setEnable(!!nValue); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Chorus, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainChorusWet: + case TParameter::ParameterFXTube_FlangerSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getChorus()->setWetLevel(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Flanger, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainChorusRate: + case TParameter::ParameterFXTube_OrbitoneSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getChorus()->setRate(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Orbitone, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainChorusDepth: + case TParameter::ParameterFXTube_PhaserSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getChorus()->setDepth(nValue / 9.9f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Phaser, nValue); this->m_FXSpinLock.Release(); break; - - // FXChain > Flanger parameters - case ParameterFXChainFlangerEnable: - nValue = constrain((int)nValue, 0, 1); + case TParameter::ParameterFXTube_DelaySend: + nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getFlanger()->setEnable(!!nValue); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Delay, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainFlangerWet: + case TParameter::ParameterFXTube_PlateReverbSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getFlanger()->setWetLevel(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_PlateReverb, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainFlangerRate: + case TParameter::ParameterFXTube_ReverberatorSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getFlanger()->setRate(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Reverberator, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainFlangerDepth: + case TParameter::ParameterFXTube_MainOutput: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getFlanger()->setDepth(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainFlangerFeedback: + + // Chorus Send parameters + case TParameter::ParameterFXChorus_TubeSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getFlanger()->setFeedback(mapfloat(nValue, 0, 99, 0.0f, 0.97f)); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Tube, nValue); this->m_FXSpinLock.Release(); break; - - // FXChain > Orbitone parameters - case ParameterFXChainOrbitoneEnable: - nValue = constrain((int)nValue, 0, 1); + case TParameter::ParameterFXChorus_FlangerSend: + nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getOrbitone()->setEnable(!!nValue); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Flanger, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainOrbitoneWet: + case TParameter::ParameterFXChorus_OrbitoneSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getOrbitone()->setWetLevel(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Orbitone, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainOrbitoneRate: + case TParameter::ParameterFXChorus_PhaserSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getOrbitone()->setRate(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Phaser, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainOrbitoneDepth: + case TParameter::ParameterFXChorus_DelaySend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getOrbitone()->setDepth(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Delay, nValue); this->m_FXSpinLock.Release(); break; - - // FXChain > Phaser parameters - case ParameterFXChainPhaserEnable: - nValue = constrain((int)nValue, 0, 1); + case TParameter::ParameterFXChorus_PlateReverbSend: + nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getPhaser()->setEnable(!!nValue); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_PlateReverb, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainPhaserWet: + case TParameter::ParameterFXChorus_ReverberatorSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getPhaser()->setWetLevel(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Reverberator, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainPhaserRate: + case TParameter::ParameterFXChorus_MainOutput: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getPhaser()->setRate(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::MainOutput, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainPhaserDepth: + + // Flanger Send parameters + case TParameter::ParameterFXFlanger_TubeSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getPhaser()->setDepth(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Tube, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainPhaserFeedback: + case TParameter::ParameterFXFlanger_ChorusSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getPhaser()->setFeedback(mapfloat(nValue, 0, 99, 0.0f, 0.97f)); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Chorus, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainPhaserNbStages: - nValue = constrain((int)nValue, 2, MAX_NB_PHASES); + case TParameter::ParameterFXFlanger_OrbitoneSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Orbitone, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXFlanger_PhaserSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Phaser, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXFlanger_DelaySend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Delay, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXFlanger_PlateReverbSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_PlateReverb, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXFlanger_ReverberatorSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Reverberator, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXFlanger_MainOutput: + nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getPhaser()->setNbStages(nValue); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::MainOutput, nValue); this->m_FXSpinLock.Release(); break; - // FXChain > Delay parameters - case ParameterFXChainDelayEnable: - nValue = constrain((int)nValue, 0, 1); + // Orbitone Send parameters + case TParameter::ParameterFXOrbitone_TubeSend: + nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getDelay()->setEnable(!!nValue); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Tube, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainDelayWet: + case TParameter::ParameterFXOrbitone_ChorusSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getDelay()->setWetLevel(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Chorus, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainDelayLeftDelayTime: + case TParameter::ParameterFXOrbitone_FlangerSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getDelay()->setLeftDelayTime(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Flanger, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainDelayRightDelayTime: + case TParameter::ParameterFXOrbitone_PhaserSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getDelay()->setRightDelayTime(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Phaser, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainDelayFeedback: + case TParameter::ParameterFXOrbitone_DelaySend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getDelay()->setFeedback(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Delay, nValue); this->m_FXSpinLock.Release(); break; - - // FXChain > ShimmerReverb parameters - case ParameterFXChainShimmerReverbEnable: - nValue = constrain((int)nValue, 0, 1); + case TParameter::ParameterFXOrbitone_PlateReverbSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_PlateReverb, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXOrbitone_ReverberatorSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Reverberator, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXOrbitone_MainOutput: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::MainOutput, nValue); + this->m_FXSpinLock.Release(); + break; + + // Phaser Send parameters + case TParameter::ParameterFXPhaser_TubeSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Tube, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPhaser_ChorusSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Chorus, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPhaser_FlangerSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Flanger, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPhaser_OrbitoneSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Orbitone, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPhaser_DelaySend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Delay, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPhaser_PlateReverbSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_PlateReverb, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPhaser_ReverberatorSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Reverberator, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPhaser_MainOutput: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::MainOutput, nValue); + this->m_FXSpinLock.Release(); + break; + + // Delay Send parameters + case TParameter::ParameterFXDelay_TubeSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Tube, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXDelay_ChorusSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Chorus, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXDelay_FlangerSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Flanger, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXDelay_OrbitoneSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Orbitone, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXDelay_PhaserSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Phaser, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXDelay_PlateReverbSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_PlateReverb, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXDelay_ReverberatorSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Reverberator, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXDelay_MainOutput: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput, nValue); + this->m_FXSpinLock.Release(); + break; + + // Reverb Send parameters + case TParameter::ParameterFXPlateReverb_TubeSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Tube, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPlateReverb_ChorusSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Chorus, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPlateReverb_FlangerSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Flanger, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPlateReverb_OrbitoneSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Orbitone, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPlateReverb_PhaserSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Phaser, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPlateReverb_DelaySend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Delay, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPlateReverb_ReverberatorSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Reverberator, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXPlateReverb_MainOutput: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::MainOutput, nValue); + this->m_FXSpinLock.Release(); + break; + + // Reverberator Send parameters + case TParameter::ParameterFXReverberator_TubeSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Tube, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXReverberator_ChorusSend: + nValue = constrain((int)nValue, 0, 99); + this->m_FXSpinLock.Acquire(); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Chorus, nValue); + this->m_FXSpinLock.Release(); + break; + case TParameter::ParameterFXReverberator_FlangerSend: + nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getReverberator()->setEnable(!!nValue); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Flanger, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainShimmerReverbWet: + case TParameter::ParameterFXReverberator_OrbitoneSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getReverberator()->setWetLevel(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Orbitone, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainShimmerReverbInputGain: + case TParameter::ParameterFXReverberator_PhaserSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getReverberator()->setInputGain(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Phaser, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainShimmerReverbTime: + case TParameter::ParameterFXReverberator_DelaySend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getReverberator()->setTime(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Delay, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainShimmerReverbDiffusion: + case TParameter::ParameterFXReverberator_PlateReverbSend: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getReverberator()->setDiffusion(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_PlateReverb, nValue); this->m_FXSpinLock.Release(); break; - case ParameterFXChainShimmerReverbLP: + case TParameter::ParameterFXReverberator_MainOutput: nValue = constrain((int)nValue, 0, 99); this->m_FXSpinLock.Acquire(); - this->fx_rack->getReverberator()->setLP(nValue / 99.0f); + this->setMixingConsoleFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, nValue); this->m_FXSpinLock.Release(); break; - #endif - // END FXChain parameters + + 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: + nValue=constrain((int)nValue,0,1); + m_FXSpinLock.Acquire (); + reverb->set_bypass (!nValue); + m_FXSpinLock.Release (); + break; + + case TParameter::ParameterReverbSize: + nValue=constrain((int)nValue,0,99); + m_FXSpinLock.Acquire (); + reverb->size (nValue / 99.0f); + m_FXSpinLock.Release (); + break; + + case TParameter::ParameterReverbHighDamp: + nValue=constrain((int)nValue,0,99); + m_FXSpinLock.Acquire (); + reverb->hidamp (nValue / 99.0f); + m_FXSpinLock.Release (); + break; + + case TParameter::ParameterReverbLowDamp: + nValue=constrain((int)nValue,0,99); + m_FXSpinLock.Acquire (); + reverb->lodamp (nValue / 99.0f); + m_FXSpinLock.Release (); + break; + + case TParameter::ParameterReverbLowPass: + nValue=constrain((int)nValue,0,99); + m_FXSpinLock.Acquire (); + reverb->lowpass (nValue / 99.0f); + m_FXSpinLock.Release (); + break; + + case TParameter::ParameterReverbDiffusion: + nValue=constrain((int)nValue,0,99); + m_FXSpinLock.Acquire (); + reverb->diffusion (nValue / 99.0f); + m_FXSpinLock.Release (); + break; + + case TParameter::ParameterReverbLevel: + nValue=constrain((int)nValue,0,99); + m_FXSpinLock.Acquire (); + reverb->level (nValue / 99.0f); + m_FXSpinLock.Release (); + break; + +#endif default: assert (0); @@ -1048,7 +1536,8 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue) int CMiniDexed::GetParameter (TParameter Parameter) { - assert (Parameter < ParameterUnknown); + assert(Parameter < TParameter::ParameterUnknown); + return m_nParameter[Parameter]; } @@ -1058,53 +1547,67 @@ void CMiniDexed::SetTGParameter (TTGParameter Parameter, int nValue, unsigned nT switch (Parameter) { - case TGParameterVoiceBank: BankSelect (nValue, nTG); break; - case TGParameterVoiceBankMSB: BankSelectMSB (nValue, nTG); break; - case TGParameterVoiceBankLSB: BankSelectLSB (nValue, nTG); break; - case TGParameterProgram: ProgramChange (nValue, nTG); break; - case TGParameterVolume: SetVolume (nValue, nTG); break; - case TGParameterPan: SetPan (nValue, nTG); break; - case TGParameterMasterTune: SetMasterTune (nValue, nTG); break; - case TGParameterCutoff: SetCutoff (nValue, nTG); break; - case TGParameterResonance: SetResonance (nValue, nTG); break; - case TGParameterPitchBendRange: setPitchbendRange (nValue, nTG); break; - case TGParameterPitchBendStep: setPitchbendStep (nValue, nTG); break; - case TGParameterPortamentoMode: setPortamentoMode (nValue, nTG); break; - case TGParameterPortamentoGlissando: setPortamentoGlissando (nValue, nTG); break; - case TGParameterPortamentoTime: setPortamentoTime (nValue, nTG); break; - case TGParameterMonoMode: setMonoMode (nValue , nTG); break; + case TTGParameter::TGParameterVoiceBank: this->BankSelect (nValue, nTG); break; + case TTGParameter::TGParameterVoiceBankMSB: this->BankSelectMSB (nValue, nTG); break; + case TTGParameter::TGParameterVoiceBankLSB: this->BankSelectLSB (nValue, nTG); break; + case TTGParameter::TGParameterProgram: this->ProgramChange (nValue, nTG); break; + case TTGParameter::TGParameterVolume: this->SetVolume (nValue, nTG); break; + case TTGParameter::TGParameterPan: this->SetPan (nValue, nTG); break; + case TTGParameter::TGParameterMasterTune: this->SetMasterTune (nValue, nTG); break; + case TTGParameter::TGParameterCutoff: this->SetCutoff (nValue, nTG); break; + case TTGParameter::TGParameterResonance: this->SetResonance (nValue, nTG); break; + case TTGParameter::TGParameterPitchBendRange: this->setPitchbendRange (nValue, nTG); break; + case TTGParameter::TGParameterPitchBendStep: this->setPitchbendStep (nValue, nTG); break; + case TTGParameter::TGParameterPortamentoMode: this->setPortamentoMode (nValue, nTG); break; + case TTGParameter::TGParameterPortamentoGlissando: this->setPortamentoGlissando (nValue, nTG); break; + case TTGParameter::TGParameterPortamentoTime: this->setPortamentoTime (nValue, nTG); break; + case TTGParameter::TGParameterMonoMode: this->setMonoMode (nValue , nTG); break; - case TGParameterMWRange: setModController(0, 0, nValue, nTG); break; - case TGParameterMWPitch: setModController(0, 1, nValue, nTG); break; - case TGParameterMWAmplitude: setModController(0, 2, nValue, nTG); break; - case TGParameterMWEGBias: setModController(0, 3, nValue, nTG); break; + case TTGParameter::TGParameterMWRange: this->setModController(0, 0, nValue, nTG); break; + case TTGParameter::TGParameterMWPitch: this->setModController(0, 1, nValue, nTG); break; + case TTGParameter::TGParameterMWAmplitude: this->setModController(0, 2, nValue, nTG); break; + case TTGParameter::TGParameterMWEGBias: this->setModController(0, 3, nValue, nTG); break; - case TGParameterFCRange: setModController(1, 0, nValue, nTG); break; - case TGParameterFCPitch: setModController(1, 1, nValue, nTG); break; - case TGParameterFCAmplitude: setModController(1, 2, nValue, nTG); break; - case TGParameterFCEGBias: setModController(1, 3, nValue, nTG); break; + case TTGParameter::TGParameterFCRange: this->setModController(1, 0, nValue, nTG); break; + case TTGParameter::TGParameterFCPitch: this->setModController(1, 1, nValue, nTG); break; + case TTGParameter::TGParameterFCAmplitude: this->setModController(1, 2, nValue, nTG); break; + case TTGParameter::TGParameterFCEGBias: this->setModController(1, 3, nValue, nTG); break; - case TGParameterBCRange: setModController(2, 0, nValue, nTG); break; - case TGParameterBCPitch: setModController(2, 1, nValue, nTG); break; - case TGParameterBCAmplitude: setModController(2, 2, nValue, nTG); break; - case TGParameterBCEGBias: setModController(2, 3, nValue, nTG); break; + case TTGParameter::TGParameterBCRange: this->setModController(2, 0, nValue, nTG); break; + case TTGParameter::TGParameterBCPitch: this->setModController(2, 1, nValue, nTG); break; + case TTGParameter::TGParameterBCAmplitude: this->setModController(2, 2, nValue, nTG); break; + case TTGParameter::TGParameterBCEGBias: this->setModController(2, 3, nValue, nTG); break; - case TGParameterATRange: setModController(3, 0, nValue, nTG); break; - case TGParameterATPitch: setModController(3, 1, nValue, nTG); break; - case TGParameterATAmplitude: setModController(3, 2, nValue, nTG); break; - case TGParameterATEGBias: setModController(3, 3, nValue, nTG); break; + case TTGParameter::TGParameterATRange: this->setModController(3, 0, nValue, nTG); break; + case TTGParameter::TGParameterATPitch: this->setModController(3, 1, nValue, nTG); break; + case TTGParameter::TGParameterATAmplitude: this->setModController(3, 2, nValue, nTG); break; + case TTGParameter::TGParameterATEGBias: this->setModController(3, 3, nValue, nTG); break; - case TGParameterMIDIChannel: + case TTGParameter::TGParameterMIDIChannel: assert (0 <= nValue && nValue <= 255); SetMIDIChannel ((uint8_t) nValue, nTG); break; - case TGParameterReverbSend: SetReverbSend (nValue, nTG); break; +#if defined(MIXING_CONSOLE_ENABLE) + case TTGParameter::TGParameterMixingSendFXTube: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Tube, nValue); break; + case TTGParameter::TGParameterMixingSendFXChorus: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Chorus, nValue); break; + case TTGParameter::TGParameterMixingSendFXFlanger: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Flanger, nValue); break; + case TTGParameter::TGParameterMixingSendFXOrbitone: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Orbitone, nValue); break; + case TTGParameter::TGParameterMixingSendFXPhaser: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Phaser, nValue); break; + case TTGParameter::TGParameterMixingSendFXDelay: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Delay, nValue); break; + case TTGParameter::TGParameterMixingSendFXPlateReverb: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_PlateReverb, nValue); break; + case TTGParameter::TGParameterMixingSendFXReverberator: this->setMixingConsoleSendLevel(nTG, MixerOutput::FX_Reverberator, nValue); break; + case TTGParameter::TGParameterMixingSendFXMainOutput: this->setMixingConsoleSendLevel(nTG, MixerOutput::MainOutput, nValue); break; +#elif defined(PLATE_REVERB_ENABLE) + case TTGParameter::TGParameterReverbSend: this->SetReverbSend (nValue, nTG); break; +#endif // MIXING_CONSOLE_ENABLE default: assert (0); break; } + + this->m_UI.ParameterChanged(); } int CMiniDexed::GetTGParameter (TTGParameter Parameter, unsigned nTG) @@ -1113,45 +1616,56 @@ int CMiniDexed::GetTGParameter (TTGParameter Parameter, unsigned nTG) switch (Parameter) { - case TGParameterVoiceBank: return m_nVoiceBankID[nTG]; - case TGParameterVoiceBankMSB: return m_nVoiceBankID[nTG] >> 7; - case TGParameterVoiceBankLSB: return m_nVoiceBankID[nTG] & 0x7F; - case TGParameterProgram: return m_nProgram[nTG]; - case TGParameterVolume: return m_nVolume[nTG]; - case TGParameterPan: return m_nPan[nTG]; - case TGParameterMasterTune: return m_nMasterTune[nTG]; - case TGParameterCutoff: return m_nCutoff[nTG]; - case TGParameterResonance: return m_nResonance[nTG]; - case TGParameterMIDIChannel: return m_nMIDIChannel[nTG]; - case TGParameterReverbSend: return m_nReverbSend[nTG]; - case TGParameterPitchBendRange: return m_nPitchBendRange[nTG]; - case TGParameterPitchBendStep: return m_nPitchBendStep[nTG]; - case TGParameterPortamentoMode: return m_nPortamentoMode[nTG]; - case TGParameterPortamentoGlissando: return m_nPortamentoGlissando[nTG]; - case TGParameterPortamentoTime: return m_nPortamentoTime[nTG]; - case TGParameterMonoMode: return m_bMonoMode[nTG] ? 1 : 0; - - case TGParameterMWRange: return getModController(0, 0, nTG); - case TGParameterMWPitch: return getModController(0, 1, nTG); - case TGParameterMWAmplitude: return getModController(0, 2, nTG); - case TGParameterMWEGBias: return getModController(0, 3, nTG); - - case TGParameterFCRange: return getModController(1, 0, nTG); - case TGParameterFCPitch: return getModController(1, 1, nTG); - case TGParameterFCAmplitude: return getModController(1, 2, nTG); - case TGParameterFCEGBias: return getModController(1, 3, nTG); + case TTGParameter::TGParameterVoiceBank: return m_nVoiceBankID[nTG]; + case TTGParameter::TGParameterVoiceBankMSB: return m_nVoiceBankID[nTG] >> 7; + case TTGParameter::TGParameterVoiceBankLSB: return m_nVoiceBankID[nTG] & 0x7F; + case TTGParameter::TGParameterProgram: return m_nProgram[nTG]; + case TTGParameter::TGParameterVolume: return m_nVolume[nTG]; + case TTGParameter::TGParameterPan: return m_nPan[nTG]; + case TTGParameter::TGParameterMasterTune: return m_nMasterTune[nTG]; + case TTGParameter::TGParameterCutoff: return m_nCutoff[nTG]; + case TTGParameter::TGParameterResonance: return m_nResonance[nTG]; + case TTGParameter::TGParameterMIDIChannel: return m_nMIDIChannel[nTG]; +#if defined(MIXING_CONSOLE_ENABLE) + case TTGParameter::TGParameterMixingSendFXTube: return this->getMixingConsoleSendLevel(nTG, MixerOutput::FX_Tube); + case TTGParameter::TGParameterMixingSendFXChorus: return this->getMixingConsoleSendLevel(nTG, MixerOutput::FX_Chorus); + case TTGParameter::TGParameterMixingSendFXFlanger: return this->getMixingConsoleSendLevel(nTG, MixerOutput::FX_Flanger); + case TTGParameter::TGParameterMixingSendFXOrbitone: return this->getMixingConsoleSendLevel(nTG, MixerOutput::FX_Orbitone); + case TTGParameter::TGParameterMixingSendFXPhaser: return this->getMixingConsoleSendLevel(nTG, MixerOutput::FX_Phaser); + case TTGParameter::TGParameterMixingSendFXDelay: return this->getMixingConsoleSendLevel(nTG, MixerOutput::FX_Delay); + case TTGParameter::TGParameterMixingSendFXPlateReverb: return this->getMixingConsoleSendLevel(nTG, MixerOutput::FX_PlateReverb); + case TTGParameter::TGParameterMixingSendFXReverberator: return this->getMixingConsoleSendLevel(nTG, MixerOutput::FX_Reverberator); + case TTGParameter::TGParameterMixingSendFXMainOutput: return this->getMixingConsoleSendLevel(nTG, MixerOutput::MainOutput); +#elif defined(PLATE_REVERB_ENABLE) + case TTGParameter::TGParameterReverbSend: return m_nReverbSend[nTG]; +#endif + case TTGParameter::TGParameterPitchBendRange: return m_nPitchBendRange[nTG]; + case TTGParameter::TGParameterPitchBendStep: return m_nPitchBendStep[nTG]; + case TTGParameter::TGParameterPortamentoMode: return m_nPortamentoMode[nTG]; + case TTGParameter::TGParameterPortamentoGlissando: return m_nPortamentoGlissando[nTG]; + case TTGParameter::TGParameterPortamentoTime: return m_nPortamentoTime[nTG]; + case TTGParameter::TGParameterMonoMode: return m_bMonoMode[nTG] ? 1 : 0; - case TGParameterBCRange: return getModController(2, 0, nTG); - case TGParameterBCPitch: return getModController(2, 1, nTG); - case TGParameterBCAmplitude: return getModController(2, 2, nTG); - case TGParameterBCEGBias: return getModController(2, 3, nTG); + case TTGParameter::TGParameterMWRange: return getModController(0, 0, nTG); + case TTGParameter::TGParameterMWPitch: return getModController(0, 1, nTG); + case TTGParameter::TGParameterMWAmplitude: return getModController(0, 2, nTG); + case TTGParameter::TGParameterMWEGBias: return getModController(0, 3, nTG); - case TGParameterATRange: return getModController(3, 0, nTG); - case TGParameterATPitch: return getModController(3, 1, nTG); - case TGParameterATAmplitude: return getModController(3, 2, nTG); - case TGParameterATEGBias: return getModController(3, 3, nTG); + case TTGParameter::TGParameterFCRange: return getModController(1, 0, nTG); + case TTGParameter::TGParameterFCPitch: return getModController(1, 1, nTG); + case TTGParameter::TGParameterFCAmplitude: return getModController(1, 2, nTG); + case TTGParameter::TGParameterFCEGBias: return getModController(1, 3, nTG); + case TTGParameter::TGParameterBCRange: return getModController(2, 0, nTG); + case TTGParameter::TGParameterBCPitch: return getModController(2, 1, nTG); + case TTGParameter::TGParameterBCAmplitude: return getModController(2, 2, nTG); + case TTGParameter::TGParameterBCEGBias: return getModController(2, 3, nTG); + case TTGParameter::TGParameterATRange: return getModController(3, 0, nTG); + case TTGParameter::TGParameterATPitch: return getModController(3, 1, nTG); + case TTGParameter::TGParameterATAmplitude: return getModController(3, 2, nTG); + case TTGParameter::TGParameterATEGBias: return getModController(3, 3, nTG); + default: assert (0); return 0; @@ -1289,6 +1803,10 @@ void CMiniDexed::ProcessSound (void) { assert (m_pTG[i]); m_pTG[i]->getSamples (m_OutputLevel[i], nFrames); + +#if defined(MIXING_CONSOLE_ENABLE) + this->mixing_console_->preProcessInputSampleBuffer(i, nFrames); +#endif } // wait for cores 2 and 3 to complete their work @@ -1302,17 +1820,40 @@ void CMiniDexed::ProcessSound (void) // // Audio signal path after tone generators starts here - // + int16_t tmp_int[nFrames * 2]; + +#if defined(MIXING_CONSOLE_ENABLE) + // BEGIN mixing + if(this->nMasterVolume > 0.0f) + { + // temp buffering and channel indexing + float32_t interlacedSampleBuffer[nFrames << 1]; - assert (CConfig::ToneGenerators == 8); + this->m_FXSpinLock.Acquire(); + this->mixing_console_->process(interlacedSampleBuffer); + this->m_FXSpinLock.Release(); + + if(this->nMasterVolume < 1.0f) + { + arm_scale_f32(interlacedSampleBuffer, this->nMasterVolume, interlacedSampleBuffer, nFrames << 1); + } + + // Convert float array (left, right) to single int16 array (left/right) + arm_float_to_q15(interlacedSampleBuffer, tmp_int, nFrames << 1); + } + else // this->nMasterVolume == 0.0f + { + arm_fill_q15(0, tmp_int, nFrames << 1); + } + +#elif defined(PLATE_REVERB_ENABLE) uint8_t indexL=0, indexR=1; // BEGIN TG mixing float32_t tmp_float[nFrames*2]; - int16_t tmp_int[nFrames*2]; - if(nMasterVolume > 0.0) + if(nMasterVolume > 0.0f) { for (uint8_t i = 0; i < CConfig::ToneGenerators; i++) { @@ -1355,19 +1896,6 @@ void CMiniDexed::ProcessSound (void) } // END adding reverb - // BEGIN adding FXRack - #ifdef FXRACK_ENABLE - if(this->fx_rack->isEnable() && this->fx_rack->getWetLevel() > 0.0f) - { - this->m_FXSpinLock.Acquire(); - - this->fx_rack->process(SampleBuffer[indexL], SampleBuffer[indexR], SampleBuffer[indexL], SampleBuffer[indexR], nFrames); - - this->m_FXSpinLock.Release(); - } - #endif - // END adding FXRack - // swap stereo channels if needed prior to writing back out if (m_bChannelsSwapped) { @@ -1393,15 +1921,16 @@ void CMiniDexed::ProcessSound (void) } else arm_fill_q15(0, tmp_int, nFrames * 2); +#endif - if (m_pSoundDevice->Write (tmp_int, sizeof(tmp_int)) != (int) sizeof(tmp_int)) + if(this->m_pSoundDevice->Write(tmp_int, sizeof(tmp_int)) != (int)sizeof(tmp_int)) { LOGERR ("Sound data dropped"); } - if (m_bProfileEnabled) + if(this->m_bProfileEnabled) { - m_GetChunkTimer.Stop (); + this->m_GetChunkTimer.Stop (); } } } @@ -1449,58 +1978,139 @@ bool CMiniDexed::DoSavePerformance (void) m_PerformanceConfig.SetBreathControlTarget (m_nBreathControlTarget[nTG], nTG); m_PerformanceConfig.SetAftertouchRange (m_nAftertouchRange[nTG], nTG); m_PerformanceConfig.SetAftertouchTarget (m_nAftertouchTarget[nTG], nTG); - + +#if defined(MIXING_CONSOLE_ENABLE) + for(size_t fx = 0; fx < MixerOutput::kFXCount; ++fx) + { + this->m_PerformanceConfig.SetTGSendLevel(nTG, static_cast(fx), this->m_nTGSendLevel[nTG][fx]); + } +#endif + +#if defined(PLATE_REVERB_ENABLE) m_PerformanceConfig.SetReverbSend (m_nReverbSend[nTG], nTG); +#endif } - m_PerformanceConfig.SetCompressorEnable (!!m_nParameter[ParameterCompressorEnable]); - m_PerformanceConfig.SetReverbEnable (!!m_nParameter[ParameterReverbEnable]); - m_PerformanceConfig.SetReverbSize (m_nParameter[ParameterReverbSize]); - m_PerformanceConfig.SetReverbHighDamp (m_nParameter[ParameterReverbHighDamp]); - m_PerformanceConfig.SetReverbLowDamp (m_nParameter[ParameterReverbLowDamp]); - m_PerformanceConfig.SetReverbLowPass (m_nParameter[ParameterReverbLowPass]); - m_PerformanceConfig.SetReverbDiffusion (m_nParameter[ParameterReverbDiffusion]); - m_PerformanceConfig.SetReverbLevel (m_nParameter[ParameterReverbLevel]); - - // BEGIN FXRack parameters - #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]); - this->m_PerformanceConfig.SetFXChainTubeWet(this->m_nParameter[ParameterFXChainTubeWet]); - this->m_PerformanceConfig.SetFXChainTubeOverdrive(this->m_nParameter[ParameterFXChainTubeOverdrive]); - this->m_PerformanceConfig.SetFXChainChorusEnable(!!this->m_nParameter[ParameterFXChainChorusEnable]); - this->m_PerformanceConfig.SetFXChainChorusWet(this->m_nParameter[ParameterFXChainChorusWet]); - this->m_PerformanceConfig.SetFXChainChorusRate(this->m_nParameter[ParameterFXChainChorusRate]); - this->m_PerformanceConfig.SetFXChainChorusDepth(this->m_nParameter[ParameterFXChainChorusDepth]); - this->m_PerformanceConfig.SetFXChainFlangerEnable(!!this->m_nParameter[ParameterFXChainFlangerEnable]); - this->m_PerformanceConfig.SetFXChainFlangerWet(this->m_nParameter[ParameterFXChainFlangerWet]); - this->m_PerformanceConfig.SetFXChainFlangerRate(this->m_nParameter[ParameterFXChainFlangerRate]); - this->m_PerformanceConfig.SetFXChainFlangerDepth(this->m_nParameter[ParameterFXChainFlangerDepth]); - this->m_PerformanceConfig.SetFXChainFlangerFeedback(this->m_nParameter[ParameterFXChainFlangerFeedback]); - this->m_PerformanceConfig.SetFXChainOrbitoneEnable(!!this->m_nParameter[ParameterFXChainOrbitoneEnable]); - this->m_PerformanceConfig.SetFXChainOrbitoneWet(this->m_nParameter[ParameterFXChainOrbitoneWet]); - this->m_PerformanceConfig.SetFXChainOrbitoneRate(this->m_nParameter[ParameterFXChainOrbitoneRate]); - this->m_PerformanceConfig.SetFXChainOrbitoneDepth(this->m_nParameter[ParameterFXChainOrbitoneDepth]); - this->m_PerformanceConfig.SetFXChainPhaserEnable(!!this->m_nParameter[ParameterFXChainPhaserEnable]); - this->m_PerformanceConfig.SetFXChainPhaserWet(this->m_nParameter[ParameterFXChainPhaserWet]); - this->m_PerformanceConfig.SetFXChainPhaserRate(this->m_nParameter[ParameterFXChainPhaserRate]); - this->m_PerformanceConfig.SetFXChainPhaserDepth(this->m_nParameter[ParameterFXChainPhaserDepth]); - this->m_PerformanceConfig.SetFXChainPhaserFeedback(this->m_nParameter[ParameterFXChainPhaserFeedback]); - this->m_PerformanceConfig.SetFXChainPhaserNbStages(this->m_nParameter[ParameterFXChainPhaserNbStages]); - this->m_PerformanceConfig.SetFXChainDelayEnable(!!this->m_nParameter[ParameterFXChainDelayEnable]); - this->m_PerformanceConfig.SetFXChainDelayWet(this->m_nParameter[ParameterFXChainDelayWet]); - this->m_PerformanceConfig.SetFXChainDelayLeftDelayTime(this->m_nParameter[ParameterFXChainDelayLeftDelayTime]); - this->m_PerformanceConfig.SetFXChainDelayRightDelayTime(this->m_nParameter[ParameterFXChainDelayRightDelayTime]); - this->m_PerformanceConfig.SetFXChainDelayFeedback(this->m_nParameter[ParameterFXChainDelayFeedback]); - this->m_PerformanceConfig.SetFXChainShimmerReverbEnable(!!this->m_nParameter[ParameterFXChainShimmerReverbEnable]); - this->m_PerformanceConfig.SetFXChainShimmerReverbWet(this->m_nParameter[ParameterFXChainShimmerReverbWet]); - this->m_PerformanceConfig.SetFXChainShimmerReverbInputGain(this->m_nParameter[ParameterFXChainShimmerReverbInputGain]); - this->m_PerformanceConfig.SetFXChainShimmerReverbTime(this->m_nParameter[ParameterFXChainShimmerReverbTime]); - this->m_PerformanceConfig.SetFXChainShimmerReverbDiffusion(this->m_nParameter[ParameterFXChainShimmerReverbDiffusion]); - this->m_PerformanceConfig.SetFXChainShimmerReverbLP(this->m_nParameter[ParameterFXChainShimmerReverbLP]); - #endif - // END FXRack parameters + m_PerformanceConfig.SetCompressorEnable (!!m_nParameter[TParameter::ParameterCompressorEnable]); +#if defined(MIXING_CONSOLE_ENABLE) || defined(PLATE_REVERB_ENABLE) + m_PerformanceConfig.SetReverbEnable (!!m_nParameter[TParameter::ParameterReverbEnable]); + m_PerformanceConfig.SetReverbSize (m_nParameter[TParameter::ParameterReverbSize]); + m_PerformanceConfig.SetReverbHighDamp (m_nParameter[TParameter::ParameterReverbHighDamp]); + m_PerformanceConfig.SetReverbLowDamp (m_nParameter[TParameter::ParameterReverbLowDamp]); + m_PerformanceConfig.SetReverbLowPass (m_nParameter[TParameter::ParameterReverbLowPass]); + m_PerformanceConfig.SetReverbDiffusion (m_nParameter[TParameter::ParameterReverbDiffusion]); + m_PerformanceConfig.SetReverbLevel (m_nParameter[TParameter::ParameterReverbLevel]); +#endif + +#ifdef MIXING_CONSOLE_ENABLE + this->m_PerformanceConfig.SetFXTubeEnable(!!this->m_nParameter[TParameter::ParameterFXTubeEnable]); + this->m_PerformanceConfig.SetFXTubeOverdrive(this->m_nParameter[TParameter::ParameterFXTubeOverdrive]); + + this->m_PerformanceConfig.SetFXChorusEnable(!!this->m_nParameter[TParameter::ParameterFXChorusEnable]); + this->m_PerformanceConfig.SetFXChorusRate(this->m_nParameter[TParameter::ParameterFXChorusRate]); + this->m_PerformanceConfig.SetFXChorusDepth(this->m_nParameter[TParameter::ParameterFXChorusDepth]); + + this->m_PerformanceConfig.SetFXFlangerEnable(!!this->m_nParameter[TParameter::ParameterFXFlangerEnable]); + this->m_PerformanceConfig.SetFXFlangerRate(this->m_nParameter[TParameter::ParameterFXFlangerRate]); + this->m_PerformanceConfig.SetFXFlangerDepth(this->m_nParameter[TParameter::ParameterFXFlangerDepth]); + this->m_PerformanceConfig.SetFXFlangerFeedback(this->m_nParameter[TParameter::ParameterFXFlangerFeedback]); + + this->m_PerformanceConfig.SetFXOrbitoneEnable(!!this->m_nParameter[TParameter::ParameterFXOrbitoneEnable]); + this->m_PerformanceConfig.SetFXOrbitoneRate(this->m_nParameter[TParameter::ParameterFXOrbitoneRate]); + this->m_PerformanceConfig.SetFXOrbitoneDepth(this->m_nParameter[TParameter::ParameterFXOrbitoneDepth]); + + this->m_PerformanceConfig.SetFXPhaserEnable(!!this->m_nParameter[TParameter::ParameterFXPhaserEnable]); + this->m_PerformanceConfig.SetFXPhaserRate(this->m_nParameter[TParameter::ParameterFXPhaserRate]); + this->m_PerformanceConfig.SetFXPhaserDepth(this->m_nParameter[TParameter::ParameterFXPhaserDepth]); + this->m_PerformanceConfig.SetFXPhaserFeedback(this->m_nParameter[TParameter::ParameterFXPhaserFeedback]); + this->m_PerformanceConfig.SetFXPhaserNbStages(this->m_nParameter[TParameter::ParameterFXPhaserNbStages]); + + this->m_PerformanceConfig.SetFXDelayEnable(!!this->m_nParameter[TParameter::ParameterFXDelayEnable]); + this->m_PerformanceConfig.SetFXDelayLeftDelayTime(this->m_nParameter[TParameter::ParameterFXDelayLeftDelayTime]); + this->m_PerformanceConfig.SetFXDelayRightDelayTime(this->m_nParameter[TParameter::ParameterFXDelayRightDelayTime]); + this->m_PerformanceConfig.SetFXDelayFeedback(this->m_nParameter[TParameter::ParameterFXDelayFeedback]); + + this->m_PerformanceConfig.SetFXReverberatorEnable(!!this->m_nParameter[TParameter::ParameterFXReverberatorEnable]); + this->m_PerformanceConfig.SetFXReverberatorInputGain(this->m_nParameter[TParameter::ParameterFXReverberatorInputGain]); + this->m_PerformanceConfig.SetFXReverberatorTime(this->m_nParameter[TParameter::ParameterFXReverberatorTime]); + this->m_PerformanceConfig.SetFXReverberatorDiffusion(this->m_nParameter[TParameter::ParameterFXReverberatorDiffusion]); + this->m_PerformanceConfig.SetFXReverberatorLP(this->m_nParameter[TParameter::ParameterFXReverberatorLP]); + + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Chorus, this->m_nParameter[TParameter::ParameterFXTube_ChorusSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Flanger, this->m_nParameter[TParameter::ParameterFXTube_FlangerSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Orbitone, this->m_nParameter[TParameter::ParameterFXTube_OrbitoneSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Phaser, this->m_nParameter[TParameter::ParameterFXTube_PhaserSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Delay, this->m_nParameter[TParameter::ParameterFXTube_DelaySend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_PlateReverb, this->m_nParameter[TParameter::ParameterFXTube_PlateReverbSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Reverberator, this->m_nParameter[TParameter::ParameterFXTube_ReverberatorSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, this->m_nParameter[TParameter::ParameterFXTube_MainOutput]); + + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Tube, this->m_nParameter[TParameter::ParameterFXChorus_TubeSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Flanger, this->m_nParameter[TParameter::ParameterFXChorus_FlangerSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Orbitone, this->m_nParameter[TParameter::ParameterFXChorus_OrbitoneSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Phaser, this->m_nParameter[TParameter::ParameterFXChorus_PhaserSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Delay, this->m_nParameter[TParameter::ParameterFXChorus_DelaySend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_PlateReverb, this->m_nParameter[TParameter::ParameterFXChorus_PlateReverbSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Reverberator, this->m_nParameter[TParameter::ParameterFXChorus_ReverberatorSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::MainOutput, this->m_nParameter[TParameter::ParameterFXChorus_MainOutput]); + + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Tube, this->m_nParameter[TParameter::ParameterFXFlanger_TubeSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Chorus, this->m_nParameter[TParameter::ParameterFXFlanger_ChorusSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Orbitone, this->m_nParameter[TParameter::ParameterFXFlanger_OrbitoneSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Phaser, this->m_nParameter[TParameter::ParameterFXFlanger_PhaserSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Delay, this->m_nParameter[TParameter::ParameterFXFlanger_DelaySend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_PlateReverb, this->m_nParameter[TParameter::ParameterFXFlanger_PlateReverbSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Reverberator, this->m_nParameter[TParameter::ParameterFXFlanger_ReverberatorSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::MainOutput, this->m_nParameter[TParameter::ParameterFXFlanger_MainOutput]); + + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Tube, this->m_nParameter[TParameter::ParameterFXOrbitone_TubeSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Chorus, this->m_nParameter[TParameter::ParameterFXOrbitone_ChorusSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Flanger, this->m_nParameter[TParameter::ParameterFXOrbitone_FlangerSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Phaser, this->m_nParameter[TParameter::ParameterFXOrbitone_PhaserSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Delay, this->m_nParameter[TParameter::ParameterFXOrbitone_DelaySend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_PlateReverb, this->m_nParameter[TParameter::ParameterFXOrbitone_PlateReverbSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Reverberator, this->m_nParameter[TParameter::ParameterFXOrbitone_ReverberatorSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::MainOutput, this->m_nParameter[TParameter::ParameterFXOrbitone_MainOutput]); + + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Tube, this->m_nParameter[TParameter::ParameterFXPhaser_TubeSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Chorus, this->m_nParameter[TParameter::ParameterFXPhaser_ChorusSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Flanger, this->m_nParameter[TParameter::ParameterFXPhaser_FlangerSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Orbitone, this->m_nParameter[TParameter::ParameterFXPhaser_OrbitoneSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Delay, this->m_nParameter[TParameter::ParameterFXPhaser_DelaySend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_PlateReverb, this->m_nParameter[TParameter::ParameterFXPhaser_PlateReverbSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Reverberator, this->m_nParameter[TParameter::ParameterFXPhaser_ReverberatorSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::MainOutput, this->m_nParameter[TParameter::ParameterFXPhaser_MainOutput]); + + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Tube, this->m_nParameter[TParameter::ParameterFXDelay_TubeSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Chorus, this->m_nParameter[TParameter::ParameterFXDelay_ChorusSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Flanger, this->m_nParameter[TParameter::ParameterFXDelay_FlangerSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Orbitone, this->m_nParameter[TParameter::ParameterFXDelay_OrbitoneSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Phaser, this->m_nParameter[TParameter::ParameterFXDelay_PhaserSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_PlateReverb, this->m_nParameter[TParameter::ParameterFXDelay_PlateReverbSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Reverberator, this->m_nParameter[TParameter::ParameterFXDelay_ReverberatorSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput, this->m_nParameter[TParameter::ParameterFXDelay_MainOutput]); + + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Tube, this->m_nParameter[TParameter::ParameterFXPlateReverb_TubeSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Chorus, this->m_nParameter[TParameter::ParameterFXPlateReverb_ChorusSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Flanger, this->m_nParameter[TParameter::ParameterFXPlateReverb_FlangerSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Orbitone, this->m_nParameter[TParameter::ParameterFXPlateReverb_OrbitoneSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Phaser, this->m_nParameter[TParameter::ParameterFXPlateReverb_PhaserSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Delay, this->m_nParameter[TParameter::ParameterFXPlateReverb_DelaySend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Reverberator, this->m_nParameter[TParameter::ParameterFXPlateReverb_ReverberatorSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::MainOutput, this->m_nParameter[TParameter::ParameterFXPlateReverb_MainOutput]); + + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Tube, this->m_nParameter[TParameter::ParameterFXReverberator_TubeSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Chorus, this->m_nParameter[TParameter::ParameterFXReverberator_ChorusSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Flanger, this->m_nParameter[TParameter::ParameterFXReverberator_FlangerSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Orbitone, this->m_nParameter[TParameter::ParameterFXReverberator_OrbitoneSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Phaser, this->m_nParameter[TParameter::ParameterFXReverberator_PhaserSend]); + this->m_PerformanceConfig.SetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Delay, this->m_nParameter[TParameter::ParameterFXReverberator_DelaySend]); + 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) { @@ -1747,12 +2357,12 @@ void CMiniDexed::getSysExVoiceDump(uint8_t* dest, uint8_t nTG) void CMiniDexed::setMasterVolume (float32_t vol) { - if(vol < 0.0) - vol = 0.0; - else if(vol > 1.0) - vol = 1.0; + this->nMasterVolume = constrain(vol, 0.0f, 1.0f); + + + - nMasterVolume=vol; + } std::string CMiniDexed::GetPerformanceFileName(unsigned nID) @@ -1841,93 +2451,179 @@ bool CMiniDexed::DoSavePerformanceNewFile (void) void CMiniDexed::LoadPerformanceParameters(void) { for (unsigned nTG = 0; nTG < CConfig::ToneGenerators; nTG++) + { + + BankSelect (m_PerformanceConfig.GetBankNumber (nTG), nTG); + ProgramChange (m_PerformanceConfig.GetVoiceNumber (nTG), nTG); + SetMIDIChannel (m_PerformanceConfig.GetMIDIChannel (nTG), nTG); + SetVolume (m_PerformanceConfig.GetVolume (nTG), nTG); + SetPan (m_PerformanceConfig.GetPan (nTG), nTG); + SetMasterTune (m_PerformanceConfig.GetDetune (nTG), nTG); + SetCutoff (m_PerformanceConfig.GetCutoff (nTG), nTG); + SetResonance (m_PerformanceConfig.GetResonance (nTG), nTG); + setPitchbendRange (m_PerformanceConfig.GetPitchBendRange (nTG), nTG); + setPitchbendStep (m_PerformanceConfig.GetPitchBendStep (nTG), nTG); + setPortamentoMode (m_PerformanceConfig.GetPortamentoMode (nTG), nTG); + setPortamentoGlissando (m_PerformanceConfig.GetPortamentoGlissando (nTG), nTG); + setPortamentoTime (m_PerformanceConfig.GetPortamentoTime (nTG), nTG); + + m_nNoteLimitLow[nTG] = m_PerformanceConfig.GetNoteLimitLow (nTG); + m_nNoteLimitHigh[nTG] = m_PerformanceConfig.GetNoteLimitHigh (nTG); + m_nNoteShift[nTG] = m_PerformanceConfig.GetNoteShift (nTG); + + + + + + + + + + + + + + + + + + + + if(m_PerformanceConfig.VoiceDataFilled(nTG)) { + uint8_t* tVoiceData = m_PerformanceConfig.GetVoiceDataFromTxt(nTG); + m_pTG[nTG]->loadVoiceParameters(tVoiceData); + } + setMonoMode(m_PerformanceConfig.GetMonoMode(nTG) ? 1 : 0, nTG); - BankSelect (m_PerformanceConfig.GetBankNumber (nTG), nTG); - ProgramChange (m_PerformanceConfig.GetVoiceNumber (nTG), nTG); - SetMIDIChannel (m_PerformanceConfig.GetMIDIChannel (nTG), nTG); - SetVolume (m_PerformanceConfig.GetVolume (nTG), nTG); - SetPan (m_PerformanceConfig.GetPan (nTG), nTG); - SetMasterTune (m_PerformanceConfig.GetDetune (nTG), nTG); - SetCutoff (m_PerformanceConfig.GetCutoff (nTG), nTG); - SetResonance (m_PerformanceConfig.GetResonance (nTG), nTG); - setPitchbendRange (m_PerformanceConfig.GetPitchBendRange (nTG), nTG); - setPitchbendStep (m_PerformanceConfig.GetPitchBendStep (nTG), nTG); - setPortamentoMode (m_PerformanceConfig.GetPortamentoMode (nTG), nTG); - setPortamentoGlissando (m_PerformanceConfig.GetPortamentoGlissando (nTG), nTG); - setPortamentoTime (m_PerformanceConfig.GetPortamentoTime (nTG), nTG); - - m_nNoteLimitLow[nTG] = m_PerformanceConfig.GetNoteLimitLow (nTG); - m_nNoteLimitHigh[nTG] = m_PerformanceConfig.GetNoteLimitHigh (nTG); - m_nNoteShift[nTG] = m_PerformanceConfig.GetNoteShift (nTG); - - if(m_PerformanceConfig.VoiceDataFilled(nTG)) - { - uint8_t* tVoiceData = m_PerformanceConfig.GetVoiceDataFromTxt(nTG); - m_pTG[nTG]->loadVoiceParameters(tVoiceData); - } - setMonoMode(m_PerformanceConfig.GetMonoMode(nTG) ? 1 : 0, nTG); - SetReverbSend (m_PerformanceConfig.GetReverbSend (nTG), nTG); - - setModWheelRange (m_PerformanceConfig.GetModulationWheelRange (nTG), nTG); - setModWheelTarget (m_PerformanceConfig.GetModulationWheelTarget (nTG), nTG); - setFootControllerRange (m_PerformanceConfig.GetFootControlRange (nTG), nTG); - setFootControllerTarget (m_PerformanceConfig.GetFootControlTarget (nTG), nTG); - setBreathControllerRange (m_PerformanceConfig.GetBreathControlRange (nTG), nTG); - setBreathControllerTarget (m_PerformanceConfig.GetBreathControlTarget (nTG), nTG); - setAftertouchRange (m_PerformanceConfig.GetAftertouchRange (nTG), nTG); - setAftertouchTarget (m_PerformanceConfig.GetAftertouchTarget (nTG), nTG); - - + this->SetParameter(TParameter::ParameterCompressorEnable, this->m_PerformanceConfig.GetCompressorEnable()); +#if defined(MIXING_CONSOLE_ENABLE) + for(size_t fx = 0; fx < MixerOutput::kFXCount; ++fx) + { + this->setMixingConsoleSendLevel(nTG, static_cast(fx), this->m_PerformanceConfig.GetTGSendLevel(nTG, static_cast(fx))); } +#elif defined(PLATE_REVERB_ENABLE) + SetReverbSend (m_PerformanceConfig.GetReverbSend (nTG), nTG); +#endif + + setModWheelRange (m_PerformanceConfig.GetModulationWheelRange (nTG), nTG); + setModWheelTarget (m_PerformanceConfig.GetModulationWheelTarget (nTG), nTG); + setFootControllerRange (m_PerformanceConfig.GetFootControlRange (nTG), nTG); + setFootControllerTarget (m_PerformanceConfig.GetFootControlTarget (nTG), nTG); + setBreathControllerRange (m_PerformanceConfig.GetBreathControlRange (nTG), nTG); + setBreathControllerTarget (m_PerformanceConfig.GetBreathControlTarget (nTG), nTG); + setAftertouchRange (m_PerformanceConfig.GetAftertouchRange (nTG), nTG); + setAftertouchTarget (m_PerformanceConfig.GetAftertouchTarget (nTG), nTG); + } - // Effects - SetParameter (ParameterCompressorEnable, m_PerformanceConfig.GetCompressorEnable () ? 1 : 0); - SetParameter (ParameterReverbEnable, m_PerformanceConfig.GetReverbEnable () ? 1 : 0); - SetParameter (ParameterReverbSize, m_PerformanceConfig.GetReverbSize ()); - SetParameter (ParameterReverbHighDamp, m_PerformanceConfig.GetReverbHighDamp ()); - SetParameter (ParameterReverbLowDamp, m_PerformanceConfig.GetReverbLowDamp ()); - 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(ParameterFXChainFlangerEnable, this->m_PerformanceConfig.GetFXChainFlangerEnable()); - this->SetParameter(ParameterFXChainFlangerWet, this->m_PerformanceConfig.GetFXChainFlangerWet()); - 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(ParameterFXChainOrbitoneRate, this->m_PerformanceConfig.GetFXChainOrbitoneRate()); - this->SetParameter(ParameterFXChainOrbitoneDepth, this->m_PerformanceConfig.GetFXChainOrbitoneDepth()); - this->SetParameter(ParameterFXChainPhaserEnable, this->m_PerformanceConfig.GetFXChainPhaserEnable()); - this->SetParameter(ParameterFXChainPhaserWet, this->m_PerformanceConfig.GetFXChainPhaserWet()); - this->SetParameter(ParameterFXChainPhaserRate, this->m_PerformanceConfig.GetFXChainPhaserRate()); - this->SetParameter(ParameterFXChainPhaserDepth, this->m_PerformanceConfig.GetFXChainPhaserDepth()); - this->SetParameter(ParameterFXChainPhaserFeedback, this->m_PerformanceConfig.GetFXChainPhaserFeedback()); - this->SetParameter(ParameterFXChainPhaserNbStages, this->m_PerformanceConfig.GetFXChainPhaserNbStages()); - this->SetParameter(ParameterFXChainDelayEnable, this->m_PerformanceConfig.GetFXChainDelayEnable()); - this->SetParameter(ParameterFXChainDelayWet, this->m_PerformanceConfig.GetFXChainDelayWet()); - this->SetParameter(ParameterFXChainDelayLeftDelayTime, this->m_PerformanceConfig.GetFXChainDelayLeftDelayTime()); - this->SetParameter(ParameterFXChainDelayRightDelayTime, this->m_PerformanceConfig.GetFXChainDelayRightDelayTime()); - this->SetParameter(ParameterFXChainDelayFeedback, this->m_PerformanceConfig.GetFXChainDelayFeedback()); - this->SetParameter(ParameterFXChainShimmerReverbEnable, this->m_PerformanceConfig.GetFXChainShimmerReverbEnable()); - this->SetParameter(ParameterFXChainShimmerReverbWet, this->m_PerformanceConfig.GetFXChainShimmerReverbWet()); - this->SetParameter(ParameterFXChainShimmerReverbInputGain, this->m_PerformanceConfig.GetFXChainShimmerReverbInputGain()); - this->SetParameter(ParameterFXChainShimmerReverbTime, this->m_PerformanceConfig.GetFXChainShimmerReverbTime()); - this->SetParameter(ParameterFXChainShimmerReverbDiffusion, this->m_PerformanceConfig.GetFXChainShimmerReverbDiffusion()); - this->SetParameter(ParameterFXChainShimmerReverbLP, this->m_PerformanceConfig.GetFXChainShimmerReverbLP()); - #endif +#ifdef MIXING_CONSOLE_ENABLE + this->SetParameter(TParameter::ParameterFXTubeEnable, this->m_PerformanceConfig.GetFXTubeEnable()); + this->SetParameter(TParameter::ParameterFXTubeOverdrive, this->m_PerformanceConfig.GetFXTubeOverdrive()); + + this->SetParameter(TParameter::ParameterFXChorusEnable, this->m_PerformanceConfig.GetFXChorusEnable()); + this->SetParameter(TParameter::ParameterFXChorusRate, this->m_PerformanceConfig.GetFXChorusRate()); + this->SetParameter(TParameter::ParameterFXChorusDepth, this->m_PerformanceConfig.GetFXChorusDepth()); + + this->SetParameter(TParameter::ParameterFXFlangerEnable, this->m_PerformanceConfig.GetFXFlangerEnable()); + this->SetParameter(TParameter::ParameterFXFlangerRate, this->m_PerformanceConfig.GetFXFlangerRate()); + this->SetParameter(TParameter::ParameterFXFlangerDepth, this->m_PerformanceConfig.GetFXFlangerDepth()); + this->SetParameter(TParameter::ParameterFXFlangerFeedback, this->m_PerformanceConfig.GetFXFlangerFeedback()); + + this->SetParameter(TParameter::ParameterFXOrbitoneEnable, this->m_PerformanceConfig.GetFXOrbitoneEnable()); + this->SetParameter(TParameter::ParameterFXOrbitoneRate, this->m_PerformanceConfig.GetFXOrbitoneRate()); + this->SetParameter(TParameter::ParameterFXOrbitoneDepth, this->m_PerformanceConfig.GetFXOrbitoneDepth()); + + this->SetParameter(TParameter::ParameterFXPhaserEnable, this->m_PerformanceConfig.GetFXPhaserEnable()); + this->SetParameter(TParameter::ParameterFXPhaserRate, this->m_PerformanceConfig.GetFXPhaserRate()); + this->SetParameter(TParameter::ParameterFXPhaserDepth, this->m_PerformanceConfig.GetFXPhaserDepth()); + this->SetParameter(TParameter::ParameterFXPhaserFeedback, this->m_PerformanceConfig.GetFXPhaserFeedback()); + this->SetParameter(TParameter::ParameterFXPhaserNbStages, this->m_PerformanceConfig.GetFXPhaserNbStages()); + + this->SetParameter(TParameter::ParameterFXDelayEnable, this->m_PerformanceConfig.GetFXDelayEnable()); + this->SetParameter(TParameter::ParameterFXDelayLeftDelayTime, this->m_PerformanceConfig.GetFXDelayLeftDelayTime()); + this->SetParameter(TParameter::ParameterFXDelayRightDelayTime, this->m_PerformanceConfig.GetFXDelayRightDelayTime()); + this->SetParameter(TParameter::ParameterFXDelayFeedback, this->m_PerformanceConfig.GetFXDelayFeedback()); + + this->SetParameter(TParameter::ParameterFXReverberatorEnable, this->m_PerformanceConfig.GetFXReverberatorEnable()); + this->SetParameter(TParameter::ParameterFXReverberatorInputGain, this->m_PerformanceConfig.GetFXReverberatorInputGain()); + this->SetParameter(TParameter::ParameterFXReverberatorTime, this->m_PerformanceConfig.GetFXReverberatorTime()); + this->SetParameter(TParameter::ParameterFXReverberatorDiffusion, this->m_PerformanceConfig.GetFXReverberatorDiffusion()); + this->SetParameter(TParameter::ParameterFXReverberatorLP, this->m_PerformanceConfig.GetFXReverberatorLP()); + + this->SetParameter(TParameter::ParameterFXTube_ChorusSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Chorus)); + this->SetParameter(TParameter::ParameterFXTube_FlangerSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Flanger)); + this->SetParameter(TParameter::ParameterFXTube_OrbitoneSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Orbitone)); + this->SetParameter(TParameter::ParameterFXTube_PhaserSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Phaser)); + this->SetParameter(TParameter::ParameterFXTube_DelaySend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Delay)); + this->SetParameter(TParameter::ParameterFXTube_PlateReverbSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_PlateReverb)); + this->SetParameter(TParameter::ParameterFXTube_ReverberatorSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Reverberator)); + this->SetParameter(TParameter::ParameterFXTube_MainOutput, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput)); + + this->SetParameter(TParameter::ParameterFXChorus_TubeSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Tube)); + this->SetParameter(TParameter::ParameterFXChorus_FlangerSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Flanger)); + this->SetParameter(TParameter::ParameterFXChorus_OrbitoneSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Orbitone)); + this->SetParameter(TParameter::ParameterFXChorus_PhaserSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Phaser)); + this->SetParameter(TParameter::ParameterFXChorus_DelaySend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Delay)); + this->SetParameter(TParameter::ParameterFXChorus_PlateReverbSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_PlateReverb)); + this->SetParameter(TParameter::ParameterFXChorus_ReverberatorSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Reverberator)); + this->SetParameter(TParameter::ParameterFXChorus_MainOutput, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::MainOutput)); + + this->SetParameter(TParameter::ParameterFXFlanger_TubeSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Tube)); + this->SetParameter(TParameter::ParameterFXFlanger_ChorusSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Chorus)); + this->SetParameter(TParameter::ParameterFXFlanger_OrbitoneSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Orbitone)); + this->SetParameter(TParameter::ParameterFXFlanger_PhaserSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Phaser)); + this->SetParameter(TParameter::ParameterFXFlanger_DelaySend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Delay)); + this->SetParameter(TParameter::ParameterFXFlanger_PlateReverbSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_PlateReverb)); + this->SetParameter(TParameter::ParameterFXFlanger_ReverberatorSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::FX_Reverberator)); + this->SetParameter(TParameter::ParameterFXFlanger_MainOutput, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Flanger, MixerOutput::MainOutput)); + + this->SetParameter(TParameter::ParameterFXOrbitone_TubeSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Tube)); + this->SetParameter(TParameter::ParameterFXOrbitone_ChorusSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Chorus)); + this->SetParameter(TParameter::ParameterFXOrbitone_FlangerSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Flanger)); + this->SetParameter(TParameter::ParameterFXOrbitone_PhaserSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Phaser)); + this->SetParameter(TParameter::ParameterFXOrbitone_DelaySend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Delay)); + this->SetParameter(TParameter::ParameterFXOrbitone_PlateReverbSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_PlateReverb)); + this->SetParameter(TParameter::ParameterFXOrbitone_ReverberatorSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_Reverberator)); + this->SetParameter(TParameter::ParameterFXOrbitone_MainOutput, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::MainOutput)); + + this->SetParameter(TParameter::ParameterFXPhaser_TubeSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Tube)); + this->SetParameter(TParameter::ParameterFXPhaser_ChorusSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Chorus)); + this->SetParameter(TParameter::ParameterFXPhaser_FlangerSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Flanger)); + this->SetParameter(TParameter::ParameterFXPhaser_OrbitoneSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Orbitone)); + this->SetParameter(TParameter::ParameterFXPhaser_DelaySend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Delay)); + this->SetParameter(TParameter::ParameterFXPhaser_PlateReverbSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_PlateReverb)); + this->SetParameter(TParameter::ParameterFXPhaser_ReverberatorSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Reverberator)); + this->SetParameter(TParameter::ParameterFXPhaser_MainOutput, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::MainOutput)); + + this->SetParameter(TParameter::ParameterFXDelay_TubeSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Tube)); + this->SetParameter(TParameter::ParameterFXDelay_ChorusSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Chorus)); + this->SetParameter(TParameter::ParameterFXDelay_FlangerSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Flanger)); + this->SetParameter(TParameter::ParameterFXDelay_OrbitoneSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Orbitone)); + this->SetParameter(TParameter::ParameterFXDelay_PhaserSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Phaser)); + this->SetParameter(TParameter::ParameterFXDelay_PlateReverbSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_PlateReverb)); + this->SetParameter(TParameter::ParameterFXDelay_ReverberatorSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::FX_Reverberator)); + this->SetParameter(TParameter::ParameterFXDelay_MainOutput, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput)); + + this->SetParameter(TParameter::ParameterFXPlateReverb_TubeSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Tube)); + this->SetParameter(TParameter::ParameterFXPlateReverb_ChorusSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Chorus)); + this->SetParameter(TParameter::ParameterFXPlateReverb_FlangerSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Flanger)); + this->SetParameter(TParameter::ParameterFXPlateReverb_OrbitoneSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Orbitone)); + this->SetParameter(TParameter::ParameterFXPlateReverb_PhaserSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Phaser)); + this->SetParameter(TParameter::ParameterFXPlateReverb_DelaySend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Delay)); + this->SetParameter(TParameter::ParameterFXPlateReverb_ReverberatorSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::FX_Reverberator)); + this->SetParameter(TParameter::ParameterFXPlateReverb_MainOutput, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::MainOutput)); + + this->SetParameter(TParameter::ParameterFXReverberator_TubeSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Tube)); + this->SetParameter(TParameter::ParameterFXReverberator_ChorusSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Chorus)); + this->SetParameter(TParameter::ParameterFXReverberator_FlangerSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Flanger)); + this->SetParameter(TParameter::ParameterFXReverberator_OrbitoneSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Orbitone)); + this->SetParameter(TParameter::ParameterFXReverberator_PhaserSend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Phaser)); + this->SetParameter(TParameter::ParameterFXReverberator_DelaySend, this->m_PerformanceConfig.GetFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::FX_Delay)); + 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 } std::string CMiniDexed::GetNewPerformanceDefaultName(void) @@ -2109,5 +2805,4 @@ unsigned CMiniDexed::getModController (unsigned controller, unsigned parameter, return 0; break; } - } diff --git a/src/minidexed.h b/src/minidexed.h index d18035c..ed6e84d 100644 --- a/src/minidexed.h +++ b/src/minidexed.h @@ -45,8 +45,10 @@ #include "effect_platervbstereo.h" #include "effect_compressor.h" -#ifdef ARM_ALLOW_MULTI_CORE -#include "fx_rack.h" +#if defined(MIXING_CONSOLE_ENABLE) +#include "mixing_console.hpp" + +typedef MixingConsole Mixer; #endif class CMiniDexed @@ -55,8 +57,13 @@ class CMiniDexed #endif { public: - CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt, - CGPIOManager *pGPIOManager, CI2CMaster *pI2CMaster, FATFS *pFileSystem); + CMiniDexed( + CConfig *pConfig, + CInterruptSystem *pInterrupt, + CGPIOManager *pGPIOManager, + CI2CMaster *pI2CMaster, + FATFS *pFileSystem + ); bool Initialize (void); @@ -93,7 +100,13 @@ public: void setBreathController (uint8_t value, unsigned nTG); void setAftertouch (uint8_t value, unsigned nTG); +#if defined(MIXING_CONSOLE_ENABLE) + unsigned getMixingConsoleSendLevel(unsigned nTG, MixerOutput fx) const; + void setMixingConsoleSendLevel(unsigned nTG, MixerOutput fx, unsigned nFXSend); + void setMixingConsoleFXSendLevel(MixerOutput fromFX, MixerOutput toFX, unsigned nFXReturn); +#elif defined(PLATE_REVERB_ENABLE) void SetReverbSend (unsigned nReverbSend, unsigned nTG); // 0 .. 127 +#endif void setMonoMode(uint8_t mono, uint8_t nTG); void setPitchbendRange(uint8_t range, uint8_t nTG); @@ -135,6 +148,9 @@ public: enum TParameter { ParameterCompressorEnable, + + #if defined(PLATE_REVERB_ENABLE) || defined(MIXING_CONSOLE_ENABLE) + // Plate Reverb parameters ParameterReverbEnable, ParameterReverbSize, ParameterReverbHighDamp, @@ -142,61 +158,136 @@ public: ParameterReverbLowPass, ParameterReverbDiffusion, ParameterReverbLevel, + #endif + + // BEGIN FX global parameters definition + #if defined(MIXING_CONSOLE_ENABLE) + + // Tube parameters + ParameterFXTubeEnable, + ParameterFXTubeOverdrive, - // BEGIN FXRack global parameters definition - #ifdef FXRACK_ENABLE - // FXChain parameters - ParameterFXChainEnable, - ParameterFXChainWet, - - // FXChain > Tube parameters - ParameterFXChainTubeEnable, - ParameterFXChainTubeWet, - ParameterFXChainTubeOverdrive, - - // FXChain > Chorus parameters - ParameterFXChainChorusEnable, - ParameterFXChainChorusWet, - ParameterFXChainChorusRate, - ParameterFXChainChorusDepth, + // Chorus parameters + ParameterFXChorusEnable, + ParameterFXChorusRate, + ParameterFXChorusDepth, - // FXChain > Flanger parameters - ParameterFXChainFlangerEnable, - ParameterFXChainFlangerWet, - ParameterFXChainFlangerRate, - ParameterFXChainFlangerDepth, - ParameterFXChainFlangerFeedback, - - // FXChain > Orbitone parameters - ParameterFXChainOrbitoneEnable, - ParameterFXChainOrbitoneWet, - ParameterFXChainOrbitoneRate, - ParameterFXChainOrbitoneDepth, - - // FXChain > Phaser parameters - ParameterFXChainPhaserEnable, - ParameterFXChainPhaserWet, - ParameterFXChainPhaserRate, - ParameterFXChainPhaserDepth, - ParameterFXChainPhaserFeedback, - ParameterFXChainPhaserNbStages, - - // FXChain > Delay parameters - ParameterFXChainDelayEnable, - ParameterFXChainDelayWet, - ParameterFXChainDelayLeftDelayTime, - ParameterFXChainDelayRightDelayTime, - ParameterFXChainDelayFeedback, - - // FXChain > ShimmerReverb parameters - ParameterFXChainShimmerReverbEnable, - ParameterFXChainShimmerReverbWet, - ParameterFXChainShimmerReverbInputGain, - ParameterFXChainShimmerReverbTime, - ParameterFXChainShimmerReverbDiffusion, - ParameterFXChainShimmerReverbLP, - #endif - // END FXRack global parameters definition + // Flanger parameters + ParameterFXFlangerEnable, + ParameterFXFlangerRate, + ParameterFXFlangerDepth, + ParameterFXFlangerFeedback, + + // Orbitone parameters + ParameterFXOrbitoneEnable, + ParameterFXOrbitoneRate, + ParameterFXOrbitoneDepth, + + // Phaser parameters + ParameterFXPhaserEnable, + ParameterFXPhaserRate, + ParameterFXPhaserDepth, + ParameterFXPhaserFeedback, + ParameterFXPhaserNbStages, + + // Delay parameters + ParameterFXDelayEnable, + ParameterFXDelayLeftDelayTime, + ParameterFXDelayRightDelayTime, + ParameterFXDelayFeedback, + + // Reverberator parameters + ParameterFXReverberatorEnable, + ParameterFXReverberatorInputGain, + ParameterFXReverberatorTime, + ParameterFXReverberatorDiffusion, + ParameterFXReverberatorLP, + + // Tube Return parameters + ParameterFXTube_ChorusSend, + ParameterFXTube_FlangerSend, + ParameterFXTube_OrbitoneSend, + ParameterFXTube_PhaserSend, + ParameterFXTube_DelaySend, + ParameterFXTube_PlateReverbSend, + ParameterFXTube_ReverberatorSend, + ParameterFXTube_MainOutput, + + // Chorus Return parameters + ParameterFXChorus_TubeSend, + ParameterFXChorus_FlangerSend, + ParameterFXChorus_OrbitoneSend, + ParameterFXChorus_PhaserSend, + ParameterFXChorus_DelaySend, + ParameterFXChorus_PlateReverbSend, + ParameterFXChorus_ReverberatorSend, + ParameterFXChorus_MainOutput, + + // Flanger Return parameters + ParameterFXFlanger_TubeSend, + ParameterFXFlanger_ChorusSend, + ParameterFXFlanger_OrbitoneSend, + ParameterFXFlanger_PhaserSend, + ParameterFXFlanger_DelaySend, + ParameterFXFlanger_PlateReverbSend, + ParameterFXFlanger_ReverberatorSend, + ParameterFXFlanger_MainOutput, + + // Orbitone Return parameters + ParameterFXOrbitone_TubeSend, + ParameterFXOrbitone_ChorusSend, + ParameterFXOrbitone_FlangerSend, + ParameterFXOrbitone_PhaserSend, + ParameterFXOrbitone_DelaySend, + ParameterFXOrbitone_PlateReverbSend, + ParameterFXOrbitone_ReverberatorSend, + ParameterFXOrbitone_MainOutput, + + // Phaser Return parameters + ParameterFXPhaser_TubeSend, + ParameterFXPhaser_ChorusSend, + ParameterFXPhaser_FlangerSend, + ParameterFXPhaser_OrbitoneSend, + ParameterFXPhaser_DelaySend, + ParameterFXPhaser_PlateReverbSend, + ParameterFXPhaser_ReverberatorSend, + ParameterFXPhaser_MainOutput, + + // Delay Return parameters + ParameterFXDelay_TubeSend, + ParameterFXDelay_ChorusSend, + ParameterFXDelay_FlangerSend, + ParameterFXDelay_OrbitoneSend, + ParameterFXDelay_PhaserSend, + ParameterFXDelay_PlateReverbSend, + ParameterFXDelay_ReverberatorSend, + ParameterFXDelay_MainOutput, + + // Plate Reverb Return parameters + ParameterFXPlateReverb_TubeSend, + ParameterFXPlateReverb_ChorusSend, + ParameterFXPlateReverb_FlangerSend, + ParameterFXPlateReverb_OrbitoneSend, + ParameterFXPlateReverb_PhaserSend, + ParameterFXPlateReverb_DelaySend, + ParameterFXPlateReverb_ReverberatorSend, + ParameterFXPlateReverb_MainOutput, + + // Reverberator Return parameters + ParameterFXReverberator_TubeSend, + ParameterFXReverberator_ChorusSend, + ParameterFXReverberator_FlangerSend, + ParameterFXReverberator_OrbitoneSend, + ParameterFXReverberator_PhaserSend, + ParameterFXReverberator_DelaySend, + ParameterFXReverberator_PlateReverbSend, + ParameterFXReverberator_MainOutput, + + // Bypass FX + ParameterFXBypass, + + #endif + // END FX global parameters definition ParameterUnknown }; @@ -223,7 +314,9 @@ public: TGParameterCutoff, TGParameterResonance, TGParameterMIDIChannel, +#if defined(PLATE_REVERB_ENABLE) TGParameterReverbSend, +#endif TGParameterPitchBendRange, TGParameterPitchBendStep, TGParameterPortamentoMode, @@ -251,6 +344,18 @@ public: TGParameterATAmplitude, TGParameterATEGBias, +#if defined(MIXING_CONSOLE_ENABLE) + TGParameterMixingSendFXTube, + TGParameterMixingSendFXChorus, + TGParameterMixingSendFXFlanger, + TGParameterMixingSendFXOrbitone, + TGParameterMixingSendFXPhaser, + TGParameterMixingSendFXDelay, + TGParameterMixingSendFXPlateReverb, + TGParameterMixingSendFXReverberator, + TGParameterMixingSendFXMainOutput, +#endif // MIXING_CONSOLE_ENABLE + TGParameterUnknown }; @@ -322,8 +427,13 @@ private: unsigned m_nNoteLimitHigh[CConfig::ToneGenerators]; int m_nNoteShift[CConfig::ToneGenerators]; +#ifdef MIXING_CONSOLE_ENABLE + 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 + uint8_t m_nRawVoiceData[156]; @@ -352,15 +462,16 @@ private: CPerformanceTimer m_GetChunkTimer; bool m_bProfileEnabled; +#if defined(MIXING_CONSOLE_ENABLE) + Mixer* mixing_console_; +#elif defined(PLATE_REVERB_ENABLE) AudioEffectPlateReverb* reverb; AudioStereoMixer* tg_mixer; AudioStereoMixer* reverb_send_mixer; +#endif CSpinLock m_FXSpinLock; -#ifdef FXRACK_ENABLE - FXRack* fx_rack; -#endif bool m_bSavePerformance; bool m_bSavePerformanceNewFile; diff --git a/src/mixing_console.hpp b/src/mixing_console.hpp new file mode 100644 index 0000000..af679fc --- /dev/null +++ b/src/mixing_console.hpp @@ -0,0 +1,793 @@ +// +// mixing_console.hpp +// +// MiniDexed - Dexed FM synthesizer for bare metal Raspberry Pi +// Author: Vincent Gauché +// Copyright (C) 2022 The MiniDexed Team +// +// 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 . +// + +// Implementation of the MixingConsole class defined in mixing_console.h +#pragma once + +#include "mixing_console_constants.h" +#include "fx_tube.h" +#include "fx_chorus.h" +#include "fx_flanger.h" +#include "fx_orbitone.h" +#include "fx_phaser.h" +#include "fx_delay.h" +#include "effect_platervbstereo.h" +#include "fx_reverberator.h" +#include "fx_dry.h" +#include "fx_unit2.hpp" + +template +class MixingConsole : public FXBase +{ + DISALLOW_COPY_AND_ASSIGN(MixingConsole); + +public: + MixingConsole(float32_t sampling_rate, size_t buffer_size, bool swapStereoImage = false); + ~MixingConsole(); + + 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); + inline void swapStereoImage(bool swap); + inline void setSendLevel(size_t in, MixerOutput fx, float32_t lvl); + inline void setInputSample(size_t in, float32_t sampleL, float32_t sampleR); + inline void setInputSampleBuffer(size_t in, float32_t* samples); + + // Return section + inline void setFXSendLevel(MixerOutput fromFX, MixerOutput toFX, float32_t lvl); + inline void setReturnSample(MixerOutput ret, float32_t sampleL, float32_t sampleR); + + // Get FX + inline FXElement* getFX(size_t fx); + inline FXUnit2* getTube(); + inline FXUnit2* getChorus(); + inline FXUnit2* getFlanger(); + inline FXUnit2* getOrbitone(); + inline FXUnit2* getPhaser(); + inline FXUnit2* getDelay(); + inline FXUnit2* getPlateReverb(); + inline FXUnit2* getReverberator(); + inline FXUnit2* getDry(); + + // Processing + inline void init(); + inline void reset() override; + inline void preProcessInputSampleBuffer(size_t in, size_t nSamples); + inline void injectInputSamples(size_t in, float32_t* samplesL, float32_t* samplesR, size_t nSamples); + inline void processSample(float32_t& outL, float32_t& outR); + void process(float32_t* outL, float32_t* outR); + void process(float32_t* outLR); + +protected: + inline void updatePan(size_t in); + inline void setLevel(size_t in, MixerOutput fx, float32_t lvl); + inline void setSample(size_t in, float32_t sampleL, float32_t sampleR); + +private: + static inline float32_t weighted_sum(const float32_t* data, const float32_t* weights, size_t size); + + const size_t BufferSize; + + bool bypass_; + + float32_t channel_level_[nb_inputs]; + float32_t pan_[StereoChannels::kNumChannels + 1][nb_inputs]; + bool swap_stereo_image_; + float32_t* tg_input_sample_buffer_[nb_inputs]; + float32_t* input_sample_buffer_[StereoChannels::kNumChannels][nb_inputs]; + float32_t input_samples_[StereoChannels::kNumChannels][nb_inputs + MixerOutput::kFXCount - 1]; + float32_t levels_[MixerOutput::kFXCount][nb_inputs + MixerOutput::kFXCount - 1]; + volatile size_t m_nSamples; + + FXElement* fx_[MixerOutput::kFXCount]; + FXUnit2* tube_; + FXUnit2* chorus_; + FXUnit2* flanger_; + FXUnit2* orbitone_; + FXUnit2* phaser_; + FXUnit2* delay_; + FXUnit2* plate_reverb_; + FXUnit2* reverberator_; + FXUnit2* dry_; + + IMPLEMENT_DUMP( + const size_t space = 9; + const size_t precision = 5; + + std::stringstream ss; + + out << "START " << tag << "(" << typeid(*this).name() << ") dump" << std::endl << std::endl; + + out << "\t" << "Input levels & Pan:" << std::endl; + { + SS_RESET(ss, precision, std::left); + SS_SPACE(ss, ' ', space, std::left, '|'); + SS__TEXT(ss, ' ', space, std::left, '|', "Level"); + SS__TEXT(ss, ' ', space, std::left, '|', "Pan L"); + SS__TEXT(ss, ' ', space, std::left, '|', "Pan R"); + SS__TEXT(ss, ' ', space, std::left, '|', "Pan"); + out << "\t" << ss.str() << std::endl; + + SS_RESET(ss, precision, std::left); + SS_SPACE(ss, '-', space, std::left, '+'); + SS_SPACE(ss, '-', space, std::left, '+'); + SS_SPACE(ss, '-', space, std::left, '+'); + SS_SPACE(ss, '-', space, std::left, '+'); + SS_SPACE(ss, '-', space, std::left, '+'); + out << "\t" << ss.str() << std::endl; + + for(size_t i = 0; i < nb_inputs; ++i) + { + std::stringstream s; + s << "* Input "; + s << (i + 1); + + SS_RESET(ss, precision, std::left); + SS__TEXT(ss, ' ', space, std::left, '|', s.str()); + SS__TEXT(ss, ' ', space - 1, std::right, " |", this->channel_level_[i]); + SS__TEXT(ss, ' ', space - 1, std::right, " |", this->pan_[StereoChannels::Left][i]); + SS__TEXT(ss, ' ', space - 1, std::right, " |", this->pan_[StereoChannels::Right][i]); + SS__TEXT(ss, ' ', space - 1, std::right, " |", this->pan_[StereoChannels::kNumChannels][i]); + + out << "\t" << ss.str() << std::endl; + } + } + out << std::endl; + + out << "\t" << "Mixing Console input samples:" << std::endl; + { + SS_RESET(ss, precision, std::left); + SS_SPACE(ss, ' ', space, std::left, '|'); + for(size_t i = 0; i < nb_inputs; ++i) + { + std::stringstream s; + s << "Input "; + s << (i + 1); + + SS__TEXT(ss, ' ', space, std::left, '|', s.str()); + } + for(size_t i = 0; i < (MixerOutput::kFXCount - 1); ++i) + { + std::string s = toString(static_cast(i)); + s.resize(space); + SS__TEXT(ss, ' ', space, std::left, '|', s.c_str()); + } + out << "\t" << ss.str() << std::endl; + + SS_RESET(ss, precision, std::left); + SS_SPACE(ss, '-', space, std::left, '+'); + for(size_t i = 0; i < nb_inputs; ++i) + { + SS_SPACE(ss, '-', space, std::left, '+'); + } + for(size_t i = 0; i < (MixerOutput::kFXCount - 1); ++i) + { + SS_SPACE(ss, '-', space, std::left, '+'); + } + out << "\t" << ss.str() << std::endl; + + const char* LR = "LR"; + for(size_t c = 0; c < StereoChannels::kNumChannels; ++c) + { + std::stringstream s; + s << "* Input "; + s << LR[c]; + + SS_RESET(ss, precision, std::left); + SS__TEXT(ss, ' ', space, std::left, '|', s.str()); + for(size_t i = 0; i < (nb_inputs + MixerOutput::kFXCount - 1); ++i) + { + SS__TEXT(ss, ' ', space - 1, std::right, " |", this->input_samples_[c][i]); + } + out << "\t" << ss.str() << std::endl; + } + } + out << std::endl; + + out << "\t" << "Mixing Console levels:" << std::endl; + { + SS_RESET(ss, precision, std::left); + SS_SPACE(ss, ' ', space, std::left, '|'); + for(size_t i = 0; i < nb_inputs; ++i) + { + std::stringstream s; + s << "Input "; + s << (i + 1); + + SS__TEXT(ss, ' ', space, std::left, '|', s.str()); + } + for(size_t i = 0; i < (MixerOutput::kFXCount - 1); ++i) + { + std::string s = toString(static_cast(i)); + s.resize(space); + SS__TEXT(ss, ' ', space, std::left, '|', s.c_str()); + } + out << "\t" << ss.str() << std::endl; + + SS_RESET(ss, precision, std::left); + SS_SPACE(ss, '-', space, std::left, '+'); + for(size_t i = 0; i < nb_inputs; ++i) + { + SS_SPACE(ss, '-', space, std::left, '+'); + } + for(size_t i = 0; i < (MixerOutput::kFXCount - 1); ++i) + { + SS_SPACE(ss, '-', space, std::left, '+'); + } + out << "\t" << ss.str() << std::endl; + + for(size_t c = 0; c < MixerOutput::kFXCount; ++c) + { + SS_RESET(ss, precision, std::left); + std::string s = toString(static_cast(c)); + s.resize(space); + SS__TEXT(ss, ' ', space, std::left, '|', s.c_str()); + for(size_t i = 0; i < (nb_inputs + MixerOutput::kFXCount - 1); ++i) + { + SS__TEXT(ss, ' ', space - 1, std::right, " |", this->levels_[c][i]); + } + out << "\t" << ss.str() << std::endl; + } + } + out << std::endl; + + if(deepInspection) + { + this->tube_->dump(out, deepInspection, tag + ".tube_"); + this->chorus_->dump(out, deepInspection, tag + ".chorus_"); + this->flanger_->dump(out, deepInspection, tag + ".flanger_"); + this->orbitone_->dump(out, deepInspection, tag + ".orbitone_"); + this->phaser_->dump(out, deepInspection, tag + ".phaser_"); + this->delay_->dump(out, deepInspection, tag + ".delay_"); + this->plate_reverb_->dump(out, deepInspection, tag + ".plate_reverb_"); + this->reverberator_->dump(out, deepInspection, tag + ".reverberator_"); + this->dry_->dump(out, deepInspection, tag + ".dry_"); + } + + out << "END " << tag << "(" << typeid(*this).name() << ") dump" << std::endl << std::endl; + ) + + IMPLEMENT_INSPECT( + size_t nb_errors = 0; + + for(size_t i = 0; i < nb_inputs; ++i) + { + nb_errors += inspector(tag + ".level[ input #" + std::to_string(i) + " ]" , this->channel_level_[i], -1.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".pan[ L ][ input #" + std::to_string(i) + " ]", this->pan_[StereoChannels::Left][i], -1.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".pan[ R ][ input #" + std::to_string(i) + " ]", this->pan_[StereoChannels::Right][i], -1.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".pan[ input #" + std::to_string(i) + " ]", this->pan_[StereoChannels::kNumChannels][i], -1.0f, 1.0f, deepInspection); + } + + for(size_t i = 0; i < nb_inputs; ++i) + { + nb_errors += inspector(tag + ".input[ L ][ input #" + std::to_string(i) + " ]", this->input_samples_[StereoChannels::Left ][i], -1.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".input[ R ][ input #" + std::to_string(i) + " ]", this->input_samples_[StereoChannels::Right][i], -1.0f, 1.0f, deepInspection); + } + + for(size_t i = nb_inputs; i < (nb_inputs + MixerOutput::kFXCount - 1); ++i) + { + nb_errors += inspector(tag + ".input[ L ][ input " + toString(static_cast(i - nb_inputs)) + " ]", this->input_samples_[StereoChannels::Left ][i], -1.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".input[ R ][ input " + toString(static_cast(i - nb_inputs)) + " ]", this->input_samples_[StereoChannels::Right][i], -1.0f, 1.0f, deepInspection); + } + + for(size_t c = 0; c < MixerOutput::kFXCount; ++c) + { + for(size_t i = 0; i < (nb_inputs + MixerOutput::kFXCount - 1); ++i) + { + nb_errors += inspector(tag + ".levels[ " + std::to_string(c) + " ][ " + std::to_string(i) + " ]", this->levels_[c][i], -1.0f, 1.0f, deepInspection); + } + } + + if(deepInspection) + { + for(size_t i = 0; i < nb_inputs; ++i) + { + for(size_t k = 0; k < this->m_nSamples; ++k) + { + nb_errors += inspector(tag + ".input_sample_buffer_[ L ][ " + std::to_string(i) + " ][ " + std::to_string(k) +" ] ", this->input_sample_buffer_[StereoChannels::Left ][i][k], -1.0f, 1.0f, deepInspection); + nb_errors += inspector(tag + ".input_sample_buffer_[ R ][ " + std::to_string(i) + " ][ " + std::to_string(k) +" ] ", this->input_sample_buffer_[StereoChannels::Right][i][k], -1.0f, 1.0f, deepInspection); + } + } + + nb_errors += this->tube_->inspect(inspector, deepInspection, tag + ".tube_"); + nb_errors += this->chorus_->inspect(inspector, deepInspection, tag + ".chorus_"); + nb_errors += this->flanger_->inspect(inspector, deepInspection, tag + ".flanger_"); + nb_errors += this->orbitone_->inspect(inspector, deepInspection, tag + ".orbitone_"); + nb_errors += this->phaser_->inspect(inspector, deepInspection, tag + ".phaser_"); + nb_errors += this->delay_->inspect(inspector, deepInspection, tag + ".delay_"); + nb_errors += this->plate_reverb_->inspect(inspector, deepInspection, tag + ".plate_reverb_"); + nb_errors += this->reverberator_->inspect(inspector, deepInspection, tag + ".reverberator_"); + nb_errors += this->dry_->inspect(inspector, deepInspection, tag + ".dry_"); + } + + return nb_errors; + ) +}; + +template +float32_t MixingConsole::weighted_sum(const float32_t* data, const float32_t* weights, size_t size) +{ + float32_t res = arm_weighted_sum_f32(data, weights, size); + + return std::isnan(res) ? 0.0f : res; +} + +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) +{ + for(size_t i = 0; i < nb_inputs; ++i) + { + this->tg_input_sample_buffer_[i] = nullptr; + this->input_sample_buffer_[StereoChannels::Left ][i] = new float32_t[this->BufferSize]; + this->input_sample_buffer_[StereoChannels::Right][i] = new float32_t[this->BufferSize]; + memset(this->input_sample_buffer_[StereoChannels::Left ][i], 0, sizeof(float32_t) * this->BufferSize); + memset(this->input_sample_buffer_[StereoChannels::Right][i], 0, sizeof(float32_t) * this->BufferSize); + } + + this->fx_[MixerOutput::FX_Tube] = this->tube_ = new FXUnit2(sampling_rate); + this->fx_[MixerOutput::FX_Chorus] = this->chorus_ = new FXUnit2(sampling_rate); + this->fx_[MixerOutput::FX_Flanger] = this->flanger_ = new FXUnit2(sampling_rate); + this->fx_[MixerOutput::FX_Orbitone] = this->orbitone_ = new FXUnit2(sampling_rate); + this->fx_[MixerOutput::FX_Phaser] = this->phaser_ = new FXUnit2(sampling_rate); + this->fx_[MixerOutput::FX_Delay] = this->delay_ = new FXUnit2(sampling_rate); + this->fx_[MixerOutput::FX_PlateReverb] = this->plate_reverb_ = new FXUnit2(sampling_rate); + 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(); +} + +template +MixingConsole::~MixingConsole() +{ + for(size_t i = 0; i < MixerOutput::kFXCount; ++i) + { + delete this->fx_[i]; + } + + for(size_t i = 0; i < nb_inputs; ++i) + { + delete[] this->input_sample_buffer_[StereoChannels::Left ][i]; + delete[] this->input_sample_buffer_[StereoChannels::Right][i]; + + // The tg_input_sample_buffer_ buffers are not freed as MixingConsole is not the creator + // They must be freed by the creator of the buffers + this->tg_input_sample_buffer_[i] = nullptr; + } +} + +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 +{ + return nb_inputs; +} + +// Send section +template +void MixingConsole::setChannelLevel(size_t in, float32_t lvl) +{ + assert(in < nb_inputs); + + lvl = constrain(lvl, 0.0f, 1.0f); + if(lvl == this->channel_level_[in]) return; + + this->channel_level_[in] = lvl; + this->updatePan(in); +} + +template +void MixingConsole::setPan(size_t in, float32_t pan) +{ + assert(in < nb_inputs); + + pan = constrain(pan, 0.0f, 1.0f); + + if(pan == this->pan_[StereoChannels::kNumChannels][in]) return; + + this->pan_[StereoChannels::kNumChannels][in] = pan; + this->updatePan(in); +} + +template +void MixingConsole::swapStereoImage(bool swap) +{ + this->swap_stereo_image_ = swap; +} + +template +void MixingConsole::setSendLevel(size_t in, MixerOutput fx, float32_t lvl) +{ + assert(in < nb_inputs); + assert(fx < MixerOutput::kFXCount); + + this->setLevel(in, fx, lvl); +} + +template +void MixingConsole::setInputSample(size_t in, float32_t sampleL, float32_t sampleR) +{ + assert(in < nb_inputs); + + this->setSample(in, sampleL, sampleR); +} + +template +void MixingConsole::setInputSampleBuffer(size_t in, float32_t* samples) +{ + assert(in < nb_inputs); + + this->tg_input_sample_buffer_[in] = samples; +} + +// Return section +template +void MixingConsole::setFXSendLevel(MixerOutput fromFX, MixerOutput toFX, float32_t lvl) +{ + assert(fromFX < (MixerOutput::kFXCount - 1)); + assert(toFX < MixerOutput::kFXCount); + + if(fromFX == toFX) + { + // An FX cannot feedback on itself + return; + } + + this->setLevel(nb_inputs + fromFX, toFX, lvl); +} + +template +void MixingConsole::setReturnSample(MixerOutput ret, float32_t sampleL, float32_t sampleR) +{ + assert(ret < (MixerOutput::kFXCount - 1)); + + this->setSample(nb_inputs + ret, sampleL, sampleR); +} + +// Get FX +template +FXElement* MixingConsole::getFX(size_t fx) +{ + assert(fx < MixerOutput::kFXCount); + return this->fx_[fx]; +} + +template +FXUnit2* MixingConsole::getTube() +{ + return this->tube_; +} + +template +FXUnit2* MixingConsole::getChorus() +{ + return this->chorus_; +} + +template +FXUnit2* MixingConsole::getFlanger() +{ + return this->flanger_; +} + +template +FXUnit2* MixingConsole::getOrbitone() +{ + return this->orbitone_; +} + +template +FXUnit2* MixingConsole::getPhaser() +{ + return this->phaser_; +} + +template +FXUnit2* MixingConsole::getDelay() +{ + return this->delay_; +} + +template +FXUnit2* MixingConsole::getPlateReverb() +{ + return this->plate_reverb_; +} + +template +FXUnit2* MixingConsole::getReverberator() +{ + return this->reverberator_; +} + +template +FXUnit2* MixingConsole::getDry() +{ + return this->dry_; +} + +// Processing +template +void MixingConsole::init() +{ + memset(this->channel_level_, 0, nb_inputs * sizeof(float32_t)); + for(size_t i = 0; i <= StereoChannels::kNumChannels; ++i) memset(this->pan_[i], 0, nb_inputs * sizeof(float32_t)); + + for(size_t i = 0; i < MixerOutput::kFXCount; ++i) + memset(this->levels_[i], 0, (nb_inputs + MixerOutput::kFXCount - 1) * sizeof(float32_t)); + + for(size_t i = 0; i < StereoChannels::kNumChannels; ++i) + memset(this->input_samples_[i], 0, (nb_inputs + MixerOutput::kFXCount - 1) * sizeof(float32_t)); + + this->reset(); +} + +template +void MixingConsole::reset() +{ + for(size_t i = 0; i < nb_inputs; ++i) + { + memset(this->input_sample_buffer_[StereoChannels::Left ][i], 0, this->BufferSize * sizeof(float32_t)); + memset(this->input_sample_buffer_[StereoChannels::Right][i], 0, this->BufferSize * sizeof(float32_t)); + } + + for(size_t i = 0; i < MixerOutput::kFXCount; ++i) + { + this->fx_[i]->reset(); + + if(i != MixerOutput::MainOutput) + { + this->setReturnSample(static_cast(i), 0.0f, 0.0f); + } + } +} + +template +void MixingConsole::injectInputSamples(size_t in, float32_t* samplesL, float32_t* samplesR, size_t nSamples) +{ + // Only used to input stereo samples + assert(in < nb_inputs); + this->m_nSamples = std::min(nSamples, this->BufferSize); + if(samplesL != nullptr) + { + memcpy(this->input_sample_buffer_[StereoChannels::Left ][in], samplesL, this->m_nSamples * sizeof(float32_t)); + } + else + { + memset(this->input_sample_buffer_[StereoChannels::Left ][in], 0, this->m_nSamples * sizeof(float32_t)); + } + + if(samplesR != nullptr) + { + memcpy(this->input_sample_buffer_[StereoChannels::Right][in], samplesR, this->m_nSamples * sizeof(float32_t)); + } + else + { + memset(this->input_sample_buffer_[StereoChannels::Right][in], 0, this->m_nSamples * sizeof(float32_t)); + } +} + +template +void MixingConsole::preProcessInputSampleBuffer(size_t in, size_t nSamples) +{ + assert(in < nb_inputs); + assert(nSamples <= this->BufferSize); + + float32_t* samples = this->tg_input_sample_buffer_[in]; + if(samples == nullptr) return; + + this->m_nSamples = nSamples; + if(nSamples > 0) + { + if(this->pan_[StereoChannels::Left ][in] != 0.0f) + { + arm_scale_f32(samples, this->pan_[StereoChannels::Left ][in], this->input_sample_buffer_[StereoChannels::Left ][in], nSamples); + } + else + { + memset(this->input_sample_buffer_[StereoChannels::Left ][in], 0, nSamples * sizeof(float32_t)); + } + + if(this->pan_[StereoChannels::Right][in] != 0.0f) + { + arm_scale_f32(samples, this->pan_[StereoChannels::Right][in], this->input_sample_buffer_[StereoChannels::Right][in], nSamples); + } + else + { + memset(this->input_sample_buffer_[StereoChannels::Right][in], 0, nSamples * sizeof(float32_t)); + } + } + else + { + memset(this->input_sample_buffer_[StereoChannels::Left ][in], 0, this->BufferSize * sizeof(float32_t)); + memset(this->input_sample_buffer_[StereoChannels::Right][in], 0, this->BufferSize * sizeof(float32_t)); + } +} + +template +void MixingConsole::processSample(float32_t& outL, float32_t& outR) +{ + const size_t nBuffers = nb_inputs + MixerOutput::kFXCount - 1; + + float32_t fx_input_[StereoChannels::kNumChannels]; + float32_t fx_output_[StereoChannels::kNumChannels]; + for(size_t fxId = 0; fxId < MixerOutput::kFXCount; ++fxId) + { + // Compute the samples that will feed the FX + fx_input_[StereoChannels::Left ] = MixingConsole::weighted_sum(this->input_samples_[StereoChannels::Left ], this->levels_[fxId], nBuffers); + fx_input_[StereoChannels::Right] = MixingConsole::weighted_sum(this->input_samples_[StereoChannels::Right], this->levels_[fxId], nBuffers); + + // Process the FX + this->fx_[fxId]->processSample( + fx_input_[StereoChannels::Left ], + fx_input_[StereoChannels::Right], + fx_output_[StereoChannels::Left ], + fx_output_[StereoChannels::Right] + ); + + if(fxId != MixerOutput::MainOutput) + { + // Feedback the processed samples except for the main output + this->setReturnSample( + static_cast(fxId), + fx_output_[StereoChannels::Left], + fx_output_[StereoChannels::Right] + ); + } + else + { + // Returns the main output sample + outL = fx_output_[StereoChannels::Left]; + outR = fx_output_[StereoChannels::Right]; + } + } +} + +template +void MixingConsole::process(float32_t* outL, float32_t* outR) +{ + size_t nSamples = this->m_nSamples; + for(size_t s = 0; s < nSamples; ++s) + { + for(size_t in = 0; in < nb_inputs; ++in) + { + this->setSample( + in, + this->input_sample_buffer_[StereoChannels::Left ][in][s], + this->input_sample_buffer_[StereoChannels::Right][in][s] + ); + } + + if(this->swap_stereo_image_) + { + this->processSample(*outR, *outL); + } + else + { + this->processSample(*outL, *outR); + } + + ++outL; + ++outR; + } + + this->m_nSamples = 0; +} + +template +void MixingConsole::process(float32_t* outLR) +{ + size_t nSamples = this->m_nSamples; + for(size_t s = 0; s < nSamples; ++s) + { + for(size_t in = 0; in < nb_inputs; ++in) + { + this->setSample( + in, + this->input_sample_buffer_[StereoChannels::Left ][in][s], + this->input_sample_buffer_[StereoChannels::Right][in][s] + ); + } + + if(this->swap_stereo_image_) + { + this->processSample(*(outLR + 1), *outLR); + } + else + { + this->processSample(*outLR, *(outLR + 1)); + + } + + outLR += 2; + } + + this->m_nSamples = 0; +} + +template +void MixingConsole::updatePan(size_t in) +{ + float32_t pan = this->pan_[StereoChannels::kNumChannels][in] * Constants::MPI_2; + if(this->channel_level_[in] != 0.0f) + { + this->pan_[StereoChannels::Left ][in] = InterpolatedSineOscillator::Cos(pan) * this->channel_level_[in]; + this->pan_[StereoChannels::Right][in] = InterpolatedSineOscillator::Sin(pan) * this->channel_level_[in]; + } + else + { + this->pan_[StereoChannels::Left ][in] = + this->pan_[StereoChannels::Right][in] = 0.0f; + } +} + +template +void MixingConsole::setLevel(size_t in, MixerOutput fx, float32_t lvl) +{ + assert(in < (nb_inputs + MixerOutput::kFXCount - 1)); + assert(fx < MixerOutput::kFXCount); + + this->levels_[fx][in] = constrain(lvl, 0.0f, 1.0f); +} + +template +void MixingConsole::setSample(size_t in, float32_t sampleL, float32_t sampleR) +{ + assert(in < (nb_inputs + MixerOutput::kFXCount - 1)); + this->input_samples_[StereoChannels::Left ][in] = sampleL; + this->input_samples_[StereoChannels::Right][in] = sampleR; +} diff --git a/src/mixing_console_constants.h b/src/mixing_console_constants.h new file mode 100644 index 0000000..0257733 --- /dev/null +++ b/src/mixing_console_constants.h @@ -0,0 +1,58 @@ +#pragma once + +#include "extra_features.h" + +#include +#include +#include + +enum MixerOutput +{ + OutputStart = 0, + FX_Tube = 0, + FX_Chorus, + FX_Flanger, + FX_Orbitone, + FX_Phaser, + FX_Delay, + FX_PlateReverb, + FX_Reverberator, + MainOutput, + kFXCount +}; + +inline std::string toString(MixerOutput enum_val) +{ + static const std::array names + { + "Tube", + "Chorus", + "Flanger", + "Orbitone", + "Phaser", + "Delay", + "PlateReverb", + "Reverberator", + "MainOutput" + }; + static_assert(names.size() == MixerOutput::kFXCount, "Enum MixerOutput and string array size mismatch"); + + return std::string(names[static_cast(enum_val)]); +} + +#define TO_INDEX_CHECK(str, fx) if(std::strcmp(str, toString(fx).c_str()) == 0) return fx; + +inline MixerOutput toIndex(const char* str) +{ + TO_INDEX_CHECK(str, MixerOutput::FX_Tube); + TO_INDEX_CHECK(str, MixerOutput::FX_Chorus); + TO_INDEX_CHECK(str, MixerOutput::FX_Flanger); + TO_INDEX_CHECK(str, MixerOutput::FX_Orbitone); + TO_INDEX_CHECK(str, MixerOutput::FX_Phaser); + TO_INDEX_CHECK(str, MixerOutput::FX_Delay); + TO_INDEX_CHECK(str, MixerOutput::FX_PlateReverb); + TO_INDEX_CHECK(str, MixerOutput::FX_Reverberator); + TO_INDEX_CHECK(str, MixerOutput::MainOutput); + + throw std::invalid_argument("Invalid MixerOutput string"); +} diff --git a/src/performance.ini b/src/performance.ini index 7a61480..78a5cba 100644 --- a/src/performance.ini +++ b/src/performance.ini @@ -275,6 +275,7 @@ AftertouchTarget8=0 # Effects CompressorEnable=1 + ReverbEnable=1 ReverbSize=70 ReverbHighDamp=50 @@ -283,39 +284,190 @@ ReverbLowPass=30 ReverbDiffusion=65 ReverbLevel=99 -# FXRack -FXChainEnable=1 -FXChainWet=99 -FXChainTubeEnable=0 -FXChainTubeWet=50 -FXChainTubeOverdrive=10 -FXChainChorusEnable=0 -FXChainChorusWet=50 -FXChainChorusRate=40 -FXChainChorusDepth=50 -FXChainFlangerEnable=0 -FXChainFlangerWet=50 -FXChainFlangerRate=3 -FXChainFlangerDepth=75 -FXChainFlangerFeedback=50 -FXChainOrbitoneEnable=0 -FXChainOrbitoneWet=80 -FXChainOrbitoneRate=40 -FXChainOrbitoneDepth=50 -FXChainPhaserEnable=0 -FXChainPhaserWet=50 -FXChainPhaserRate=5 -FXChainPhaserDepth=99 -FXChainPhaserFeedback=70 -FXChainPhaserNbStages=12 -FXChainDelayEnable=0 -FXChainDelayWet=50 -FXChainDelayLeftDelayTime=15 -FXChainDelayRightDelayTime=22 -FXChainDelayFeedback=35 -FXChainShimmerReverbEnable=1 -FXChainShimmerReverbWet=70 -FXChainShimmerReverbInputGain=55 -FXChainShimmerReverbTime=75 -FXChainShimmerReverbDiffusion=75 -FXChainShimmerReverbLP=80 +# Mixing Console +FXTubeEnable=1 +FXTubeOverdrive=10 + +FXChorusEnable=1 +FXChorusRate=40 +FXChorusDepth=50 + +FXFlangerEnable=1 +FXFlangerRate=3 +FXFlangerDepth=75 +FXFlangerFeedback=50 + +FXOrbitoneEnable=1 +FXOrbitoneRate=40 +FXOrbitoneDepth=50 + +FXPhaserEnable=1 +FXPhaserRate=5 +FXPhaserDepth=99 +FXPhaserFeedback=70 +FXPhaserNbStages=12 + +FXDelayEnable=1 +FXDelayLeftDelayTime=15 +FXDelayRightDelayTime=22 +FXDelayFeedback=35 +FXDelayFlutterRate=0 +FXDelayFlutterAmount=0 + +FXReverberatorEnable=1 +FXReverberatorInputGain=55 +FXReverberatorTime=75 +FXReverberatorDiffusion=75 +FXReverberatorLP=80 + +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 cdc52bf..574a664 100644 --- a/src/performanceconfig.cpp +++ b/src/performanceconfig.cpp @@ -102,9 +102,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); @@ -150,54 +152,90 @@ 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; - m_bReverbEnable = m_Properties.GetNumber ("ReverbEnable", 1) != 0; - m_nReverbSize = m_Properties.GetNumber ("ReverbSize", 70); - m_nReverbHighDamp = m_Properties.GetNumber ("ReverbHighDamp", 50); - m_nReverbLowDamp = m_Properties.GetNumber ("ReverbLowDamp", 50); - m_nReverbLowPass = m_Properties.GetNumber ("ReverbLowPass", 30); - m_nReverbDiffusion = m_Properties.GetNumber ("ReverbDiffusion", 65); - m_nReverbLevel = m_Properties.GetNumber ("ReverbLevel", 99); - -#ifdef ARM_ALLOW_MULTI_CORE - this->m_bFXChainEnable = this->m_Properties.GetNumber("FXChainEnable", 1); - this->m_nFXChainWet = this->m_Properties.GetNumber("FXChainWet", 99); - this->m_bFXChainTubeEnable = this->m_Properties.GetNumber("FXChainTubeEnable", 1); - this->m_nFXChainTubeWet = this->m_Properties.GetNumber("FXChainTubeWet", 50); - this->m_nFXChainTubeOverdrive = this->m_Properties.GetNumber("FXChainTubeOverdrive", 10); - this->m_bFXChainChorusEnable = this->m_Properties.GetNumber("FXChainChorusEnable", 1); - this->m_nFXChainChorusWet = this->m_Properties.GetNumber("FXChainChorusWet", 50); - this->m_nFXChainChorusRate = this->m_Properties.GetNumber("FXChainChorusRate", 50); - this->m_nFXChainChorusDepth = this->m_Properties.GetNumber("FXChainChorusDepth", 50); - this->m_bFXChainFlangerEnable = this->m_Properties.GetNumber("FXChainFlangerEnable", 1); - this->m_nFXChainFlangerWet = this->m_Properties.GetNumber("FXChainFlangerWet", 50); - this->m_nFXChainFlangerRate = this->m_Properties.GetNumber("FXChainFlangerRate", 15); - this->m_nFXChainFlangerDepth = this->m_Properties.GetNumber("FXChainFlangerDepth", 10); - this->m_nFXChainFlangerFeedback = this->m_Properties.GetNumber("FXChainFlangerFeedback", 20); - this->m_bFXChainOrbitoneEnable = this->m_Properties.GetNumber("FXChainOrbitoneEnable", 1); - this->m_nFXChainOrbitoneWet = this->m_Properties.GetNumber("FXChainOrbitoneWet", 80); - this->m_nFXChainOrbitoneRate = this->m_Properties.GetNumber("FXChainOrbitoneRate", 40); - this->m_nFXChainOrbitoneDepth = this->m_Properties.GetNumber("FXChainOrbitoneDepth", 50); - this->m_bFXChainPhaserEnable = this->m_Properties.GetNumber("FXChainPhaserEnable", 1); - this->m_nFXChainPhaserWet = this->m_Properties.GetNumber("FXChainPhaserWet", 50); - this->m_nFXChainPhaserRate = this->m_Properties.GetNumber("FXChainPhaserRate", 5); - this->m_nFXChainPhaserDepth = this->m_Properties.GetNumber("FXChainPhaserDepth", 99); - this->m_nFXChainPhaserFeedback = this->m_Properties.GetNumber("FXChainPhaserFeedback", 50); - this->m_nFXChainPhaserNbStages = this->m_Properties.GetNumber("FXChainPhaserNbStages", 12); - this->m_bFXChainDelayEnable = this->m_Properties.GetNumber("FXChainDelayEnable", 1); - this->m_nFXChainDelayWet = this->m_Properties.GetNumber("FXChainDelayWet", 50); - this->m_nFXChainDelayLeftDelayTime = this->m_Properties.GetNumber("FXChainDelayLeftDelayTime", 15); - this->m_nFXChainDelayRightDelayTime = this->m_Properties.GetNumber("FXChainDelayRightDelayTime", 22); - this->m_nFXChainDelayFeedback = this->m_Properties.GetNumber("FXChainDelayFeedback", 35); - this->m_bFXChainShimmerReverbEnable = this->m_Properties.GetNumber("FXChainShimmerReverbEnable", 1); - this->m_nFXChainShimmerReverbWet = this->m_Properties.GetNumber("FXChainShimmerReverbWet", 70); - this->m_nFXChainShimmerReverbInputGain = this->m_Properties.GetNumber("FXChainShimmerReverbInputGain", 30); - this->m_nFXChainShimmerReverbTime = this->m_Properties.GetNumber("FXChainShimmerReverbTime", 30); - this->m_nFXChainShimmerReverbDiffusion = this->m_Properties.GetNumber("FXChainShimmerReverbDiffusion", 30); - this->m_nFXChainShimmerReverbLP = this->m_Properties.GetNumber("FXChainShimmerReverbLP", 99); +#if defined(PLATE_REVERB_ENABLE) || defined(MIXING_CONSOLE_ENABLE) + this->m_bReverbEnable = this->m_Properties.GetNumber ("ReverbEnable", 1) != 0; + this->m_nReverbSize = this->m_Properties.GetNumber ("ReverbSize", 70); + this->m_nReverbHighDamp = this->m_Properties.GetNumber ("ReverbHighDamp", 50); + this->m_nReverbLowDamp = this->m_Properties.GetNumber ("ReverbLowDamp", 50); + this->m_nReverbLowPass = this->m_Properties.GetNumber ("ReverbLowPass", 30); + this->m_nReverbDiffusion = this->m_Properties.GetNumber ("ReverbDiffusion", 65); + this->m_nReverbLevel = this->m_Properties.GetNumber ("ReverbLevel", 99); +#endif + +#if defined(MIXING_CONSOLE_ENABLE) + this->m_bFXTubeEnable = this->m_Properties.GetNumber("FXTubeEnable", 1); + this->m_nFXTubeOverdrive = this->m_Properties.GetNumber("FXTubeOverdrive", 10); + + this->m_bFXChorusEnable = this->m_Properties.GetNumber("FXChorusEnable", 1); + this->m_nFXChorusRate = this->m_Properties.GetNumber("FXChorusRate", 50); + this->m_nFXChorusDepth = this->m_Properties.GetNumber("FXChorusDepth", 50); + + this->m_bFXFlangerEnable = this->m_Properties.GetNumber("FXFlangerEnable", 1); + this->m_nFXFlangerRate = this->m_Properties.GetNumber("FXFlangerRate", 15); + this->m_nFXFlangerDepth = this->m_Properties.GetNumber("FXFlangerDepth", 10); + this->m_nFXFlangerFeedback = this->m_Properties.GetNumber("FXFlangerFeedback", 20); + + this->m_bFXOrbitoneEnable = this->m_Properties.GetNumber("FXOrbitoneEnable", 1); + this->m_nFXOrbitoneRate = this->m_Properties.GetNumber("FXOrbitoneRate", 40); + this->m_nFXOrbitoneDepth = this->m_Properties.GetNumber("FXOrbitoneDepth", 50); + + this->m_bFXPhaserEnable = this->m_Properties.GetNumber("FXPhaserEnable", 1); + this->m_nFXPhaserRate = this->m_Properties.GetNumber("FXPhaserRate", 5); + this->m_nFXPhaserDepth = this->m_Properties.GetNumber("FXPhaserDepth", 99); + this->m_nFXPhaserFeedback = this->m_Properties.GetNumber("FXPhaserFeedback", 50); + this->m_nFXPhaserNbStages = this->m_Properties.GetNumber("FXPhaserNbStages", 12); + + this->m_bFXDelayEnable = this->m_Properties.GetNumber("FXDelayEnable", 1); + this->m_nFXDelayLeftDelayTime = this->m_Properties.GetNumber("FXDelayLeftDelayTime", 15); + this->m_nFXDelayRightDelayTime = this->m_Properties.GetNumber("FXDelayRightDelayTime", 22); + this->m_nFXDelayFeedback = this->m_Properties.GetNumber("FXDelayFeedback", 35); + + this->m_bFXReverberatorEnable = this->m_Properties.GetNumber("FXReverberatorEnable", 1); + this->m_nFXReverberatorInputGain = this->m_Properties.GetNumber("FXReverberatorInputGain", 30); + this->m_nFXReverberatorTime = this->m_Properties.GetNumber("FXReverberatorTime", 30); + this->m_nFXReverberatorDiffusion = this->m_Properties.GetNumber("FXReverberatorDiffusion", 30); + this->m_nFXReverberatorLP = this->m_Properties.GetNumber("FXReverberatorLP", 99); + + bool revUsed = false; + for(unsigned nTG = 0; nTG < CConfig::ToneGenerators; ++nTG) + { + 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) + { + CString propertyName; + propertyName.Format("FXSend_TG%u_to_%s", nTG + 1, toString(static_cast(toFX)).c_str()); + unsigned defaultLevel = 0; + 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 fromFX = 0; fromFX < end; ++fromFX) + { + for(size_t toFX = 0; toFX < MixerOutput::kFXCount; ++toFX) + { + CString propertyName; + propertyName.Format("FXSend_%s_to_%s", toString(static_cast(fromFX)).c_str(), toString(static_cast(toFX)).c_str()); + unsigned defaultLevel = 0; + 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; @@ -257,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]); @@ -310,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); @@ -317,43 +358,64 @@ bool CPerformanceConfig::Save (void) m_Properties.SetNumber ("ReverbLowPass", m_nReverbLowPass); m_Properties.SetNumber ("ReverbDiffusion", m_nReverbDiffusion); m_Properties.SetNumber ("ReverbLevel", m_nReverbLevel); +#endif + +#if defined(MIXING_CONSOLE_ENABLE) + this->m_Properties.SetNumber("FXTubeEnable", this->m_bFXTubeEnable ? 1 : 0); + this->m_Properties.SetNumber("FXTubeOverdrive", this->m_nFXTubeOverdrive); + + this->m_Properties.SetNumber("FXChorusEnable", this->m_bFXChorusEnable ? 1 : 0); + this->m_Properties.SetNumber("FXChorusRate", this->m_nFXChorusRate); + this->m_Properties.SetNumber("FXChorusDepth", this->m_nFXChorusDepth); + + this->m_Properties.SetNumber("FXFlangerEnable", this->m_bFXFlangerEnable ? 1 : 0); + this->m_Properties.SetNumber("FXFlangerRate", this->m_nFXFlangerRate); + this->m_Properties.SetNumber("FXFlangerDepth", this->m_nFXFlangerDepth); + this->m_Properties.SetNumber("FXFlangerFeedback", this->m_nFXFlangerFeedback); + + this->m_Properties.SetNumber("FXOrbitoneEnable", this->m_bFXOrbitoneEnable ? 1 : 0); + this->m_Properties.SetNumber("FXOrbitoneRate", this->m_nFXOrbitoneRate); + this->m_Properties.SetNumber("FXOrbitoneDepth", this->m_nFXOrbitoneDepth); + + this->m_Properties.SetNumber("FXPhaserEnable", this->m_bFXPhaserEnable ? 1 : 0); + this->m_Properties.SetNumber("FXPhaserRate", this->m_nFXPhaserRate); + this->m_Properties.SetNumber("FXPhaserDepth", this->m_nFXPhaserDepth); + this->m_Properties.SetNumber("FXPhaserFeedback", this->m_nFXPhaserFeedback); + this->m_Properties.SetNumber("FXPhaserNbStages", this->m_nFXPhaserNbStages); + + this->m_Properties.SetNumber("FXDelayEnable", this->m_bFXDelayEnable ? 1 : 0); + this->m_Properties.SetNumber("FXDelayLeftDelayTime", this->m_nFXDelayLeftDelayTime); + this->m_Properties.SetNumber("FXDelayRightDelayTime", this->m_nFXDelayRightDelayTime); + this->m_Properties.SetNumber("FXDelayFeedback", this->m_nFXDelayFeedback); + + this->m_Properties.SetNumber("FXReverberatorEnable", this->m_bFXReverberatorEnable ? 1 : 0); + this->m_Properties.SetNumber("FXReverberatorInputGain", this->m_nFXReverberatorInputGain); + this->m_Properties.SetNumber("FXReverberatorTime", this->m_nFXReverberatorTime); + this->m_Properties.SetNumber("FXReverberatorDiffusion", this->m_nFXReverberatorDiffusion); + this->m_Properties.SetNumber("FXReverberatorLP", this->m_nFXReverberatorLP); + + for(unsigned nTG = 0; nTG < CConfig::ToneGenerators; nTG++) + { + for(size_t toFX = 0; toFX < MixerOutput::kFXCount; ++toFX) + { + 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]); + } + } -#ifdef ARM_ALLOW_MULTI_CORE - this->m_Properties.SetNumber("FXChainEnable", m_bFXChainEnable ? 1 : 0); - this->m_Properties.SetNumber("FXChainWet", m_nFXChainWet); - this->m_Properties.SetNumber("FXChainTubeEnable", m_bFXChainTubeEnable ? 1 : 0); - this->m_Properties.SetNumber("FXChainTubeWet", m_nFXChainTubeWet); - this->m_Properties.SetNumber("FXChainTubeOverdrive", m_nFXChainTubeOverdrive); - this->m_Properties.SetNumber("FXChainChorusEnable", m_bFXChainChorusEnable ? 1 : 0); - this->m_Properties.SetNumber("FXChainChorusWet", m_nFXChainChorusWet); - this->m_Properties.SetNumber("FXChainChorusRate", m_nFXChainChorusRate); - this->m_Properties.SetNumber("FXChainChorusDepth", m_nFXChainChorusDepth); - this->m_Properties.SetNumber("FXChainFlangerEnable", m_bFXChainFlangerEnable ? 1 : 0); - this->m_Properties.SetNumber("FXChainFlangerWet", m_nFXChainFlangerWet); - this->m_Properties.SetNumber("FXChainFlangerRate", m_nFXChainFlangerRate); - this->m_Properties.SetNumber("FXChainFlangerDepth", m_nFXChainFlangerDepth); - this->m_Properties.SetNumber("FXChainFlangerFeedback", m_nFXChainFlangerFeedback); - this->m_Properties.SetNumber("FXChainOrbitoneEnable", m_bFXChainOrbitoneEnable ? 1 : 0); - this->m_Properties.SetNumber("FXChainOrbitoneWet", m_nFXChainOrbitoneWet); - this->m_Properties.SetNumber("FXChainOrbitoneRate", m_nFXChainOrbitoneRate); - this->m_Properties.SetNumber("FXChainOrbitoneDepth", m_nFXChainOrbitoneDepth); - this->m_Properties.SetNumber("FXChainPhaserEnable", m_bFXChainPhaserEnable ? 1 : 0); - this->m_Properties.SetNumber("FXChainPhaserWet", m_nFXChainPhaserWet); - this->m_Properties.SetNumber("FXChainPhaserRate", m_nFXChainPhaserRate); - this->m_Properties.SetNumber("FXChainPhaserDepth", m_nFXChainPhaserDepth); - this->m_Properties.SetNumber("FXChainPhaserFeedback", m_nFXChainPhaserFeedback); - this->m_Properties.SetNumber("FXChainPhaserNbStages", m_nFXChainPhaserNbStages); - this->m_Properties.SetNumber("FXChainDelayEnable", m_bFXChainDelayEnable ? 1 : 0); - this->m_Properties.SetNumber("FXChainDelayWet", m_nFXChainDelayWet); - this->m_Properties.SetNumber("FXChainDelayLeftDelayTime", m_nFXChainDelayLeftDelayTime); - this->m_Properties.SetNumber("FXChainDelayRightDelayTime", m_nFXChainDelayRightDelayTime); - this->m_Properties.SetNumber("FXChainDelayFeedback", m_nFXChainDelayFeedback); - this->m_Properties.SetNumber("FXChainShimmerReverbEnable", m_bFXChainShimmerReverbEnable ? 1 : 0); - this->m_Properties.SetNumber("FXChainShimmerReverbWet", m_nFXChainShimmerReverbWet); - this->m_Properties.SetNumber("FXChainShimmerReverbInputGain", m_nFXChainShimmerReverbInputGain); - this->m_Properties.SetNumber("FXChainShimmerReverbTime", m_nFXChainShimmerReverbTime); - this->m_Properties.SetNumber("FXChainShimmerReverbDiffusion", m_nFXChainShimmerReverbDiffusion); - this->m_Properties.SetNumber("FXChainShimmerReverbLP", m_nFXChainShimmerReverbLP); + size_t end = MixerOutput::kFXCount - 1; + for(size_t fromFX = 0; fromFX < end; ++fromFX) + { + for(size_t toFX = 0; toFX < MixerOutput::kFXCount; ++toFX) + { + 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 (); @@ -425,11 +487,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) { @@ -497,11 +561,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 { @@ -927,9 +993,12 @@ bool CPerformanceConfig::ListPerformances() Result = f_findfirst (&Directory, &FileInfo, "SD:/" PERFORMANCE_DIR, "*.ini"); for (unsigned i = 0; Result == FR_OK && FileInfo.fname[0]; i++) { - if (nLastPerformance >= NUM_PERFORMANCES) { + if (nLastPerformance >= NUM_PERFORMANCES) + { LOGNOTE ("Skipping performance %s", FileInfo.fname); - } else { + } + else + { if (!(FileInfo.fattrib & (AM_HID | AM_SYS))) { std::string FileName = FileInfo.fname; @@ -941,9 +1010,9 @@ bool CPerformanceConfig::ListPerformances() { nLastFileIndex=nPIndex; } - + m_nPerformanceFileName[nLastPerformance++]= FileName; - } + } } } @@ -952,15 +1021,14 @@ bool CPerformanceConfig::ListPerformances() // sort by performance number-name if (nLastPerformance > 2) { - sort (m_nPerformanceFileName+1, m_nPerformanceFileName + nLastPerformance); // default is always on first place. %%%%%%%%%%%%%%%% + sort (m_nPerformanceFileName+1, m_nPerformanceFileName + nLastPerformance); // default is always on first place. %%%%%%%%%%%%%%%% } } LOGNOTE ("Number of Performances: %d", nLastPerformance); - + return nInternalFolderOk; } - void CPerformanceConfig::SetNewPerformance (unsigned nID) { @@ -1028,355 +1096,304 @@ bool CPerformanceConfig::DeletePerformance(unsigned nID) return bOK; } -#ifdef ARM_ALLOW_MULTI_CORE -bool CPerformanceConfig::GetFXChainEnable(void) const -{ - return this->m_bFXChainEnable; -} - -unsigned CPerformanceConfig::GetFXChainWet(void) const -{ - return this->m_nFXChainWet; -} - -bool CPerformanceConfig::GetFXChainTubeEnable(void) const -{ - return this->m_bFXChainTubeEnable; -} - -unsigned CPerformanceConfig::GetFXChainTubeWet(void) const -{ - return this->m_nFXChainTubeWet; -} - -unsigned CPerformanceConfig::GetFXChainTubeOverdrive(void) const -{ - return this->m_nFXChainTubeOverdrive; -} - -bool CPerformanceConfig::GetFXChainChorusEnable(void) const -{ - return this->m_bFXChainChorusEnable; -} - -unsigned CPerformanceConfig::GetFXChainChorusWet(void) const -{ - return this->m_nFXChainChorusWet; -} - -unsigned CPerformanceConfig::GetFXChainChorusRate(void) const -{ - return this->m_nFXChainChorusRate; -} - -unsigned CPerformanceConfig::GetFXChainChorusDepth(void) const -{ - return this->m_nFXChainChorusDepth; -} - -bool CPerformanceConfig::GetFXChainFlangerEnable(void) const -{ - return this->m_bFXChainFlangerEnable; -} - -unsigned CPerformanceConfig::GetFXChainFlangerWet(void) const -{ - return this->m_nFXChainFlangerWet; -} - -unsigned CPerformanceConfig::GetFXChainFlangerRate(void) const -{ - return this->m_nFXChainFlangerRate; -} +#ifdef MIXING_CONSOLE_ENABLE -unsigned CPerformanceConfig::GetFXChainFlangerDepth(void) const +bool CPerformanceConfig::GetFXTubeEnable(void) const { - return this->m_nFXChainFlangerDepth; + return this->m_bFXTubeEnable; } -unsigned CPerformanceConfig::GetFXChainFlangerFeedback(void) const +unsigned CPerformanceConfig::GetFXTubeOverdrive(void) const { - return this->m_nFXChainFlangerFeedback; + return this->m_nFXTubeOverdrive; } -bool CPerformanceConfig::GetFXChainOrbitoneEnable(void) const +bool CPerformanceConfig::GetFXChorusEnable(void) const { - return this->m_bFXChainOrbitoneEnable; + return this->m_bFXChorusEnable; } -unsigned CPerformanceConfig::GetFXChainOrbitoneWet(void) const +unsigned CPerformanceConfig::GetFXChorusRate(void) const { - return this->m_nFXChainOrbitoneWet; + return this->m_nFXChorusRate; } -unsigned CPerformanceConfig::GetFXChainOrbitoneRate(void) const +unsigned CPerformanceConfig::GetFXChorusDepth(void) const { - return this->m_nFXChainOrbitoneRate; + return this->m_nFXChorusDepth; } -unsigned CPerformanceConfig::GetFXChainOrbitoneDepth(void) const +bool CPerformanceConfig::GetFXFlangerEnable(void) const { - return this->m_nFXChainOrbitoneDepth; + return this->m_bFXFlangerEnable; } -bool CPerformanceConfig::GetFXChainPhaserEnable(void) const +unsigned CPerformanceConfig::GetFXFlangerRate(void) const { - return this->m_bFXChainPhaserEnable; + return this->m_nFXFlangerRate; } -unsigned CPerformanceConfig::GetFXChainPhaserWet(void) const +unsigned CPerformanceConfig::GetFXFlangerDepth(void) const { - return this->m_nFXChainPhaserWet; + return this->m_nFXFlangerDepth; } -unsigned CPerformanceConfig::GetFXChainPhaserRate(void) const +unsigned CPerformanceConfig::GetFXFlangerFeedback(void) const { - return this->m_nFXChainPhaserRate; + return this->m_nFXFlangerFeedback; } -unsigned CPerformanceConfig::GetFXChainPhaserDepth(void) const +bool CPerformanceConfig::GetFXOrbitoneEnable(void) const { - return this->m_nFXChainPhaserDepth; + return this->m_bFXOrbitoneEnable; } -unsigned CPerformanceConfig::GetFXChainPhaserFeedback(void) const +unsigned CPerformanceConfig::GetFXOrbitoneRate(void) const { - return this->m_nFXChainPhaserFeedback; + return this->m_nFXOrbitoneRate; } -unsigned CPerformanceConfig::GetFXChainPhaserNbStages(void) const +unsigned CPerformanceConfig::GetFXOrbitoneDepth(void) const { - return this->m_nFXChainPhaserNbStages; + return this->m_nFXOrbitoneDepth; } -bool CPerformanceConfig::GetFXChainDelayEnable(void) const +bool CPerformanceConfig::GetFXPhaserEnable(void) const { - return this->m_bFXChainDelayEnable; + return this->m_bFXPhaserEnable; } -unsigned CPerformanceConfig::GetFXChainDelayWet(void) const +unsigned CPerformanceConfig::GetFXPhaserRate(void) const { - return this->m_nFXChainDelayWet; + return this->m_nFXPhaserRate; } -unsigned CPerformanceConfig::GetFXChainDelayLeftDelayTime(void) const +unsigned CPerformanceConfig::GetFXPhaserDepth(void) const { - return this->m_nFXChainDelayLeftDelayTime; + return this->m_nFXPhaserDepth; } -unsigned CPerformanceConfig::GetFXChainDelayRightDelayTime(void) const +unsigned CPerformanceConfig::GetFXPhaserFeedback(void) const { - return this->m_nFXChainDelayRightDelayTime; + return this->m_nFXPhaserFeedback; } -unsigned CPerformanceConfig::GetFXChainDelayFeedback(void) const +unsigned CPerformanceConfig::GetFXPhaserNbStages(void) const { - return this->m_nFXChainDelayFeedback; + return this->m_nFXPhaserNbStages; } -bool CPerformanceConfig::GetFXChainShimmerReverbEnable(void) const +bool CPerformanceConfig::GetFXDelayEnable(void) const { - return this->m_bFXChainShimmerReverbEnable; + return this->m_bFXDelayEnable; } -unsigned CPerformanceConfig::GetFXChainShimmerReverbWet(void) const +unsigned CPerformanceConfig::GetFXDelayLeftDelayTime(void) const { - return this->m_nFXChainShimmerReverbWet; + return this->m_nFXDelayLeftDelayTime; } -unsigned CPerformanceConfig::GetFXChainShimmerReverbInputGain(void) const +unsigned CPerformanceConfig::GetFXDelayRightDelayTime(void) const { - return this->m_nFXChainShimmerReverbInputGain; + return this->m_nFXDelayRightDelayTime; } -unsigned CPerformanceConfig::GetFXChainShimmerReverbTime(void) const +unsigned CPerformanceConfig::GetFXDelayFeedback(void) const { - return this->m_nFXChainShimmerReverbTime; + return this->m_nFXDelayFeedback; } -unsigned CPerformanceConfig::GetFXChainShimmerReverbDiffusion(void) const +bool CPerformanceConfig::GetFXReverberatorEnable(void) const { - return this->m_nFXChainShimmerReverbDiffusion; + return this->m_bFXReverberatorEnable; } -unsigned CPerformanceConfig::GetFXChainShimmerReverbLP(void) const +unsigned CPerformanceConfig::GetFXReverberatorInputGain(void) const { - return this->m_nFXChainShimmerReverbLP; + return this->m_nFXReverberatorInputGain; } -void CPerformanceConfig::SetFXChainEnable(bool bValue) +unsigned CPerformanceConfig::GetFXReverberatorTime(void) const { - this->m_bFXChainEnable = bValue; + return this->m_nFXReverberatorTime; } -void CPerformanceConfig::SetFXChainWet(unsigned nValue) +unsigned CPerformanceConfig::GetFXReverberatorDiffusion(void) const { - this->m_nFXChainWet = nValue; + return this->m_nFXReverberatorDiffusion; } -void CPerformanceConfig::SetFXChainTubeEnable(bool bValue) +unsigned CPerformanceConfig::GetFXReverberatorLP(void) const { - this->m_bFXChainTubeEnable = bValue; + return this->m_nFXReverberatorLP; } -void CPerformanceConfig::SetFXChainTubeWet(unsigned nValue) +unsigned CPerformanceConfig::GetTGSendLevel(unsigned in, MixerOutput fx) const { - this->m_nFXChainTubeWet = nValue; + assert(in < CConfig::ToneGenerators); + assert(fx < MixerOutput::kFXCount); + return this->m_nTGSendLevel[in][fx]; } -void CPerformanceConfig::SetFXChainTubeOverdrive(unsigned nValue) +unsigned CPerformanceConfig::GetFXSendLevel(MixerOutput fromFX, MixerOutput toFX) const { - this->m_nFXChainTubeOverdrive = nValue; + assert(fromFX < (MixerOutput::kFXCount - 1)); + assert(toFX < MixerOutput::kFXCount); + return (fromFX == toFX) ? 0 : this->m_nFXSendLevel[fromFX][toFX]; } -void CPerformanceConfig::SetFXChainChorusEnable(bool bValue) +void CPerformanceConfig::SetFXTubeEnable(bool bValue) { - this->m_bFXChainChorusEnable = bValue; + this->m_bFXTubeEnable = bValue; } -void CPerformanceConfig::SetFXChainChorusWet(unsigned nValue) +void CPerformanceConfig::SetFXTubeOverdrive(unsigned nValue) { - this->m_nFXChainChorusWet = nValue; + this->m_nFXTubeOverdrive = nValue; } -void CPerformanceConfig::SetFXChainChorusRate(unsigned nValue) +void CPerformanceConfig::SetFXChorusEnable(bool bValue) { - this->m_nFXChainChorusRate = nValue; + this->m_bFXChorusEnable = bValue; } -void CPerformanceConfig::SetFXChainChorusDepth(unsigned nValue) +void CPerformanceConfig::SetFXChorusRate(unsigned nValue) { - this->m_nFXChainChorusDepth = nValue; + this->m_nFXChorusRate = nValue; } -void CPerformanceConfig::SetFXChainFlangerEnable(bool bValue) +void CPerformanceConfig::SetFXChorusDepth(unsigned nValue) { - this->m_bFXChainFlangerEnable = bValue; + this->m_nFXChorusDepth = nValue; } -void CPerformanceConfig::SetFXChainFlangerWet(unsigned nValue) +void CPerformanceConfig::SetFXFlangerEnable(bool bValue) { - this->m_nFXChainFlangerWet = nValue; + this->m_bFXFlangerEnable = bValue; } -void CPerformanceConfig::SetFXChainFlangerRate(unsigned nValue) +void CPerformanceConfig::SetFXFlangerRate(unsigned nValue) { - this->m_nFXChainFlangerRate = nValue; + this->m_nFXFlangerRate = nValue; } -void CPerformanceConfig::SetFXChainFlangerDepth(unsigned nValue) +void CPerformanceConfig::SetFXFlangerDepth(unsigned nValue) { - this->m_nFXChainFlangerDepth = nValue; + this->m_nFXFlangerDepth = nValue; } -void CPerformanceConfig::SetFXChainFlangerFeedback(unsigned nValue) +void CPerformanceConfig::SetFXFlangerFeedback(unsigned nValue) { - this->m_nFXChainFlangerFeedback = nValue; + this->m_nFXFlangerFeedback = nValue; } -void CPerformanceConfig::SetFXChainOrbitoneEnable(bool bValue) +void CPerformanceConfig::SetFXOrbitoneEnable(bool bValue) { - this->m_bFXChainOrbitoneEnable = bValue; + this->m_bFXOrbitoneEnable = bValue; } -void CPerformanceConfig::SetFXChainOrbitoneWet(unsigned nValue) +void CPerformanceConfig::SetFXOrbitoneRate(unsigned nValue) { - this->m_nFXChainOrbitoneWet = nValue; + this->m_nFXOrbitoneRate = nValue; } -void CPerformanceConfig::SetFXChainOrbitoneRate(unsigned nValue) +void CPerformanceConfig::SetFXOrbitoneDepth(unsigned nValue) { - this->m_nFXChainOrbitoneRate = nValue; + this->m_nFXOrbitoneDepth = nValue; } -void CPerformanceConfig::SetFXChainOrbitoneDepth(unsigned nValue) +void CPerformanceConfig::SetFXPhaserEnable(bool bValue) { - this->m_nFXChainOrbitoneDepth = nValue; + this->m_bFXPhaserEnable = bValue; } -void CPerformanceConfig::SetFXChainPhaserEnable(bool bValue) +void CPerformanceConfig::SetFXPhaserRate(unsigned nValue) { - this->m_bFXChainPhaserEnable = bValue; + this->m_nFXPhaserRate = nValue; } -void CPerformanceConfig::SetFXChainPhaserWet(unsigned nValue) +void CPerformanceConfig::SetFXPhaserDepth(unsigned nValue) { - this->m_nFXChainPhaserWet = nValue; + this->m_nFXPhaserDepth = nValue; } -void CPerformanceConfig::SetFXChainPhaserRate(unsigned nValue) +void CPerformanceConfig::SetFXPhaserFeedback(unsigned nValue) { - this->m_nFXChainPhaserRate = nValue; + this->m_nFXPhaserFeedback = nValue; } -void CPerformanceConfig::SetFXChainPhaserDepth(unsigned nValue) +void CPerformanceConfig::SetFXPhaserNbStages(unsigned nValue) { - this->m_nFXChainPhaserDepth = nValue; + this->m_nFXPhaserNbStages = nValue; } -void CPerformanceConfig::SetFXChainPhaserFeedback(unsigned nValue) +void CPerformanceConfig::SetFXDelayEnable(unsigned bValue) { - this->m_nFXChainPhaserFeedback = nValue; + this->m_bFXDelayEnable = bValue; } -void CPerformanceConfig::SetFXChainPhaserNbStages(unsigned nValue) +void CPerformanceConfig::SetFXDelayLeftDelayTime(unsigned nValue) { - this->m_nFXChainPhaserNbStages = nValue; + this->m_nFXDelayLeftDelayTime = nValue; } -void CPerformanceConfig::SetFXChainDelayEnable(unsigned bValue) +void CPerformanceConfig::SetFXDelayRightDelayTime(unsigned nValue) { - this->m_bFXChainDelayEnable = bValue; + this->m_nFXDelayRightDelayTime = nValue; } -void CPerformanceConfig::SetFXChainDelayWet(unsigned nValue) +void CPerformanceConfig::SetFXDelayFeedback(unsigned nValue) { - this->m_nFXChainDelayWet = nValue; + this->m_nFXDelayFeedback = nValue; } -void CPerformanceConfig::SetFXChainDelayLeftDelayTime(unsigned nValue) +void CPerformanceConfig::SetFXReverberatorEnable(unsigned bValue) { - this->m_nFXChainDelayLeftDelayTime = nValue; + this->m_bFXReverberatorEnable = bValue; } -void CPerformanceConfig::SetFXChainDelayRightDelayTime(unsigned nValue) +void CPerformanceConfig::SetFXReverberatorInputGain(unsigned nValue) { - this->m_nFXChainDelayRightDelayTime = nValue; + this->m_nFXReverberatorInputGain = nValue; } -void CPerformanceConfig::SetFXChainDelayFeedback(unsigned nValue) +void CPerformanceConfig::SetFXReverberatorTime(unsigned nValue) { - this->m_nFXChainDelayFeedback = nValue; + this->m_nFXReverberatorTime = nValue; } -void CPerformanceConfig::SetFXChainShimmerReverbEnable(unsigned bValue) +void CPerformanceConfig::SetFXReverberatorDiffusion(unsigned nValue) { - this->m_bFXChainShimmerReverbEnable = bValue; + this->m_nFXReverberatorDiffusion = nValue; } -void CPerformanceConfig::SetFXChainShimmerReverbWet(unsigned nValue) +void CPerformanceConfig::SetFXReverberatorLP(unsigned nValue) { - this->m_nFXChainShimmerReverbWet = nValue; + this->m_nFXReverberatorLP = nValue; } -void CPerformanceConfig::SetFXChainShimmerReverbInputGain(unsigned nValue) +void CPerformanceConfig::SetTGSendLevel(unsigned in, MixerOutput fx, unsigned nValue) { - this->m_nFXChainShimmerReverbInputGain = nValue; + assert(in < CConfig::ToneGenerators); + assert(fx < MixerOutput::kFXCount); + this->m_nTGSendLevel[in][fx] = nValue; } -void CPerformanceConfig::SetFXChainShimmerReverbTime(unsigned nValue) +void CPerformanceConfig::SetFXSendLevel(MixerOutput fromFX, MixerOutput toFX, unsigned nValue) { - this->m_nFXChainShimmerReverbTime = nValue; + assert(fromFX < (MixerOutput::kFXCount - 1)); + assert(toFX < MixerOutput::kFXCount); + this->m_nFXSendLevel[fromFX][toFX] = (fromFX == toFX) ? 0 : nValue; } -void CPerformanceConfig::SetFXChainShimmerReverbDiffusion(unsigned nValue) +void CPerformanceConfig::SetFXBypass(bool bypass) { - this->m_nFXChainShimmerReverbDiffusion = nValue; + this->m_bFXBypass = bypass; } -void CPerformanceConfig::SetFXChainShimmerReverbLP(unsigned nValue) +bool CPerformanceConfig::IsFXBypass() const { - this->m_nFXChainShimmerReverbLP = nValue; + return this->m_bFXBypass; } #endif diff --git a/src/performanceconfig.h b/src/performanceconfig.h index fd373f4..5e308f3 100644 --- a/src/performanceconfig.h +++ b/src/performanceconfig.h @@ -24,6 +24,7 @@ #define _performanceconfig_h #include "config.h" +#include "mixing_console_constants.h" #include #include #define NUM_VOICE_PARAM 156 @@ -52,7 +53,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 +83,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); @@ -118,78 +123,80 @@ public: void SetReverbDiffusion (unsigned nValue); void SetReverbLevel (unsigned nValue); -#ifdef ARM_ALLOW_MULTI_CORE - bool GetFXChainEnable(void) const; - unsigned GetFXChainWet(void) const; - bool GetFXChainTubeEnable(void) const; - unsigned GetFXChainTubeWet(void) const; - unsigned GetFXChainTubeOverdrive(void) const; - bool GetFXChainChorusEnable(void) const; - unsigned GetFXChainChorusWet(void) const; - unsigned GetFXChainChorusRate(void) const; - unsigned GetFXChainChorusDepth(void) const; - bool GetFXChainFlangerEnable(void) const; - unsigned GetFXChainFlangerWet(void) const; - unsigned GetFXChainFlangerRate(void) const; - unsigned GetFXChainFlangerDepth(void) const; - unsigned GetFXChainFlangerFeedback(void) const; - bool GetFXChainOrbitoneEnable(void) const; - unsigned GetFXChainOrbitoneWet(void) const; - unsigned GetFXChainOrbitoneRate(void) const; - unsigned GetFXChainOrbitoneDepth(void) const; - bool GetFXChainPhaserEnable(void) const; - unsigned GetFXChainPhaserWet(void) const; - unsigned GetFXChainPhaserRate(void) const; - unsigned GetFXChainPhaserDepth(void) const; - unsigned GetFXChainPhaserFeedback(void) const; - unsigned GetFXChainPhaserNbStages(void) const; - bool GetFXChainDelayEnable(void) const; - unsigned GetFXChainDelayWet(void) const; - unsigned GetFXChainDelayLeftDelayTime(void) const; - unsigned GetFXChainDelayRightDelayTime(void) const; - unsigned GetFXChainDelayFeedback(void) const; - bool GetFXChainShimmerReverbEnable(void) const; - unsigned GetFXChainShimmerReverbWet(void) const; - unsigned GetFXChainShimmerReverbInputGain(void) const; - unsigned GetFXChainShimmerReverbTime(void) const; - unsigned GetFXChainShimmerReverbDiffusion(void) const; - unsigned GetFXChainShimmerReverbLP(void) const; - - void SetFXChainEnable(bool bValue); - void SetFXChainWet(unsigned nValue); - void SetFXChainTubeEnable(bool bValue); - void SetFXChainTubeWet(unsigned nValue); - void SetFXChainTubeOverdrive(unsigned nValue); - void SetFXChainChorusEnable(bool bValue); - void SetFXChainChorusWet(unsigned nValue); - void SetFXChainChorusRate(unsigned nValue); - void SetFXChainChorusDepth(unsigned nValue); - void SetFXChainFlangerEnable(bool bValue); - void SetFXChainFlangerWet(unsigned nValue); - void SetFXChainFlangerRate(unsigned nValue); - void SetFXChainFlangerDepth(unsigned nValue); - void SetFXChainFlangerFeedback(unsigned nValue); - void SetFXChainOrbitoneEnable(bool bValue); - void SetFXChainOrbitoneWet(unsigned nValue); - void SetFXChainOrbitoneRate(unsigned nValue); - void SetFXChainOrbitoneDepth(unsigned nValue); - void SetFXChainPhaserEnable(bool bValue); - void SetFXChainPhaserWet(unsigned nValue); - void SetFXChainPhaserRate(unsigned nValue); - void SetFXChainPhaserDepth(unsigned nValue); - void SetFXChainPhaserFeedback(unsigned nValue); - void SetFXChainPhaserNbStages(unsigned nValue); - void SetFXChainDelayEnable(unsigned nValue); - void SetFXChainDelayWet(unsigned nValue); - void SetFXChainDelayLeftDelayTime(unsigned nValue); - void SetFXChainDelayRightDelayTime(unsigned nValue); - void SetFXChainDelayFeedback(unsigned nValue); - void SetFXChainShimmerReverbEnable(unsigned nValue); - void SetFXChainShimmerReverbWet(unsigned nValue); - void SetFXChainShimmerReverbInputGain(unsigned nValue); - void SetFXChainShimmerReverbTime(unsigned nValue); - void SetFXChainShimmerReverbDiffusion(unsigned nValue); - void SetFXChainShimmerReverbLP(unsigned nValue); +#ifdef MIXING_CONSOLE_ENABLE + bool GetFXTubeEnable(void) const; + unsigned GetFXTubeOverdrive(void) const; + + bool GetFXChorusEnable(void) const; + unsigned GetFXChorusRate(void) const; + unsigned GetFXChorusDepth(void) const; + + bool GetFXFlangerEnable(void) const; + unsigned GetFXFlangerRate(void) const; + unsigned GetFXFlangerDepth(void) const; + unsigned GetFXFlangerFeedback(void) const; + + bool GetFXOrbitoneEnable(void) const; + unsigned GetFXOrbitoneRate(void) const; + unsigned GetFXOrbitoneDepth(void) const; + + bool GetFXPhaserEnable(void) const; + unsigned GetFXPhaserRate(void) const; + unsigned GetFXPhaserDepth(void) const; + unsigned GetFXPhaserFeedback(void) const; + unsigned GetFXPhaserNbStages(void) const; + + bool GetFXDelayEnable(void) const; + unsigned GetFXDelayLeftDelayTime(void) const; + unsigned GetFXDelayRightDelayTime(void) const; + unsigned GetFXDelayFeedback(void) const; + + bool GetFXReverberatorEnable(void) const; + unsigned GetFXReverberatorInputGain(void) const; + unsigned GetFXReverberatorTime(void) const; + unsigned GetFXReverberatorDiffusion(void) const; + unsigned GetFXReverberatorLP(void) const; + unsigned GetTGSendLevel(unsigned in, MixerOutput fx) const; + unsigned GetFXSendLevel(MixerOutput ret, MixerOutput fx) const; + + void SetFXTubeEnable(bool bValue); + void SetFXTubeOverdrive(unsigned nValue); + + void SetFXChorusEnable(bool bValue); + void SetFXChorusRate(unsigned nValue); + void SetFXChorusDepth(unsigned nValue); + + void SetFXFlangerEnable(bool bValue); + void SetFXFlangerRate(unsigned nValue); + void SetFXFlangerDepth(unsigned nValue); + void SetFXFlangerFeedback(unsigned nValue); + + void SetFXOrbitoneEnable(bool bValue); + void SetFXOrbitoneRate(unsigned nValue); + void SetFXOrbitoneDepth(unsigned nValue); + + void SetFXPhaserEnable(bool bValue); + void SetFXPhaserRate(unsigned nValue); + void SetFXPhaserDepth(unsigned nValue); + void SetFXPhaserFeedback(unsigned nValue); + void SetFXPhaserNbStages(unsigned nValue); + + void SetFXDelayEnable(unsigned nValue); + void SetFXDelayLeftDelayTime(unsigned nValue); + void SetFXDelayRightDelayTime(unsigned nValue); + void SetFXDelayFeedback(unsigned nValue); + + void SetFXReverberatorEnable(unsigned nValue); + void SetFXReverberatorInputGain(unsigned nValue); + void SetFXReverberatorTime(unsigned nValue); + void SetFXReverberatorDiffusion(unsigned nValue); + void SetFXReverberatorLP(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); @@ -222,7 +229,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]; @@ -260,42 +269,46 @@ private: unsigned m_nReverbDiffusion; unsigned m_nReverbLevel; -#ifdef ARM_ALLOW_MULTI_CORE - bool m_bFXChainEnable; - unsigned m_nFXChainWet; - bool m_bFXChainTubeEnable; - unsigned m_nFXChainTubeWet; - unsigned m_nFXChainTubeOverdrive; - bool m_bFXChainChorusEnable; - unsigned m_nFXChainChorusWet; - unsigned m_nFXChainChorusRate; - unsigned m_nFXChainChorusDepth; - bool m_bFXChainFlangerEnable; - unsigned m_nFXChainFlangerWet; - unsigned m_nFXChainFlangerRate; - unsigned m_nFXChainFlangerDepth; - unsigned m_nFXChainFlangerFeedback; - bool m_bFXChainOrbitoneEnable; - unsigned m_nFXChainOrbitoneWet; - unsigned m_nFXChainOrbitoneRate; - unsigned m_nFXChainOrbitoneDepth; - bool m_bFXChainPhaserEnable; - unsigned m_nFXChainPhaserWet; - unsigned m_nFXChainPhaserRate; - unsigned m_nFXChainPhaserDepth; - unsigned m_nFXChainPhaserFeedback; - unsigned m_nFXChainPhaserNbStages; - bool m_bFXChainDelayEnable; - unsigned m_nFXChainDelayWet; - unsigned m_nFXChainDelayLeftDelayTime; - unsigned m_nFXChainDelayRightDelayTime; - unsigned m_nFXChainDelayFeedback; - bool m_bFXChainShimmerReverbEnable; - unsigned m_nFXChainShimmerReverbWet; - unsigned m_nFXChainShimmerReverbInputGain; - unsigned m_nFXChainShimmerReverbTime; - unsigned m_nFXChainShimmerReverbDiffusion; - unsigned m_nFXChainShimmerReverbLP; +#if defined(MIXING_CONSOLE_ENABLE) + bool m_bFXTubeEnable; + unsigned m_nFXTubeWet; + unsigned m_nFXTubeOverdrive; + + bool m_bFXChorusEnable; + unsigned m_nFXChorusRate; + unsigned m_nFXChorusDepth; + + bool m_bFXFlangerEnable; + unsigned m_nFXFlangerRate; + unsigned m_nFXFlangerDepth; + unsigned m_nFXFlangerFeedback; + + bool m_bFXOrbitoneEnable; + unsigned m_nFXOrbitoneRate; + unsigned m_nFXOrbitoneDepth; + + bool m_bFXPhaserEnable; + unsigned m_nFXPhaserRate; + unsigned m_nFXPhaserDepth; + unsigned m_nFXPhaserFeedback; + unsigned m_nFXPhaserNbStages; + + bool m_bFXDelayEnable; + unsigned m_nFXDelayLeftDelayTime; + unsigned m_nFXDelayRightDelayTime; + unsigned m_nFXDelayFeedback; + + bool m_bFXReverberatorEnable; + unsigned m_nFXReverberatorInputGain; + unsigned m_nFXReverberatorTime; + unsigned m_nFXReverberatorDiffusion; + unsigned m_nFXReverberatorLP; + + 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/test/Makefile b/src/test/Makefile index c001e86..e308e22 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -6,8 +6,23 @@ EXE := $(BINDIR)/all_tests.bin BETA := $(BINDIR)/beta.bin CXX = g++ -CXXFLAGS = -g -Wall -std=c++20 -MMD -MP -DEFINES = -DCPU=x86 -DDEBUG -DOUTPUT_FOLDER="\"$(OUTPUT_FOLDER)\"" +CXXFLAGS = -g -std=c++20 -MMD -MP -Wall -Wextra -Wformat-nonliteral -Wcast-align -Wpointer-arith -Wmissing-declarations -Winline -Wundef -Wno-unused-parameter +DEFINES = -DCPU=x86 -DOUTPUT_FOLDER="\"$(OUTPUT_FOLDER)\"" + +ifeq ($(shell echo $(MODE) | tr '[:upper:]' '[:lower:]'), release) + +# RELEASE +CXXFLAGS += -O3 +DEFINES += -DNDEBUG + +else + +# DEBUG +CXXFLAGS += -g3 +DEFINES += -DDEBUG + +endif + INCLUDES = -I../../CMSIS_5/CMSIS/DSP/Include/ \ -I../../CMSIS_5/CMSIS/Core/Include/ \ -I../../Synth_Dexed/src/ @@ -34,7 +49,12 @@ FX__SRCS += ../fx_orbitone.cpp FX__SRCS += ../fx_flanger.cpp FX__SRCS += ../fx_delay.cpp FX__SRCS += ../effect_platervbstereo.cpp +FX__SRCS += ../fx_shimmer_helper.cpp +FX__SRCS += ../fx_diffuser.cpp +FX__SRCS += ../fx_pitch_shifter.cpp FX__SRCS += ../fx_reverberator.cpp +FX__SRCS += ../fx_shimmer_reverb.cpp +FX__SRCS += ../fx_dry.cpp FX__SRCS += ../fx_rack.cpp TST_SRCS := $(filter-out waveplay.cpp $(wildcard beta*.cpp), $(wildcard *.cpp)) diff --git a/src/test/arm_functions.cpp b/src/test/arm_functions.cpp index 2964f48..61a5f0d 100644 --- a/src/test/arm_functions.cpp +++ b/src/test/arm_functions.cpp @@ -35,9 +35,16 @@ void arm_fill_f32(float32_t value, float32_t *pDst, uint32_t blockSize) float32_t arm_weighted_sum_f32(const float32_t *in, const float32_t *weights, uint32_t blockSize) { - float32_t m = 0.0f; - for(size_t i = 0; i < blockSize; ++i) m += in[i] * weights[i]; - return m; + float32_t s = 0.0f; + float32_t w = 0.0f; + + for(size_t i = 0; i < blockSize; ++i) + { + s += in[i] * weights[i]; + w += weights[i]; + } + + return s / w; } void arm_clip_f32(const float32_t *pSrc, float32_t *pDst, float32_t low, float32_t high, uint32_t numSamples) diff --git a/src/test/beta.cpp b/src/test/beta.cpp new file mode 100644 index 0000000..3adea7e --- /dev/null +++ b/src/test/beta.cpp @@ -0,0 +1,390 @@ +#include "test_fx_helper.h" + +#include +#include +#include + +class FastLFODebugger +{ +public: + FastLFODebugger(float32_t sampling_rate, float32_t min_frequency, float32_t max_frequency, float32_t initial_phase, bool centered) : + SamplingFrequency(sampling_rate), + InitialPhase(initial_phase), + min_frequency_(min_frequency), + max_frequency_(max_frequency), + centered_(centered), + frequency_(0.0f), + nb_sub_increment_(1), + sub_increment_(0), + y0_(0.0f), + y1_(0.0f), + iir_coefficient_(0.0f), + initial_amplitude_(0.0f) + { + assert(this->min_frequency_ <= this->max_frequency_); + assert(this->max_frequency_ < sampling_rate / 2.0f); + + this->setFrequency(this->min_frequency_); + } + + ~FastLFODebugger() + { + } + + inline float32_t getSamplingRate() const + { + return this->SamplingFrequency; + } + + void setNormalizedFrequency(float32_t normalized_frequency) + { + normalized_frequency = constrain(normalized_frequency, 0.0f, 1.0f); + if(this->normalized_frequency_ != normalized_frequency) + { + float32_t frequency = mapfloat(normalized_frequency, 0.0f, 1.0f, this->min_frequency_, this->max_frequency_); + this->normalized_frequency_ = normalized_frequency; + this->frequency_ = frequency; + this->unitary_frequency_ = this->frequency_ / this->getSamplingRate(); + + this->nb_sub_increment_ = (frequency >= 3.0f ? 1 : 300); + this->unitary_frequency_ *= this->nb_sub_increment_; + + this->updateCoefficient(1.0f); + } + } + + float32_t getNormalizedFrequency() const + { + return this->normalized_frequency_; + } + + void setFrequency(float32_t frequency) + { + frequency = constrain(frequency, this->min_frequency_, this->max_frequency_); + if(this->frequency_ != frequency) + { + float32_t normalized_frequency = mapfloat(frequency, this->min_frequency_, this->max_frequency_, 0.0f, 1.0f); + this->normalized_frequency_ = normalized_frequency; + this->frequency_ = frequency; + this->unitary_frequency_ = this->frequency_ / this->getSamplingRate(); + + this->nb_sub_increment_ = (frequency >= 3.0f ? 1 : 300); + this->unitary_frequency_ *= this->nb_sub_increment_; + + this->updateCoefficient(1.0f); + } + } + + float32_t getFrequency() const + { + return this->frequency_; + } + + void updateCoefficient(float32_t correction_ratio) + { + float32_t frequency = this->unitary_frequency_ * correction_ratio; + + float32_t sign = 16.0f; + frequency -= 0.25f; + if(frequency < 0.0f) + { + frequency = -frequency; + } + else + { + if(frequency > 0.5f) + { + frequency -= 0.5f; + } + else + { + sign = -16.0f; + } + } + + this->iir_coefficient_ = sign * frequency * (1.0f - 2.0f * frequency); + this->initial_amplitude_ = this->iir_coefficient_ * 0.25f; + + this->reset(correction_ratio); + } + + void reset(float32_t correction_ratio = 1.0f) + { + // static const float32_t epsilon = 1e-7; + + this->sub_increment_ = 0.0f; + + // computing cos(0) = sin(-PI/2) + this->y1_ = this->initial_amplitude_; + this->y0_ = 0.5f; + + // if(this->unitary_frequency_ == 0.0f) + // { + // return; + // } + + // float32_t p_i = 2.0f * PI * this->unitary_frequency_ * correction_ratio / static_cast(this->nb_sub_increment_); + // float32_t p = PI / 2.0f; + // float32_t t_p = this->InitialPhase; + // if(t_p < p) + // { + // p -= 2.0f* PI; + // } + // float32_t current = 3.0f; + // while(abs(current, sin(this->InitialPhase)) > epsilon) + // { + // std::cout << "phase: " << p << std::endl; + // this->process(); + // p += p_i; + // if(p > (6.0f * PI)) + // cout << "ERROR: FLO is not precise enough" << + // return; + // } + } + + float32_t process() + { + float32_t temp = this->y0_; + float32_t current = temp + 0.5f; + if(this->centered_) + { + current = current * 2.0f - 1.0f; + } + + if(this->sub_increment_ == 0) + { + this->y0_ = this->iir_coefficient_ * this->y0_ - this->y1_; + this->y1_ = temp; + this->current_ = current; + return current; + } + + this->sub_increment_++; + if(this->sub_increment_ >= this->nb_sub_increment_) + { + this->sub_increment_ = 0; + } + + return mapfloat(this->sub_increment_, 0, this->nb_sub_increment_, this->current_, current); + } + + float32_t current() const + { + return this->current_; + } + +private: + const float32_t SamplingFrequency; + const float32_t InitialPhase; + const float32_t min_frequency_; + const float32_t max_frequency_; + const bool centered_; + float32_t frequency_; + float32_t normalized_frequency_; + float32_t unitary_frequency_; + size_t nb_sub_increment_; + size_t sub_increment_; + + float32_t y0_; + float32_t y1_; + float32_t iir_coefficient_; + float32_t initial_amplitude_; + float32_t current_; +}; + +void updateCorrectionStep(float32_t& sign, float32_t& correction_ratio_step, int direction) +{ + if(sign == direction) + { + // does nothing + } + else if(sign == -direction) + { + sign = static_cast(direction); + correction_ratio_step /= 2.0f; + } + else + { + sign = static_cast(direction); + } + + if(direction > 0) + { + std::cout << "LFO is too slow - correction ratio step becomes: " << (sign * correction_ratio_step); + } + else if(direction < 0) + { + std::cout << "LFO is too fast - correction ratio step becomes: " << (sign * correction_ratio_step); + } +} + +TEST(BetaTesta, FastLFO) +{ + const testing::TestInfo* test_info = testing::UnitTest::GetInstance()->current_test_info(); + std::string full_test_name = test_info->test_case_name(); + full_test_name += "."; + full_test_name += test_info->name(); + + size_t NB = static_cast(1.0f * SAMPLING_FREQUENCY); + const float32_t freq = 1.5f; + const float32_t init_phase = PI / 2.0f; + float32_t correction_ratio = 1.0f; + float32_t correction_ratio_step = 8.0f/ SAMPLING_FREQUENCY; + + FastLFODebugger lfo1(SAMPLING_FREQUENCY, freq, 440.0f, init_phase, true); + lfo1.setFrequency(freq); + + const float32_t epsilon = 1e-3; + + int nbTrials = 100000; + float32_t maxDiff; + float32_t sign = 0.0f; + float32_t phase; + float32_t phase_increment; + size_t maxOK = 0; + float32_t best_correction = correction_ratio; + while(nbTrials > 0) + { + maxDiff = 0.0f; + phase = init_phase; + correction_ratio += sign * correction_ratio_step; + std::cout << std::setprecision(9) << std::fixed << " - Testing correction_ratio: " << correction_ratio << std::endl; + lfo1.updateCoefficient(correction_ratio); + phase_increment = freq / SAMPLING_FREQUENCY; + + for(size_t i = 0; i < NB; ++i) + { + float32_t v1 = lfo1.process(); + float32_t v2 = sin(phase); + // std::cout << std::setprecision(9) << std::fixed << " + phase: " << phase << " // v1: " << v1 << " / v2: " << v2 << " => diff: " << (v2 - v1); + + float32_t diff = abs(v1 - v2); + if(diff > maxDiff) maxDiff = diff; + + // std::cout << " - OK: " << ((diff < epsilon) ? "Yes" : "No") << std::endl; + + if(diff > epsilon) + { + if(maxOK < i) + { + maxOK = i + 1; + best_correction = correction_ratio; + } + + int quater = 0; + if(phase > (PI / 2.0f)) ++quater; + if(phase > PI) ++quater; + if(phase > (3.0f * PI / 2.0f)) ++quater; + + if(v1 < v2) + { + switch (quater) + { + case 0: + case 4: + // Sinus phase [0, PI / 2] => [0.00, 1.00] + // Sinus phase [3 * PI / 2, 2 * PI] => [-1.00, 0.00] + // lfo1 is too slow + updateCorrectionStep(sign, correction_ratio_step, +1); + break; + + case 1: + case 3: + // Sinus phase [PI / 2, PI] => [1.00, 0.00] + // Sinus phase [PI, 3 * PI / 2] => [0.00, -1.00] + // lfo1 is too fast + updateCorrectionStep(sign, correction_ratio_step, -1); + break; + + default: + FAIL() << "Issue on phase: " << phase; + break; + } + break; + } + else + { + switch (quater) + { + case 0: + case 4: + // Sinus phase [0, PI / 2] => [0.00, 1.00] + // Sinus phase [3 * PI / 2, 2 * PI] => [-1.00, 0.00] + // lfo1 is too fast + updateCorrectionStep(sign, correction_ratio_step, -1); + break; + + case 1: + case 3: + // Sinus phase [PI / 2, PI] => [1.00, 0.00] + // Sinus phase [PI, 3 * PI / 2] => [0.00, -1.00] + // lfo1 is too slow + updateCorrectionStep(sign, correction_ratio_step, +1); + break; + + default: + FAIL() << "Issue on phase: " << phase; + break; + } + break; + } + } + + if(correction_ratio_step < 1e-9) FAIL() << "correction_ratio_step became too small. maxOK = " << maxOK << " with best_correction = " << best_correction; + + phase += phase_increment; + if(phase > 2.0f * PI) phase -= 2.0f * PI; + } + + --nbTrials; + } + if(nbTrials > -2) + std::cout << "Correct correction ratio = " << correction_ratio << " with maxDiff = " << maxDiff << std::endl; + else + std::cout << "No matching correction ratio" << std::endl; + + std::cout << "maxOK = " << maxOK << " with best_correction = " << best_correction << std::endl;; + + + // std::stringstream ssFst; + // std::stringstream ssSin; + + // for(size_t i = 0; i < NB; ++i) + // { + // ssFst << lfo1.process() << (i == (NB - 1) ? "" : ", "); + // ssSin << sin(2.0f * PI * freq * i / SAMPLING_FREQUENCY + init_phase) << (i == (NB - 1) ? "" : ", "); + // } + + // std::ofstream _fst(getResultFile(full_test_name + ".fst.data", true)); + // _fst << ssFst.str(); + // _fst.close(); + + // std::ofstream _sin(getResultFile(full_test_name + ".sin.data", true)); + // _sin << ssSin.str(); + // _sin.close(); + + + // std::ofstream out(getResultFile(full_test_name + ".data.m", true)); + // out << "# m file to tune FastLFO component" << std::endl << std::endl; + // out << "# Parameters:" << std::endl + // << "# + frequency: " << freq << "Hz" << std::endl + // << "# + # samples: " << NB << std::endl << std::endl; + + // out << "time = 0 : " << (NB - 1) << ";" << std::endl; + // out << "fst_lfo = load(\"-ascii\", \"" << full_test_name << ".fst.data\");" << std::endl; + // out << "sin_lfo = load(\"-ascii\", \"" << full_test_name << ".sin.data\");" << std::endl; + + // out << std::endl << std::endl; + + // out << "plot(time, fst_lfo, '-', time, sin_lfo, '-');" << std::endl; + // out << "title('LFO tuning');" << std::endl; + // out << "legend('FastLFODebugger', 'Sinus');" << std::endl; + + // out.close(); +} + +int main(int argc, char **argv) +{ + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/src/test/test_fxLevelTuning.cpp b/src/test/test_fxLevelTuning.cpp index 38571ed..90f2328 100644 --- a/src/test/test_fxLevelTuning.cpp +++ b/src/test/test_fxLevelTuning.cpp @@ -177,8 +177,6 @@ TEST(LevelTuning, Delay) fx.setLeftDelayTime(0.15f); fx.setLeftDelayTime(0.2f); fx.setFeedback(0.35f); - fx.setFlutterRate(0.0f); - fx.setFlutterAmount(0.0f); PREPARE_AUDIO_TEST(size, inSamples, outSamples, full_test_name); float32_t sumIn = 0.0f; diff --git a/src/test/test_fx_components.cpp b/src/test/test_fx_components.cpp index 6c23d75..e812a19 100644 --- a/src/test/test_fx_components.cpp +++ b/src/test/test_fx_components.cpp @@ -12,6 +12,8 @@ #define MAX_SVF_SAMPLES 10000000 #define MAX_NB_ERRORS 100 +void testFastLFOPrecision(std::string file, float32_t freq, float32_t init_phase); + TEST(FXComponent, LFO) { const testing::TestInfo* test_info = testing::UnitTest::GetInstance()->current_test_info(); @@ -141,10 +143,10 @@ void testFastLFOPrecision(std::string file, float32_t freq, float32_t init_phase lfo1.setFrequency(freq); lfo2.setFrequency(freq); - std::string file0 = std::string("data/") + file + ".ComplexLFO." + std::to_string(freq) + "Hz-" + std::to_string(init_phase_deg) + ".data"; - std::string file1 = std::string("data/") + file + ".FastLFO." + std::to_string(freq) + "Hz-" + std::to_string(init_phase_deg) + ".data"; - std::string file2 = std::string("data/") + file + ".FastLFO2." + std::to_string(freq) + "Hz-" + std::to_string(init_phase_deg) + ".data"; - std::string file3 = std::string(file + ".") + std::to_string(freq) + "Hz-" + std::to_string(init_phase_deg) + ".data.m"; + std::string file0 = string("data/") + file + ".ComplexLFO." + std::to_string(freq) + "Hz-" + std::to_string(init_phase_deg) + ".data"; + std::string file1 = string("data/") + file + ".FastLFO." + std::to_string(freq) + "Hz-" + std::to_string(init_phase_deg) + ".data"; + std::string file2 = string("data/") + file + ".FastLFO2." + std::to_string(freq) + "Hz-" + std::to_string(init_phase_deg) + ".data"; + std::string file3 = string(file + ".") + std::to_string(freq) + "Hz-" + std::to_string(init_phase_deg) + ".data.m"; std::ofstream _lfo0(getResultFile(file0, true)); std::ofstream _lfo1(getResultFile(file1, true)); @@ -180,7 +182,7 @@ void testFastLFOPrecision(std::string file, float32_t freq, float32_t init_phase _m << "fast_lfo = load(\"-ascii\", \"" << file1 << "\");" << std::endl; _m << "fast_lfo2 = load(\"-ascii\", \"" << file2 << "\");" << std::endl; _m << "plot(time, cplx_lfo, '-b', 'LineWidth', 6, time, fast_lfo, '-r', 'LineWidth', 4, time, fast_lfo2, '-o', 'LineWidth', 4);" << std::endl; - _m << "title('LFO tuning @ " << freq << "Hz / " << init_phase_deg << "�');" << std::endl; + _m << "title('LFO tuning @ " << freq << "Hz / " << init_phase_deg << "°');" << std::endl; _m << "legend('ComplexLFO', 'FastLFO');" << std::endl; _m.close(); diff --git a/src/test/test_fx_helper.h b/src/test/test_fx_helper.h index 66fd41e..b574fc8 100644 --- a/src/test/test_fx_helper.h +++ b/src/test/test_fx_helper.h @@ -1,3 +1,22 @@ +// 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 . + +// +// test_fx_helper.h +// +// Set og helpers dedicated to code rationalization for the elaboration on unit tests. +// Author: Vincent Gauché +// #pragma once #include diff --git a/src/test/test_fx_mixing_console.cpp b/src/test/test_fx_mixing_console.cpp new file mode 100644 index 0000000..d08deba --- /dev/null +++ b/src/test/test_fx_mixing_console.cpp @@ -0,0 +1,565 @@ +#include +#include + +#include "test_fx_helper.h" +#include "wave.h" + +#include "../mixing_console.hpp" + +#define NB_MIXER_CHANNELS 8 + +class MixingConsoleScenarioTest : public testing::TestWithParam {}; + +typedef MixingConsole Mixer; + +void setupMixingConsoleFX(Mixer* mixer); +void setupMixingConsoleFX(Mixer* mixer, int scenarioId, size_t channel = 0); + +TEST_P(MixingConsoleScenarioTest, MixerOutputTest) +{ + MixerOutput v = this->GetParam(); + std::string str = toString(v); + MixerOutput mo = toIndex(str.c_str()); + ASSERT_EQ(v, mo); +} + +INSTANTIATE_TEST_SUITE_P(MixerOutputTest, MixingConsoleScenarioTest, testing::Range(MixerOutput::OutputStart, MixerOutput::kFXCount)); + +void setupMixingConsoleFX(Mixer* mixer) +{ + mixer->setChannelLevel(0, 1.0f); + mixer->setPan(0, 0.5f); + + mixer->getTube()->setMute(false); + mixer->getTube()->setOverdrive(0.85f); + + mixer->getChorus()->setMute(false); + mixer->getChorus()->setRate(0.4f); + mixer->getChorus()->setDepth(0.7f); + + mixer->getFlanger()->setMute(false); + mixer->getFlanger()->setRate(0.03f); + mixer->getFlanger()->setDepth(0.75f); + mixer->getFlanger()->setFeedback(0.7f); + + mixer->getOrbitone()->setMute(false); + mixer->getOrbitone()->setRate(0.4f); + mixer->getOrbitone()->setDepth(0.8f); + + mixer->getPhaser()->setMute(false); + mixer->getPhaser()->setRate(0.1f); + mixer->getPhaser()->setDepth(1.0f); + mixer->getPhaser()->setFeedback(0.7f); + mixer->getPhaser()->setNbStages(12); + + mixer->getDelay()->setMute(false); + mixer->getDelay()->setLeftDelayTime(0.15f); + mixer->getDelay()->setLeftDelayTime(0.20f); + mixer->getDelay()->setFeedback(0.7f); + + mixer->getPlateReverb()->setMute(false); + mixer->getPlateReverb()->set_bypass(false); + mixer->getPlateReverb()->size(0.7f); + mixer->getPlateReverb()->hidamp(0.5f); + mixer->getPlateReverb()->lodamp(0.5f); + mixer->getPlateReverb()->lowpass(0.3f); + mixer->getPlateReverb()->diffusion(0.65f); + mixer->getPlateReverb()->level(1.0f); + + mixer->getReverberator()->setMute(false); + mixer->getReverberator()->setInputGain(0.65f); + mixer->getReverberator()->setTime(0.89f); + mixer->getReverberator()->setDiffusion(0.75f); + mixer->getReverberator()->setLP(0.8f); +} + +#define ACTIVE_FX(activity, scenarioId, fx) activity[MixerOutput::fx] = ((scenarioId & (1 << MixerOutput::fx)) == (1 << MixerOutput::fx)) + +void setupMixingConsoleFX(Mixer* mixer, int scenarioId, size_t channel) +{ + mixer->setChannelLevel(channel, 1.0f); + mixer->setPan(channel, 0.5f); + + bool fxActivity[MixerOutput::kFXCount - 1]; + ACTIVE_FX(fxActivity, scenarioId, FX_Tube); + ACTIVE_FX(fxActivity, scenarioId, FX_Chorus); + ACTIVE_FX(fxActivity, scenarioId, FX_Flanger); + ACTIVE_FX(fxActivity, scenarioId, FX_Orbitone); + ACTIVE_FX(fxActivity, scenarioId, FX_Phaser); + ACTIVE_FX(fxActivity, scenarioId, FX_Delay); + ACTIVE_FX(fxActivity, scenarioId, FX_PlateReverb); + ACTIVE_FX(fxActivity, scenarioId, FX_Reverberator); + + size_t nbActiveFX = 0; + MixerOutput previousActivatedFX = MixerOutput::MainOutput; + + for(size_t i = 0; i < (MixerOutput::kFXCount - 1); ++i) + { + if(fxActivity[i]) + { + nbActiveFX++; + if(nbActiveFX == 1) + { + mixer->setSendLevel(channel, static_cast(i), 1.0f); + } + else + { + mixer->setFXSendLevel(previousActivatedFX, static_cast(i), 1.0f); + } + previousActivatedFX = static_cast(i); + } + } + + if(previousActivatedFX == MixerOutput::MainOutput) + { + mixer->setSendLevel(channel, MixerOutput::MainOutput, 1.0f); + } + else + { + mixer->setSendLevel(channel, MixerOutput::MainOutput, 0.25f); + mixer->setFXSendLevel(previousActivatedFX, MixerOutput::MainOutput, 0.75f); + } +} + +TEST(MixingConsole, ZeroSamplesTest) +{ + static const size_t length = 4; + + Mixer mixer(SAMPLING_FREQUENCY, length); + ASSERT_EQ(0, FULL_INSPECT((&mixer), true)); + + mixer.reset(); + ASSERT_EQ(0, FULL_INSPECT((&mixer), true)); + + setupMixingConsoleFX(&mixer); + ASSERT_EQ(0, FULL_INSPECT((&mixer), true)); + + mixer.setChannelLevel(0, 1.0f); + ASSERT_EQ(0, FULL_INSPECT((&mixer), true)); + + mixer.setPan(0, 0.5f); + ASSERT_EQ(0, FULL_INSPECT((&mixer), true)); + + float32_t samples[] = {0.0f, 0.0f, 0.0f, 0.0f}; + mixer.setInputSampleBuffer(0, samples); + mixer.preProcessInputSampleBuffer(0, 4); + ASSERT_EQ(0, FULL_INSPECT((&mixer), true)); + + mixer.setSendLevel(0, MixerOutput::MainOutput, 1.0f); + ASSERT_EQ(0, FULL_INSPECT((&mixer), true)); + + float32_t outL[4]; + float32_t outR[4]; + mixer.process(outL, outR); + ASSERT_EQ(0, FULL_INSPECT((&mixer), true)); + + mixer.setSendLevel(0, MixerOutput::FX_Tube, 1.0f); + mixer.setSendLevel(0, MixerOutput::FX_Delay, 1.0f); + mixer.setSendLevel(0, MixerOutput::FX_PlateReverb, 1.0f); + + mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Orbitone, 1.0f); + mixer.setFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::MainOutput, 0.5f); + mixer.setFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_PlateReverb, 1.0f); + mixer.setFXSendLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput, 0.5f); + mixer.setFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::MainOutput, 0.5f); + ASSERT_EQ(0, FULL_INSPECT((&mixer), true)); +} + +TEST(MixingConsole, DryProcessing) +{ + static const float32_t epsilon = 1e-4; + static const size_t length = 2; + + Mixer mixer(SAMPLING_FREQUENCY, length); + mixer.reset(); + mixer.setChannelLevel(0, 1.0f); + mixer.setPan(0, 0.5f); + + mixer.setSendLevel(0, MixerOutput::FX_Tube, 0.0f); + mixer.setSendLevel(0, MixerOutput::FX_Chorus, 0.0f); + mixer.setSendLevel(0, MixerOutput::FX_Flanger, 0.0f); + mixer.setSendLevel(0, MixerOutput::FX_Orbitone, 0.0f); + mixer.setSendLevel(0, MixerOutput::FX_Phaser, 0.0f); + mixer.setSendLevel(0, MixerOutput::FX_Delay, 0.0f); + mixer.setSendLevel(0, MixerOutput::FX_PlateReverb, 0.0f); + mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 0.0f); + + for(size_t i = MixerOutput::OutputStart; i < (MixerOutput::kFXCount - 1); ++i) + { + mixer.setFXSendLevel(static_cast(i), MixerOutput::MainOutput, 0.0f); + } + + mixer.setSendLevel(0, MixerOutput::MainOutput, 1.0f); + ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); + + float32_t in[length] = {0.1, 0.2}; + float32_t out[StereoChannels::kNumChannels][length]; + for(size_t i = 0; i < StereoChannels::kNumChannels; ++i) memset(out[i], 0, length * sizeof(float32_t)); + + mixer.setInputSampleBuffer(0, in); + mixer.preProcessInputSampleBuffer(0, 2); + ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); + + mixer.process( + out[StereoChannels::Left ], + out[StereoChannels::Right] + ); + ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); + + EXPECT_FLOAT_EQ(out[StereoChannels::Left ][0], out[StereoChannels::Right][0]); + EXPECT_FLOAT_EQ(out[StereoChannels::Left ][1], out[StereoChannels::Right][1]); + EXPECT_NEAR(out[StereoChannels::Left ][0], sqrt(2.0f) / 20.0f, epsilon); + EXPECT_NEAR(out[StereoChannels::Left ][1], sqrt(2.0f) / 10.0f, epsilon); +} + +TEST(MixingConsole, ReverberatorProcessing) +{ + static const float32_t epsilon = 1e-7; + static const size_t length = 2; + + Mixer mixer(SAMPLING_FREQUENCY, length); + mixer.reset(); + mixer.setChannelLevel(0, 1.0f); + mixer.setPan(0, 0.5f); + + mixer.setSendLevel(0, MixerOutput::MainOutput, 0.0f); + mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f); + mixer.setFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 1.0f); + ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); + + float32_t in[length] = {0.1, 0.2}; + float32_t out1[StereoChannels::kNumChannels][length]; + for(size_t i = 0; i < StereoChannels::kNumChannels; ++i) memset(out1[i], 0, length * sizeof(float32_t)); + + mixer.setInputSampleBuffer(0, in); + ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); + + mixer.process( + out1[StereoChannels::Left ], + out1[StereoChannels::Right] + ); + ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); + + mixer.reset(); + ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); + + float32_t out2[StereoChannels::kNumChannels][length]; + mixer.setInputSampleBuffer(0, in); + ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); + + mixer.process( + out2[StereoChannels::Left ], + out2[StereoChannels::Right] + ); + ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); + + EXPECT_NEAR(out1[StereoChannels::Left ][0], out2[StereoChannels::Left ][0], epsilon); + EXPECT_NEAR(out1[StereoChannels::Right][0], out2[StereoChannels::Right][0], epsilon); + EXPECT_NEAR(out1[StereoChannels::Left ][1], out2[StereoChannels::Left ][1], epsilon); + EXPECT_NEAR(out1[StereoChannels::Right][1], out2[StereoChannels::Right][1], epsilon); +} + +TEST(MixingConsole, ReverberatorNoiseProcessing) +{ + static const size_t length = 1024; + + Mixer mixer(SAMPLING_FREQUENCY, length); + mixer.reset(); + mixer.setChannelLevel(0, 1.0f); + mixer.setPan(0, 0.5f); + + mixer.setSendLevel(0, MixerOutput::MainOutput, 0.0f); + mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f); + mixer.setFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 1.0f); + ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); + + float32_t in[length]; + for(size_t i = 0; i < length; ++i) in[i] = getRandomValue(); + + float32_t out[StereoChannels::kNumChannels][length]; + for(size_t i = 0; i < StereoChannels::kNumChannels; ++i) memset(out[i], 0, length * sizeof(float32_t)); + + mixer.setInputSampleBuffer(0, in); + ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); + + mixer.process( + out[StereoChannels::Left ], + out[StereoChannels::Right] + ); + ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); +} + +TEST(MixingConsole, StandardUsageProcessingByInjection) +{ + PREPARE_AUDIO_TEST(size, inSamples, outSamples, full_test_name); + + Mixer mixer(SAMPLING_FREQUENCY, size); + setupMixingConsoleFX(&mixer); + + mixer.getTube()->setOverdrive(0.15f); + + mixer.setSendLevel(0, MixerOutput::FX_Tube, 1.0f); + mixer.setSendLevel(0, MixerOutput::FX_Phaser, 1.0f); + // mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 1.0f); + // mixer.setSendLevel(0, MixerOutput::FX_Chorus, 1.0f); + // mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f); + mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Chorus, 1.0f); + mixer.setFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Reverberator, 1.0f); + mixer.setFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Delay, 1.0f); + + mixer.setSendLevel(0, MixerOutput::MainOutput, 0.25f); + mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 0.1f); + mixer.setFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::MainOutput, 0.15f); + mixer.setFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.3f); + mixer.setFXSendLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput, 0.3f); + + mixer.injectInputSamples(0, inSamples[StereoChannels::Left], inSamples[StereoChannels::Right], size); + mixer.process(outSamples[0], outSamples[1]); + ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); + saveWaveFile(getResultFile(full_test_name + ".wav", true), outSamples[0], outSamples[1], size, static_cast(SAMPLING_FREQUENCY), 16); + + CLEANUP_AUDIO_TEST(inSamples, outSamples); +} + +TEST(MixingConsole, StandardUsageProcessing) +{ + static const size_t MAX_BUFFER_SIZE = 4096; + static const size_t BUFFER_SIZE = 256; + + PREPARE_AUDIO_TEST(size, inSamples, outSamples, full_test_name); + + Mixer mixer(SAMPLING_FREQUENCY, MAX_BUFFER_SIZE); + + float32_t channelBuffer[MAX_BUFFER_SIZE]; + memset(channelBuffer, 0, MAX_BUFFER_SIZE * sizeof(float32_t)); + mixer.setInputSampleBuffer(0, channelBuffer); + + setupMixingConsoleFX(&mixer); + + mixer.getTube()->setOverdrive(0.15f); + + mixer.setSendLevel(0, MixerOutput::FX_Tube, 1.0f); + mixer.setSendLevel(0, MixerOutput::FX_Phaser, 1.0f); + // mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 1.0f); + // mixer.setSendLevel(0, MixerOutput::FX_Chorus, 1.0f); + // mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f); + mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Chorus, 1.0f); + mixer.setFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Reverberator, 1.0f); + mixer.setFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Delay, 1.0f); + + mixer.setSendLevel(0, MixerOutput::MainOutput, 0.25f); + mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 0.1f); + mixer.setFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::MainOutput, 0.15f); + mixer.setFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.3f); + mixer.setFXSendLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput, 0.3f); + + float32_t* inS = inSamples[StereoChannels::Left]; + float32_t* outS[StereoChannels::kNumChannels]; + outS[StereoChannels::Left ] = outSamples[StereoChannels::Left ]; + outS[StereoChannels::Right] = outSamples[StereoChannels::Right]; + size_t s = size; + + while(s > 0) + { + size_t nb = (s > BUFFER_SIZE) ? BUFFER_SIZE : s; + + memcpy(channelBuffer, inS, nb * sizeof(float32_t)); + + mixer.preProcessInputSampleBuffer(0, nb); + mixer.process(outS[StereoChannels::Left ], outS[StereoChannels::Right]); + // ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); + + inS += nb; + outS[StereoChannels::Left ] += nb; + outS[StereoChannels::Right] += nb; + s -= nb; + } + + saveWaveFile(getResultFile(full_test_name + ".wav", true), outSamples[0], outSamples[1], size, static_cast(SAMPLING_FREQUENCY), 16); + + CLEANUP_AUDIO_TEST(inSamples, outSamples); +} + +TEST(MixingConsole, StandardUsageProcessingAllMixerChannels) +{ + static const size_t MAX_BUFFER_SIZE = 4096; + static const size_t BUFFER_SIZE = 256; + + PREPARE_AUDIO_TEST(size, inSamples, outSamples, full_test_name); + + Mixer mixer(SAMPLING_FREQUENCY, MAX_BUFFER_SIZE); + + float32_t channelBuffer[NB_MIXER_CHANNELS][MAX_BUFFER_SIZE]; + for(size_t i = 0; i < NB_MIXER_CHANNELS; ++i) + { + memset(channelBuffer[i], 0, MAX_BUFFER_SIZE * sizeof(float32_t)); + mixer.setInputSampleBuffer(i, channelBuffer[i]); + } + + setupMixingConsoleFX(&mixer); + + mixer.getTube()->setOverdrive(0.15f); + + mixer.setSendLevel(0, MixerOutput::FX_Tube, 1.0f); + mixer.setSendLevel(0, MixerOutput::FX_Phaser, 1.0f); + // mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 1.0f); + // mixer.setSendLevel(0, MixerOutput::FX_Chorus, 1.0f); + // mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f); + mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Chorus, 1.0f); + mixer.setFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Reverberator, 1.0f); + mixer.setFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Delay, 1.0f); + + mixer.setSendLevel(0, MixerOutput::MainOutput, 0.25f); + mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 0.1f); + mixer.setFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::MainOutput, 0.15f); + mixer.setFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.3f); + mixer.setFXSendLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput, 0.3f); + + float32_t* inS = inSamples[StereoChannels::Left]; + float32_t* outS[StereoChannels::kNumChannels]; + outS[StereoChannels::Left ] = outSamples[StereoChannels::Left ]; + outS[StereoChannels::Right] = outSamples[StereoChannels::Right]; + size_t s = size; + + while(s > 0) + { + size_t nb = (s > BUFFER_SIZE) ? BUFFER_SIZE : s; + + memcpy(channelBuffer[0], inS, nb * sizeof(float32_t)); + + for(size_t i = 0; i < mixer.getChannelNumber(); ++i) + { + mixer.preProcessInputSampleBuffer(i, nb); + } + mixer.process(outS[StereoChannels::Left ], outS[StereoChannels::Right]); + + inS += nb; + outS[StereoChannels::Left ] += nb; + outS[StereoChannels::Right] += nb; + s -= nb; + } + + saveWaveFile(getResultFile(full_test_name + ".wav", true), outSamples[0], outSamples[1], size, static_cast(SAMPLING_FREQUENCY), 16); + + CLEANUP_AUDIO_TEST(inSamples, outSamples); +} + +TEST(MixingConsole, StandardUsageProcessingAllMixerChannels2) +{ + static const size_t MAX_BUFFER_SIZE = 4096; + static const size_t BUFFER_SIZE = 256; + + PREPARE_AUDIO_TEST(size, inSamples, outSamples, full_test_name); + + Mixer mixer(SAMPLING_FREQUENCY, MAX_BUFFER_SIZE); + + float32_t channelBuffer[NB_MIXER_CHANNELS][MAX_BUFFER_SIZE]; + for(size_t i = 0; i < NB_MIXER_CHANNELS; ++i) + { + memset(channelBuffer[i], 0, MAX_BUFFER_SIZE * sizeof(float32_t)); + mixer.setInputSampleBuffer(i, channelBuffer[i]); + } + + setupMixingConsoleFX(&mixer); + + for(size_t i = 0; i < NB_MIXER_CHANNELS; ++i) + { + mixer.setSendLevel(i, static_cast(i), 1.0f); + mixer.setFXSendLevel(static_cast(i), MixerOutput::MainOutput, 0.5f); + mixer.setSendLevel(i, MixerOutput::MainOutput, 0.5f); + } + + float32_t* inS = inSamples[StereoChannels::Left]; + float32_t* outS[StereoChannels::kNumChannels]; + outS[StereoChannels::Left ] = outSamples[StereoChannels::Left ]; + outS[StereoChannels::Right] = outSamples[StereoChannels::Right]; + size_t s = size; + + while(s > 0) + { + size_t nb = (s > BUFFER_SIZE) ? BUFFER_SIZE : s; + + for(size_t i = 0; i < mixer.getChannelNumber(); ++i) + { + memcpy(channelBuffer[i], inS, nb * sizeof(float32_t)); + mixer.preProcessInputSampleBuffer(i, nb); + } + mixer.process(outS[StereoChannels::Left ], outS[StereoChannels::Right]); + + inS += nb; + outS[StereoChannels::Left ] += nb; + outS[StereoChannels::Right] += nb; + s -= nb; + } + + saveWaveFile(getResultFile(full_test_name + ".wav", true), outSamples[0], outSamples[1], size, static_cast(SAMPLING_FREQUENCY), 16); + + CLEANUP_AUDIO_TEST(inSamples, outSamples); +} + +TEST_P(FXScenarioTest, FXProcessingScenario) +{ + static const size_t MAX_BUFFER_SIZE = 4096; + static const size_t BUFFER_SIZE = 256; + + PREPARE_AUDIO_TEST(size, inSamples, outSamples, full_test_name); + + Mixer mixer(SAMPLING_FREQUENCY, MAX_BUFFER_SIZE); + + float32_t channelBuffer[NB_MIXER_CHANNELS][MAX_BUFFER_SIZE]; + for(size_t i = 0; i < NB_MIXER_CHANNELS; ++i) + { + memset(channelBuffer[i], 0, MAX_BUFFER_SIZE * sizeof(float32_t)); + mixer.setInputSampleBuffer(i, channelBuffer[i]); + } + + setupMixingConsoleFX(&mixer); + + int scenarioId = this->GetParam(); + setupMixingConsoleFX((&mixer), scenarioId); + + float32_t* inS = inSamples[StereoChannels::Left]; + float32_t* outS[StereoChannels::kNumChannels]; + outS[StereoChannels::Left ] = outSamples[StereoChannels::Left ]; + outS[StereoChannels::Right] = outSamples[StereoChannels::Right]; + size_t s = size; + + while(s > 0) + { + size_t nb = (s > BUFFER_SIZE) ? BUFFER_SIZE : s; + + for(size_t i = 0; i < mixer.getChannelNumber(); ++i) + { + memcpy(channelBuffer[i], inS, nb * sizeof(float32_t)); + mixer.preProcessInputSampleBuffer(i, nb); + } + mixer.process(outS[StereoChannels::Left ], outS[StereoChannels::Right]); + + inS += nb; + outS[StereoChannels::Left ] += nb; + outS[StereoChannels::Right] += nb; + s -= nb; + } + + std::string filename = ""; + for(size_t i = 0; i < (MixerOutput::kFXCount - 1); ++i) + { + int k = 1 << i; + if((scenarioId & k) == 0) + { + continue; + } + + if(filename.size() > 0) + { + filename += ", "; + } + filename += toString(static_cast(i)); + } + + saveWaveFile(getResultFile(full_test_name + " mixing-console[ " + filename + " ].wav", true), outSamples[0], outSamples[1], size, static_cast(SAMPLING_FREQUENCY), 16); + + CLEANUP_AUDIO_TEST(inSamples, outSamples); +} + +INSTANTIATE_TEST_SUITE_P(MixingConsole, FXScenarioTest, testing::Range(0, 1 << (MixerOutput::kFXCount - 1))); diff --git a/src/test/test_fx_mixing_console_unitary.cpp b/src/test/test_fx_mixing_console_unitary.cpp new file mode 100644 index 0000000..313d040 --- /dev/null +++ b/src/test/test_fx_mixing_console_unitary.cpp @@ -0,0 +1,187 @@ +#include "test_fx_helper.h" + +#include "../mixing_console.hpp" + +typedef MixingConsole<1> Mixer; + +TEST(MixingConsole, ShortBuffer) +{ + static const float32_t SINPI_4 = std::sqrt(2.0f) / 2.0f; + static const float32_t epsilon = 1e-4; + + const testing::TestInfo* test_info = testing::UnitTest::GetInstance()->current_test_info(); + std::string full_test_name = test_info->test_case_name(); + full_test_name += "."; + full_test_name += test_info->name(); + + const size_t size = 10; + Mixer* mixer = new Mixer(SAMPLING_FREQUENCY, size); + mixer->reset(); + mixer->setChannelLevel(0, 1.0f); + mixer->setPan(0, 0.5f); + + mixer->setSendLevel(0, MixerOutput::MainOutput, 1.0f); + + float32_t inSamples[size]; + for(size_t s = 0; s < size; ++s) inSamples[s] = getRandomValue(); + float32_t outSamples[2][size]; + memset(outSamples[0], 0, size * sizeof(float32_t)); + memset(outSamples[1], 0, size * sizeof(float32_t)); + + mixer->setInputSampleBuffer(0, inSamples); + mixer->preProcessInputSampleBuffer(0, size); + ASSERT_EQ(0, FULL_INSPECT(mixer, true)) << full_test_name << " Mixer.setInputSampleBuffer"; + + mixer->process(outSamples[0], outSamples[1]); + ASSERT_EQ(0, FULL_INSPECT(mixer, true)) << full_test_name << " Mixer.process"; + for(size_t s = 0; s < size; ++s) + { + EXPECT_NEAR(outSamples[0][s], outSamples[1][s], epsilon); + EXPECT_NEAR(outSamples[0][s], inSamples[s] * SINPI_4, epsilon); + } + + delete mixer; +} + +TEST(MixingConsole, ReverberatorShortBuffer) +{ + const testing::TestInfo* test_info = testing::UnitTest::GetInstance()->current_test_info(); + std::string full_test_name = test_info->test_case_name(); + full_test_name += "."; + full_test_name += test_info->name(); + + const size_t size = 10; + Mixer* mixer = new Mixer(SAMPLING_FREQUENCY, size); + mixer->reset(); + mixer->setChannelLevel(0, 1.0f); + mixer->setPan(0, 0.5f); + + mixer->getReverberator()->setInputGain(0.35f); + mixer->getReverberator()->setTime(0.69f); + mixer->getReverberator()->setDiffusion(0.7f); + mixer->getReverberator()->setLP(0.8f); + + mixer->setSendLevel(0, MixerOutput::MainOutput, 0.4f); + mixer->setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f); + mixer->setFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.6f); + + float32_t inSamples[size]; + for(size_t s = 0; s < size; ++s) inSamples[s] = getRandomValue(); + float32_t outSamples[2][size]; + memset(outSamples[0], 0, size * sizeof(float32_t)); + memset(outSamples[1], 0, size * sizeof(float32_t)); + + mixer->setInputSampleBuffer(0, inSamples); + mixer->preProcessInputSampleBuffer(0, size); + ASSERT_EQ(0, FULL_INSPECT(mixer, true)) << full_test_name << " Mixer.setInputSampleBuffer"; + + mixer->process(outSamples[0], outSamples[1]); + ASSERT_EQ(0, FULL_INSPECT(mixer, true)) << full_test_name << " Mixer.process"; + + delete mixer; +} + +TEST(MixingConsole, DrySamplesBoundariesTest) +{ + const testing::TestInfo* test_info = testing::UnitTest::GetInstance()->current_test_info(); + std::string full_test_name = test_info->test_case_name(); + full_test_name += "."; + full_test_name += test_info->name(); + + size_t size; + float32_t** inSamples = readWaveFile(AUDIO_SOURCE_FILE, size); + + Mixer* mixer = new Mixer(SAMPLING_FREQUENCY, size); + mixer->reset(); + FULL_INSPECT2(mixer, true, "Mixer.reset"); + + mixer->setChannelLevel(0, 1.0f); + mixer->setPan(0, 0.5f); + mixer->setSendLevel(0, MixerOutput::MainOutput, 1.0f); + + mixer->setInputSampleBuffer(0, inSamples[0]); + mixer->preProcessInputSampleBuffer(0, size); + + float32_t** outSamples = new float32_t*[2]; + outSamples[0] = new float32_t[size]; + outSamples[1] = new float32_t[size]; + memset(outSamples[0], 0, size * sizeof(float32_t)); + memset(outSamples[1], 0, size * sizeof(float32_t)); + + mixer->process(outSamples[0], outSamples[1]); + + size_t nb_errors = 0; + for(size_t i = 0; i < size; ++i) + { + nb_errors += fullInspector(full_test_name + ".outputSampleTest", inSamples[0][i], -1.0f, 1.0f, true); + nb_errors += fullInspector(full_test_name + ".outputSampleTest", inSamples[1][i], -1.0f, 1.0f, true); + } + ASSERT_EQ(0, nb_errors) << full_test_name << ".outputSampleTest"; + + delete[] inSamples[0]; + delete[] inSamples[1]; + delete[] inSamples; + + delete[] outSamples[0]; + delete[] outSamples[1]; + delete[] outSamples; + + delete mixer; +} + +TEST(MixingConsole, ReverberatorSamplesBoundariesTest) +{ + const testing::TestInfo* test_info = testing::UnitTest::GetInstance()->current_test_info(); + std::string full_test_name = test_info->test_case_name(); + full_test_name += "."; + full_test_name += test_info->name(); + + size_t size; + float32_t** inSamples = readWaveFile(AUDIO_SOURCE_FILE, size); + + float32_t** outSamples = new float32_t*[2]; + outSamples[0] = new float32_t[size]; + outSamples[1] = new float32_t[size]; + memset(outSamples[0], 0, size * sizeof(float32_t)); + memset(outSamples[1], 0, size * sizeof(float32_t)); + + Mixer* mixer = new Mixer(SAMPLING_FREQUENCY, size); + mixer->reset(); + mixer->setChannelLevel(0, 1.0f); + mixer->setPan(0, 0.5f); + + mixer->setSendLevel(0, MixerOutput::MainOutput, 0.4f); + mixer->setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f); + mixer->setFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.6f); + + mixer->getReverberator()->setMute(false); + mixer->getReverberator()->setInputGain(0.35); + mixer->getReverberator()->setTime(0.65); + mixer->getReverberator()->setDiffusion(0.8); + mixer->getReverberator()->setLP(0.7f); + + mixer->setInputSampleBuffer(0, inSamples[0]); + mixer->preProcessInputSampleBuffer(0, size); + mixer->process(outSamples[0], outSamples[1]); + ASSERT_EQ(0, FULL_INSPECT2(mixer, true, full_test_name + "Mixer.process")) << full_test_name << " Mixer.process"; + + saveWaveFile(getResultFile(full_test_name + ".wav", true), outSamples[0], outSamples[1], size, static_cast(SAMPLING_FREQUENCY), 16); + + size_t nb_errors = 0; + for(size_t i = 0; i < size; ++i) + { + nb_errors += fullInspector(full_test_name + ".outputSampleTest", inSamples[0][i], -1.0f, 1.0f, true); + nb_errors += fullInspector(full_test_name + ".outputSampleTest", inSamples[1][i], -1.0f, 1.0f, true); + } + ASSERT_EQ(0, nb_errors) << full_test_name << ".outputSampleTest"; + + delete[] inSamples[0]; + delete[] inSamples[1]; + delete[] inSamples; + + delete[] outSamples[0]; + delete[] outSamples[1]; + delete[] outSamples; + + delete mixer; +} diff --git a/src/test/test_fx_rack.cpp b/src/test/test_fx_rack.cpp index 8d38dd5..53306a9 100644 --- a/src/test/test_fx_rack.cpp +++ b/src/test/test_fx_rack.cpp @@ -7,13 +7,15 @@ using namespace std; #define MAX_SVF_SAMPLES 10000000 #define MAX_NB_ERRORS 100 +void setupRack(FXRack* rack, int scenario); + void setupRack(FXRack* rack, int scenario) { rack->setWetLevel(1.0f); rack->getTube()->setEnable(Active(scenario, FXSwitch::FX__Tube)); rack->getTube()->setWetLevel(0.25f); - rack->getTube()->setOverdrive(0.25f); + rack->getTube()->setOverdrive(0.5f); rack->getChorus()->setEnable(Active(scenario, FXSwitch::FX__Chorus)); rack->getChorus()->setWetLevel(0.5f); @@ -43,8 +45,6 @@ void setupRack(FXRack* rack, int scenario) rack->getDelay()->setLeftDelayTime(0.05f); rack->getDelay()->setLeftDelayTime(0.07f); rack->getDelay()->setFeedback(0.35f); - rack->getDelay()->setFlutterRate(0.0f); - rack->getDelay()->setFlutterAmount(0.0f); rack->getReverberator()->setEnable(Active(scenario, FXSwitch::FX__Reverberator)); rack->getReverberator()->setWetLevel(0.5f); diff --git a/src/test/test_fx_shimmer_reverb.cpp b/src/test/test_fx_shimmer_reverb.cpp new file mode 100644 index 0000000..272ce94 --- /dev/null +++ b/src/test/test_fx_shimmer_reverb.cpp @@ -0,0 +1,182 @@ +#include + +#include "test_fx_helper.h" +#include "../fx_reverberator.h" + +TEST(FXShimmer, TransientSilence) +{ + const testing::TestInfo* test_info = testing::UnitTest::GetInstance()->current_test_info(); + std::string full_test_name = test_info->test_case_name(); + full_test_name += "."; + full_test_name += test_info->name(); + + const size_t size = static_cast(SAMPLING_FREQUENCY); + float32_t* inSamples = new float32_t[size]; + memset(inSamples, 0, size * sizeof(float32_t)); + + float32_t* outSamplesL = new float32_t[size]; + float32_t* outSamplesR = new float32_t[size]; + memset(outSamplesL, 0, size * sizeof(float32_t)); + memset(outSamplesR, 0, size * sizeof(float32_t)); + + Reverberator* shimmer = new Reverberator(SAMPLING_FREQUENCY); + + shimmer->setInputGain(0.55f); + shimmer->setTime(0.75f); + shimmer->setDiffusion(0.8f); + shimmer->setLP(0.7f); + + shimmer->reset(); + for(size_t i = 0; i < size; ++i) + { + shimmer->processSample( + inSamples[i], + inSamples[i], + outSamplesL[i], + outSamplesR[i] + ); + } + + saveWaveFile(getResultFile(full_test_name + ".wav", true), outSamplesL, outSamplesR, size, SAMPLING_FREQUENCY, 16); + + delete shimmer; + + delete[] inSamples; + + delete[] outSamplesL; + delete[] outSamplesR; +} + +TEST(FXShimmer, TransientSilenceWithDirac) +{ + const testing::TestInfo* test_info = testing::UnitTest::GetInstance()->current_test_info(); + std::string full_test_name = test_info->test_case_name(); + full_test_name += "."; + full_test_name += test_info->name(); + + const size_t size = 4 * static_cast(SAMPLING_FREQUENCY); + float32_t* inSamples = new float32_t[size]; + memset(inSamples, 0, size * sizeof(float32_t)); + inSamples[0] = 1.0f; + + float32_t* outSamplesL = new float32_t[size]; + float32_t* outSamplesR = new float32_t[size]; + memset(outSamplesL, 0, size * sizeof(float32_t)); + memset(outSamplesR, 0, size * sizeof(float32_t)); + + Reverberator* shimmer = new Reverberator(SAMPLING_FREQUENCY); + + shimmer->setInputGain(0.55f); + shimmer->setTime(0.75f); + shimmer->setDiffusion(0.8f); + shimmer->setLP(0.7f); + + shimmer->reset(); + for(size_t i = 0; i < size; ++i) + { + shimmer->processSample( + inSamples[i], + inSamples[i], + outSamplesL[i], + outSamplesR[i] + ); + } + + saveWaveFile(getResultFile(full_test_name + ".wav", true), outSamplesL, outSamplesR, size, SAMPLING_FREQUENCY, 16); + + delete shimmer; + + delete[] inSamples; + + delete[] outSamplesL; + delete[] outSamplesR; +} + +TEST(FXShimmer, TransientNoise) +{ + const testing::TestInfo* test_info = testing::UnitTest::GetInstance()->current_test_info(); + std::string full_test_name = test_info->test_case_name(); + full_test_name += "."; + full_test_name += test_info->name(); + + const size_t size = static_cast(SAMPLING_FREQUENCY); + float32_t* inSamples = new float32_t[size]; + for(size_t i = 0; i < size; ++i) inSamples[i] = getRandomValue(); + + float32_t* outSamplesL = new float32_t[size]; + float32_t* outSamplesR = new float32_t[size]; + memset(outSamplesL, 0, size * sizeof(float32_t)); + memset(outSamplesR, 0, size * sizeof(float32_t)); + + Reverberator* shimmer = new Reverberator(SAMPLING_FREQUENCY); + + shimmer->setInputGain(0.55f); + shimmer->setTime(0.75f); + shimmer->setDiffusion(0.8f); + shimmer->setLP(0.7f); + + shimmer->reset(); + for(size_t i = 0; i < size; ++i) + { + shimmer->processSample( + inSamples[i], + inSamples[i], + outSamplesL[i], + outSamplesR[i] + ); + } + + saveWaveFile(getResultFile(full_test_name + ".wav", true), outSamplesL, outSamplesR, size, SAMPLING_FREQUENCY, 16); + + delete shimmer; + + delete[] inSamples; + + delete[] outSamplesL; + delete[] outSamplesR; +} + +TEST(FXShimmer, TransientMusic) +{ + const testing::TestInfo* test_info = testing::UnitTest::GetInstance()->current_test_info(); + std::string full_test_name = test_info->test_case_name(); + full_test_name += "."; + full_test_name += test_info->name(); + + size_t size; + float32_t** inSamples = readWaveFile(AUDIO_SOURCE_FILE, size); + + float32_t* outSamplesL = new float32_t[size]; + float32_t* outSamplesR = new float32_t[size]; + memset(outSamplesL, 0, size * sizeof(float32_t)); + memset(outSamplesR, 0, size * sizeof(float32_t)); + + Reverberator* shimmer = new Reverberator(SAMPLING_FREQUENCY); + + shimmer->setInputGain(0.55f); + shimmer->setTime(0.75f); + shimmer->setDiffusion(0.8f); + shimmer->setLP(0.7f); + + shimmer->reset(); + for(size_t i = 0; i < size; ++i) + { + shimmer->processSample( + inSamples[0][i], + inSamples[1][i], + outSamplesL[i], + outSamplesR[i] + ); + } + + saveWaveFile(getResultFile(full_test_name + ".wav", true), outSamplesL, outSamplesR, size, SAMPLING_FREQUENCY, 16); + + delete shimmer; + + delete[] inSamples[0]; + delete[] inSamples[1]; + delete[] inSamples; + + delete[] outSamplesL; + delete[] outSamplesR; +} diff --git a/src/test/test_unitFXTuning.cpp b/src/test/test_unitFXTuning.cpp index 6abc9ab..f6e87b9 100644 --- a/src/test/test_unitFXTuning.cpp +++ b/src/test/test_unitFXTuning.cpp @@ -1,5 +1,6 @@ #include "test_fx_helper.h" +#include "../fx_dry.h" #include "../fx_tube.h" #include "../fx_chorus.h" #include "../fx_flanger.h" @@ -7,7 +8,20 @@ #include "../fx_phaser.h" #include "../fx_delay.h" #include "../effect_platervbstereo.h" +#include "../fx_diffuser.h" +#include "../fx_pitch_shifter.h" #include "../fx_reverberator.h" +#include "../fx_shimmer_reverb.h" + +TEST(UnitFXTuning, Dry) +{ + Dry fx(SAMPLING_FREQUENCY); + + PREPARE_AUDIO_TEST(size, inSamples, outSamples, full_test_name); + SIMPLE_AUDIO_LOOP(inSamples, outSamples, size, inL, inR, outL, outR, fx); + SAVE_AUDIO_RESULTS(full_test_name, outSamples, size); + CLEANUP_AUDIO_TEST(inSamples, outSamples); +} TEST(UnitFXTuning, Tube) { @@ -77,8 +91,6 @@ TEST(UnitFXTuning, Delay) fx.setLeftDelayTime(0.25f); fx.setLeftDelayTime(0.40f); fx.setFeedback(0.55f); - fx.setFlutterRate(0.01f); - fx.setFlutterAmount(0.05f); PREPARE_AUDIO_TEST(size, inSamples, outSamples, full_test_name); SIMPLE_AUDIO_LOOP(inSamples, outSamples, size, inL, inR, outL, outR, fx); @@ -103,6 +115,28 @@ TEST(UnitFXTuning, PlateReverb) CLEANUP_AUDIO_TEST(inSamples, outSamples); } +TEST(UnitFXTuning, Diffuser) +{ + Diffuser fx(SAMPLING_FREQUENCY); + + PREPARE_AUDIO_TEST(size, inSamples, outSamples, full_test_name); + SIMPLE_AUDIO_LOOP(inSamples, outSamples, size, inL, inR, outL, outR, fx); + SAVE_AUDIO_RESULTS(full_test_name, outSamples, size); + CLEANUP_AUDIO_TEST(inSamples, outSamples); +} + +TEST(UnitFXTuning, PitchShifter) +{ + PitchShifter fx(SAMPLING_FREQUENCY); + fx.setSize(0.5f); + fx.setTranspose(12.0f); + + PREPARE_AUDIO_TEST(size, inSamples, outSamples, full_test_name); + SIMPLE_AUDIO_LOOP(inSamples, outSamples, size, inL, inR, outL, outR, fx); + SAVE_AUDIO_RESULTS(full_test_name, outSamples, size); + CLEANUP_AUDIO_TEST(inSamples, outSamples); +} + TEST(UnitFXTuning, Reverberator) { Reverberator fx(SAMPLING_FREQUENCY); @@ -116,3 +150,20 @@ TEST(UnitFXTuning, Reverberator) SAVE_AUDIO_RESULTS(full_test_name, outSamples, size); CLEANUP_AUDIO_TEST(inSamples, outSamples); } + +TEST(UnitFXTuning, ShimmerReverb) +{ + const float32_t amount = 0.6f; + + ShimmerReverb fx(SAMPLING_FREQUENCY); + fx.setInputGain(0.2f); + fx.setReverbAmount(amount); + fx.setDiffusion(0.7f); + fx.setFeedback(0.8f); + + PREPARE_AUDIO_TEST(size, inSamples, outSamples, full_test_name); + SIMPLE_AUDIO_LOOP(inSamples, outSamples, size, inL, inR, outL, outR, fx); + SAVE_AUDIO_RESULTS(full_test_name, outSamples, size); + CLEANUP_AUDIO_TEST(inSamples, outSamples); +} + diff --git a/src/test/wave.h b/src/test/wave.h index 918a4ce..08834b7 100644 --- a/src/test/wave.h +++ b/src/test/wave.h @@ -1,3 +1,22 @@ +// 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 . + +// +// wave.h +// +// Set of helpers to manipulate RIFF Wave files. These helpers are used in the unit tests. +// Author: Vincent Gauché +// #pragma once #include diff --git a/src/uimenu.cpp b/src/uimenu.cpp index 9cf319c..f16cf21 100644 --- a/src/uimenu.cpp +++ b/src/uimenu.cpp @@ -34,193 +34,521 @@ using namespace std; const CUIMenu::TMenuItem CUIMenu::s_MenuRoot[] = { - {"MiniDexed", MenuHandler, s_MainMenu}, + {"MiniDexed", CUIMenu::MenuHandler, CUIMenu::s_MainMenu}, {0} }; // inserting menu items before "TG1" affect TGShortcutHandler() const CUIMenu::TMenuItem CUIMenu::s_MainMenu[] = { - {"TG1", MenuHandler, s_TGMenu, 0}, + {"TG1", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 0}, #ifdef ARM_ALLOW_MULTI_CORE - {"TG2", MenuHandler, s_TGMenu, 1}, - {"TG3", MenuHandler, s_TGMenu, 2}, - {"TG4", MenuHandler, s_TGMenu, 3}, - {"TG5", MenuHandler, s_TGMenu, 4}, - {"TG6", MenuHandler, s_TGMenu, 5}, - {"TG7", MenuHandler, s_TGMenu, 6}, - {"TG8", MenuHandler, s_TGMenu, 7}, + {"TG2", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 1}, + {"TG3", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 2}, + {"TG4", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 3}, + {"TG5", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 4}, + {"TG6", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 5}, + {"TG7", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 6}, + {"TG8", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 7}, #endif - {"Effects", MenuHandler, s_EffectsMenu}, - {"Performance", MenuHandler, s_PerformanceMenu}, + {"Effects", CUIMenu::MenuHandler, CUIMenu::s_EffectsMenu}, + {"Performance", CUIMenu::MenuHandler, CUIMenu::s_PerformanceMenu}, {0} }; +#if defined(MIXING_CONSOLE_ENABLE) +const CUIMenu::TMenuItem CUIMenu::s_TGFXMenu[] = +{ + {"> Tub", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube}, + {"> ChR", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus}, + {"> Flg", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger}, + {"> Orb", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone}, + {"> PhR", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser}, + {"> Dly", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay}, + {"> Plt", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb}, + {"> Rev", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator}, + {"> Main", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXMainOutput}, + {0} +}; +#endif + const CUIMenu::TMenuItem CUIMenu::s_TGMenu[] = { - {"Voice", EditProgramNumber}, - {"Bank", EditVoiceBankNumber}, - {"Volume", EditTGParameter, 0, CMiniDexed::TGParameterVolume}, + {"Voice", CUIMenu::EditProgramNumber}, + {"Bank", CUIMenu::EditVoiceBankNumber}, + {"Volume", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterVolume}, #ifdef ARM_ALLOW_MULTI_CORE - {"Pan", EditTGParameter, 0, CMiniDexed::TGParameterPan}, + {"Pan", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterPan}, #endif - {"Reverb-Send", EditTGParameter, 0, CMiniDexed::TGParameterReverbSend}, - {"Detune", EditTGParameter, 0, CMiniDexed::TGParameterMasterTune}, - {"Cutoff", EditTGParameter, 0, CMiniDexed::TGParameterCutoff}, - {"Resonance", EditTGParameter, 0, CMiniDexed::TGParameterResonance}, - {"Pitch Bend", MenuHandler, s_EditPitchBendMenu}, - {"Portamento", MenuHandler, s_EditPortamentoMenu}, - {"Poly/Mono", EditTGParameter, 0, CMiniDexed::TGParameterMonoMode}, - {"Modulation", MenuHandler, s_ModulationMenu}, - {"Channel", EditTGParameter, 0, CMiniDexed::TGParameterMIDIChannel}, - {"Edit Voice", MenuHandler, s_EditVoiceMenu}, +#if defined(MIXING_CONSOLE_ENABLE) + {"FX-Send", CUIMenu::MenuHandler, CUIMenu::s_TGFXMenu}, +#elif defined(PLATE_REVERB_ENABLE) + {"Reverb-Send", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterReverbSend}, +#endif + {"Detune", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterMasterTune}, + {"Cutoff", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterCutoff}, + {"Resonance", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterResonance}, + {"Pitch Bend", CUIMenu::MenuHandler, CUIMenu::s_EditPitchBendMenu}, + {"Portamento", CUIMenu::MenuHandler, CUIMenu::s_EditPortamentoMenu}, + {"Poly/Mono", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterMonoMode}, + {"Modulation", CUIMenu::MenuHandler, CUIMenu::s_ModulationMenu}, + {"Channel", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterMIDIChannel}, + {"Edit Voice", CUIMenu::MenuHandler, CUIMenu::s_EditVoiceMenu}, {0} }; const CUIMenu::TMenuItem CUIMenu::s_EffectsMenu[] = { - {"Compress", EditGlobalParameter, 0, CMiniDexed::ParameterCompressorEnable}, -#ifdef ARM_ALLOW_MULTI_CORE - {"Reverb", MenuHandler, s_ReverbMenu}, + {"Compress",CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterCompressorEnable}, +#if defined(MIXING_CONSOLE_ENABLE) + {"Tube", CUIMenu::MenuHandler, CUIMenu::s_FXTube}, + {"Chorus", CUIMenu::MenuHandler, CUIMenu::s_FXChorus}, + {"FlangR", CUIMenu::MenuHandler, CUIMenu::s_FXFlanger}, + {"Orb", CUIMenu::MenuHandler, CUIMenu::s_FXOrbitone}, + {"PhasR", CUIMenu::MenuHandler, CUIMenu::s_FXPhaser}, + {"Delay", CUIMenu::MenuHandler, CUIMenu::s_FXDelay}, #endif -#ifdef FXRACK_ENABLE - {"FXChain", MenuHandler, s_FXChainMenu}, +#if defined(PLATE_REVERB_ENABLE) + {"Reverb", CUIMenu::MenuHandler, CUIMenu::s_FXPlateReverb}, +#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} }; const CUIMenu::TMenuItem CUIMenu::s_EditPitchBendMenu[] = { - {"Bend Range", EditTGParameter2, 0, CMiniDexed::TGParameterPitchBendRange}, - {"Bend Step", EditTGParameter2, 0, CMiniDexed::TGParameterPitchBendStep}, + {"Bend Range", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterPitchBendRange}, + {"Bend Step", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterPitchBendStep}, {0} }; const CUIMenu::TMenuItem CUIMenu::s_EditPortamentoMenu[] = { - {"Mode", EditTGParameter2, 0, CMiniDexed::TGParameterPortamentoMode}, - {"Glissando", EditTGParameter2, 0, CMiniDexed::TGParameterPortamentoGlissando}, - {"Time", EditTGParameter2, 0, CMiniDexed::TGParameterPortamentoTime}, + {"Mode", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterPortamentoMode}, + {"Glissando", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterPortamentoGlissando}, + {"Time", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterPortamentoTime}, {0} }; const CUIMenu::TMenuItem CUIMenu::s_ModulationMenu[] = { - {"Mod. Wheel", MenuHandler, s_ModulationMenuParameters, CMiniDexed::TGParameterMWRange}, - {"Foot Control", MenuHandler, s_ModulationMenuParameters, CMiniDexed::TGParameterFCRange}, - {"Breath Control", MenuHandler, s_ModulationMenuParameters, CMiniDexed::TGParameterBCRange}, - {"Aftertouch", MenuHandler, s_ModulationMenuParameters, CMiniDexed::TGParameterATRange}, + {"Mod. Wheel", CUIMenu::MenuHandler, CUIMenu::s_ModulationMenuParameters, CMiniDexed::TTGParameter::TGParameterMWRange}, + {"Foot Control", CUIMenu::MenuHandler, CUIMenu::s_ModulationMenuParameters, CMiniDexed::TTGParameter::TGParameterFCRange}, + {"Breath Control", CUIMenu::MenuHandler, CUIMenu::s_ModulationMenuParameters, CMiniDexed::TTGParameter::TGParameterBCRange}, + {"Aftertouch", CUIMenu::MenuHandler, CUIMenu::s_ModulationMenuParameters, CMiniDexed::TTGParameter::TGParameterATRange}, {0} }; const CUIMenu::TMenuItem CUIMenu::s_ModulationMenuParameters[] = { - {"Range", EditTGParameterModulation, 0, 0}, - {"Pitch", EditTGParameterModulation, 0, 1}, - {"Amplitude", EditTGParameterModulation, 0, 2}, - {"EG Bias", EditTGParameterModulation, 0, 3}, + {"Range", CUIMenu::EditTGParameterModulation, 0, 0}, + {"Pitch", CUIMenu::EditTGParameterModulation, 0, 1}, + {"Amplitude", CUIMenu::EditTGParameterModulation, 0, 2}, + {"EG Bias", CUIMenu::EditTGParameterModulation, 0, 3}, {0} }; -#ifdef ARM_ALLOW_MULTI_CORE +#if defined(PLATE_REVERB_ENABLE) || defined(MIXING_CONSOLE_ENABLE) + +const CUIMenu::TMenuItem CUIMenu::s_FXPlateReverb[] = +{ + {"Enable", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterReverbEnable}, + {"Size", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterReverbSize}, + {"High damp", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterReverbHighDamp}, + {"Low damp", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterReverbLowDamp}, + {"Low pass", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterReverbLowPass}, + {"Diffusion", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterReverbDiffusion}, + {"Level", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterReverbLevel}, +#if defined(MIXING_CONSOLE_ENABLE) + {"Levels", CUIMenu::MenuHandler, CUIMenu::s_FXPlateReverbLevels}, + {"FX-Send", CUIMenu::MenuHandler, CUIMenu::s_FXPlateReverbSend}, +#endif + {0} +}; + +#endif + +#if defined(MIXING_CONSOLE_ENABLE) + +const CUIMenu::TMenuItem CUIMenu::s_FXTube[] = +{ + {"Enable", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTubeEnable}, + {"Overdrv", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTubeOverdrive}, + {"Levels", CUIMenu::MenuHandler, CUIMenu::s_FXTubeLevels}, + {"FX-Send", CUIMenu::MenuHandler, CUIMenu::s_FXTubeSend}, + {0} +}; + +const CUIMenu::TMenuItem CUIMenu::s_FXChorus[] = +{ + {"Enable", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorusEnable}, + {"Rate", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorusRate}, + {"Depth", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorusDepth}, + {"Levels", CUIMenu::MenuHandler, CUIMenu::s_FXChorusLevels}, + {"FX-Send", CUIMenu::MenuHandler, CUIMenu::s_FXChorusSend}, + {0} +}; + +const CUIMenu::TMenuItem CUIMenu::s_FXFlanger[] = +{ + {"Enable", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlangerEnable}, + {"Rate", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlangerRate}, + {"Depth", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlangerDepth}, + {"Feedbck", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlangerFeedback}, + {"Levels", CUIMenu::MenuHandler, CUIMenu::s_FXFlangerLevels}, + {"FX-Send", CUIMenu::MenuHandler, CUIMenu::s_FXFlangerSend}, + {0} +}; + +const CUIMenu::TMenuItem CUIMenu::s_FXOrbitone[] = +{ + {"Enable", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitoneEnable}, + {"Rate", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitoneRate}, + {"Depth", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitoneDepth}, + {"Levels", CUIMenu::MenuHandler, CUIMenu::s_FXOrbitoneLevels}, + {"FX-Send", CUIMenu::MenuHandler, CUIMenu::s_FXOrbitoneSend}, + {0} +}; + +const CUIMenu::TMenuItem CUIMenu::s_FXPhaser[] = +{ + {"Enable", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaserEnable}, + {"Rate", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaserRate}, + {"Depth", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaserDepth}, + {"Feedbck", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaserFeedback}, + {"Stages", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaserNbStages}, + {"Levels", CUIMenu::MenuHandler, CUIMenu::s_FXPhaserLevels}, + {"FX-Send", CUIMenu::MenuHandler, CUIMenu::s_FXPhaserSend}, + {0} +}; -const CUIMenu::TMenuItem CUIMenu::s_ReverbMenu[] = +const CUIMenu::TMenuItem CUIMenu::s_FXDelay[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterReverbEnable}, - {"Size", EditGlobalParameter, 0, CMiniDexed::ParameterReverbSize}, - {"High damp", EditGlobalParameter, 0, CMiniDexed::ParameterReverbHighDamp}, - {"Low damp", EditGlobalParameter, 0, CMiniDexed::ParameterReverbLowDamp}, - {"Low pass", EditGlobalParameter, 0, CMiniDexed::ParameterReverbLowPass}, - {"Diffusion", EditGlobalParameter, 0, CMiniDexed::ParameterReverbDiffusion}, - {"Level", EditGlobalParameter, 0, CMiniDexed::ParameterReverbLevel}, + {"Enable", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelayEnable}, + {"L Delay", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelayLeftDelayTime}, + {"R Delay", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelayRightDelayTime}, + {"Feedbck", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelayFeedback}, + {"Levels", CUIMenu::MenuHandler, CUIMenu::s_FXDelayLevels}, + {"FX-Send", CUIMenu::MenuHandler, CUIMenu::s_FXDelaySend}, {0} }; +const CUIMenu::TMenuItem CUIMenu::s_FXReverberator[] = +{ + {"Enable", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberatorEnable}, + {"Gain", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberatorInputGain}, + {"Time", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberatorTime}, + {"Diffusion", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberatorDiffusion}, + {"Low pass", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberatorLP}, + {"Levels", CUIMenu::MenuHandler, CUIMenu::s_FXReverberatorLevels}, + {"FX-Send", CUIMenu::MenuHandler, CUIMenu::s_FXReverberatorSend}, + {0} +}; + +const CUIMenu::TMenuItem CUIMenu::s_FXTubeLevels[] = +{ + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXTube}, +#if defined(ARM_ALLOW_MULTI_CORE) + {"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}, + {"Orb >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_TubeSend}, + {"PhR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_TubeSend}, + {"Dly >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_TubeSend}, + {"Plt >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_TubeSend}, + {"Rev >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_TubeSend}, + {0} +}; + +const CUIMenu::TMenuItem CUIMenu::s_FXTubeSend[] = +{ + {"> ChR", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_ChorusSend}, + {"> Flg", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_FlangerSend}, + {"> Orb", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_OrbitoneSend}, + {"> PhR", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_PhaserSend}, + {"> Dly", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_DelaySend}, + {"> Plt", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_PlateReverbSend}, + {"> Rev", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXTube_ReverberatorSend}, + {"> Main", CUIMenu::EditGlobalParameter, 0, CMiniDexed::ParameterFXTube_MainOutput}, + {0} +}; + +const CUIMenu::TMenuItem CUIMenu::s_FXChorusLevels[] = +{ + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXChorus}, +#if defined(ARM_ALLOW_MULTI_CORE) + {"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}, + {"Orb >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_ChorusSend}, + {"PhR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_ChorusSend}, + {"Dly >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_ChorusSend}, + {"Plt >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_ChorusSend}, + {"Rev >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_ChorusSend}, + {0} +}; + +const CUIMenu::TMenuItem CUIMenu::s_FXChorusSend[] = +{ + {"> Tub", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_TubeSend}, + {"> Flg", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_FlangerSend}, + {"> Orb", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_OrbitoneSend}, + {"> PhR", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_PhaserSend}, + {"> Dly", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_DelaySend}, + {"> Plt", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_PlateReverbSend}, + {"> Rev", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_ReverberatorSend}, + {"> Main", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXChorus_MainOutput}, + {0} +}; -#ifdef FXRACK_ENABLE +const CUIMenu::TMenuItem CUIMenu::s_FXFlangerLevels[] = +{ + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXFlanger}, +#if defined(ARM_ALLOW_MULTI_CORE) + {"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}, + {"Orb >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_FlangerSend}, + {"PhR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_FlangerSend}, + {"Dly >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_FlangerSend}, + {"Plt >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_FlangerSend}, + {"Rev >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_FlangerSend}, + {0} +}; -const CUIMenu::TMenuItem CUIMenu::s_FXChainMenu[] = +const CUIMenu::TMenuItem CUIMenu::s_FXFlangerSend[] = { - // FXChain - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainEnable}, - {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainWet}, + {"> Tub", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_TubeSend}, + {"> ChR", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_ChorusSend}, + {"> Orb", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_OrbitoneSend}, + {"> PhR", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_PhaserSend}, + {"> Dly", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_DelaySend}, + {"> Plt", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_PlateReverbSend}, + {"> Rev", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_ReverberatorSend}, + {"> Main", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_MainOutput}, + {0} +}; - {"Tube", MenuHandler, s_FXChainTube}, - {"Chorus", MenuHandler, s_FXChainChorus}, - {"FlangR", MenuHandler, s_FXChainFlanger}, - {"Orb", MenuHandler, s_FXChainOrbitone}, - {"PhasR", MenuHandler, s_FXChainPhaser}, - {"Delay", MenuHandler, s_FXChainDelay}, - {"Shimmer", MenuHandler, s_FXChainShimmerReverb}, +const CUIMenu::TMenuItem CUIMenu::s_FXOrbitoneLevels[] = +{ + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXOrbitone}, +#if defined(ARM_ALLOW_MULTI_CORE) + {"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}, + {"Flg >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_OrbitoneSend}, + {"PhR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_OrbitoneSend}, + {"Dly >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_OrbitoneSend}, + {"Plt >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_OrbitoneSend}, + {"Rev >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_OrbitoneSend}, {0} }; -const CUIMenu::TMenuItem CUIMenu::s_FXChainTube[] = +const CUIMenu::TMenuItem CUIMenu::s_FXOrbitoneSend[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTubeEnable}, - {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTubeWet}, - {"Overdrv", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainTubeOverdrive}, + {"> Tub", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_TubeSend}, + {"> ChR", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_ChorusSend}, + {"> Flg", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_FlangerSend}, + {"> PhR", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_PhaserSend}, + {"> Dly", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_DelaySend}, + {"> Plt", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_PlateReverbSend}, + {"> Rev", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_ReverberatorSend}, + {"> Main", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_MainOutput}, {0} }; -const CUIMenu::TMenuItem CUIMenu::s_FXChainChorus[] = +const CUIMenu::TMenuItem CUIMenu::s_FXPhaserLevels[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainChorusEnable}, - {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainChorusWet}, - {"Rate", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainChorusRate}, - {"Depth", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainChorusDepth}, + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPhaser}, +#if defined(ARM_ALLOW_MULTI_CORE) + {"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}, + {"Flg >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_PhaserSend}, + {"Orb >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_PhaserSend}, + {"Dly >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_PhaserSend}, + {"Plt >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_PhaserSend}, + {"Rev >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_PhaserSend}, {0} }; -const CUIMenu::TMenuItem CUIMenu::s_FXChainFlanger[] = +const CUIMenu::TMenuItem CUIMenu::s_FXPhaserSend[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerEnable}, - {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerWet}, - {"Rate", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerRate}, - {"Depth", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerDepth}, - {"Feedbck", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainFlangerFeedback}, + {"> Tub", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_TubeSend}, + {"> ChR", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_ChorusSend}, + {"> Flg", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_FlangerSend}, + {"> Orb", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_OrbitoneSend}, + {"> Dly", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_DelaySend}, + {"> Plt", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_PlateReverbSend}, + {"> Rev", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_ReverberatorSend}, + {"> Main", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_MainOutput}, {0} }; -const CUIMenu::TMenuItem CUIMenu::s_FXChainOrbitone[] = +const CUIMenu::TMenuItem CUIMenu::s_FXDelayLevels[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainOrbitoneEnable}, - {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainOrbitoneWet}, - {"Rate", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainOrbitoneRate}, - {"Depth", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainOrbitoneDepth}, + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXDelay}, +#if defined(ARM_ALLOW_MULTI_CORE) + {"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}, + {"Flg >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_DelaySend}, + {"Orb >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_DelaySend}, + {"PhR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_DelaySend}, + {"Plt >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_DelaySend}, + {"Rev >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_DelaySend}, {0} }; -const CUIMenu::TMenuItem CUIMenu::s_FXChainPhaser[] = +const CUIMenu::TMenuItem CUIMenu::s_FXDelaySend[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainPhaserEnable}, - {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainPhaserWet}, - {"Rate", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainPhaserRate}, - {"Depth", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainPhaserDepth}, - {"Feedbck", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainPhaserFeedback}, - {"Stages", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainPhaserNbStages}, + {"> Tub", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_TubeSend}, + {"> ChR", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_ChorusSend}, + {"> Flg", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_FlangerSend}, + {"> Orb", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_OrbitoneSend}, + {"> PhR", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_PhaserSend}, + {"> Plt", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_PlateReverbSend}, + {"> Rev", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_ReverberatorSend}, + {"> Main", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_MainOutput}, {0} }; -const CUIMenu::TMenuItem CUIMenu::s_FXChainDelay[] = +const CUIMenu::TMenuItem CUIMenu::s_FXPlateReverbLevels[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainDelayEnable}, - {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainDelayWet}, - {"L Delay", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainDelayLeftDelayTime}, - {"R Delay", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainDelayRightDelayTime}, - {"Feedbck", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainDelayFeedback}, + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXPlateReverb}, +#if defined(ARM_ALLOW_MULTI_CORE) + {"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}, + {"Flg >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_PlateReverbSend}, + {"Orb >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_PlateReverbSend}, + {"PhR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_PlateReverbSend}, + {"Dly >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_PlateReverbSend}, + {"Rev >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_PlateReverbSend}, {0} }; -const CUIMenu::TMenuItem CUIMenu::s_FXChainShimmerReverb[] = +const CUIMenu::TMenuItem CUIMenu::s_FXPlateReverbSend[] = { - {"Enable", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbEnable}, - {"Wet Lvl", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbWet}, - {"Gain", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbInputGain}, - {"Time", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbTime}, - {"Diffus", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbDiffusion}, - {"LowPass", EditGlobalParameter, 0, CMiniDexed::ParameterFXChainShimmerReverbLP}, + {"> Tub", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_TubeSend}, + {"> ChR", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_ChorusSend}, + {"> Flg", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_FlangerSend}, + {"> Orb", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_OrbitoneSend}, + {"> PhR", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_PhaserSend}, + {"> Dly", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_DelaySend}, + {"> Rev", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_ReverberatorSend}, + {"> Main", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_MainOutput}, + {0} +}; + +const CUIMenu::TMenuItem CUIMenu::s_FXReverberatorLevels[] = +{ + {"TG1 >", CUIMenu::EditTGParameter3, 0, CMiniDexed::TTGParameter::TGParameterMixingSendFXReverberator}, +#if defined(ARM_ALLOW_MULTI_CORE) + {"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}, + {"Flg >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXFlanger_ReverberatorSend}, + {"Orb >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXOrbitone_ReverberatorSend}, + {"PhR >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPhaser_ReverberatorSend}, + {"Dly >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXDelay_ReverberatorSend}, + {"Plt >", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXPlateReverb_ReverberatorSend}, + {0} +}; + +const CUIMenu::TMenuItem CUIMenu::s_FXReverberatorSend[] = +{ + {"> Tub", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_TubeSend}, + {"> ChR", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_ChorusSend}, + {"> Flg", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_FlangerSend}, + {"> Orb", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_OrbitoneSend}, + {"> PhR", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_PhaserSend}, + {"> Dly", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_DelaySend}, + {"> Plt", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_PlateReverbSend}, + {"> Main", CUIMenu::EditGlobalParameter, 0, CMiniDexed::TParameter::ParameterFXReverberator_MainOutput}, + {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} }; @@ -229,74 +557,77 @@ const CUIMenu::TMenuItem CUIMenu::s_FXChainShimmerReverb[] = // inserting menu items before "OP1" affect OPShortcutHandler() const CUIMenu::TMenuItem CUIMenu::s_EditVoiceMenu[] = { - {"OP1", MenuHandler, s_OperatorMenu, 0}, - {"OP2", MenuHandler, s_OperatorMenu, 1}, - {"OP3", MenuHandler, s_OperatorMenu, 2}, - {"OP4", MenuHandler, s_OperatorMenu, 3}, - {"OP5", MenuHandler, s_OperatorMenu, 4}, - {"OP6", MenuHandler, s_OperatorMenu, 5}, - {"Algorithm", EditVoiceParameter, 0, DEXED_ALGORITHM}, - {"Feedback", EditVoiceParameter, 0, DEXED_FEEDBACK}, - {"P EG Rate 1", EditVoiceParameter, 0, DEXED_PITCH_EG_R1}, - {"P EG Rate 2", EditVoiceParameter, 0, DEXED_PITCH_EG_R2}, - {"P EG Rate 3", EditVoiceParameter, 0, DEXED_PITCH_EG_R3}, - {"P EG Rate 4", EditVoiceParameter, 0, DEXED_PITCH_EG_R4}, - {"P EG Level 1",EditVoiceParameter, 0, DEXED_PITCH_EG_L1}, - {"P EG Level 2",EditVoiceParameter, 0, DEXED_PITCH_EG_L2}, - {"P EG Level 3",EditVoiceParameter, 0, DEXED_PITCH_EG_L3}, - {"P EG Level 4",EditVoiceParameter, 0, DEXED_PITCH_EG_L4}, - {"Osc Key Sync",EditVoiceParameter, 0, DEXED_OSC_KEY_SYNC}, - {"LFO Speed", EditVoiceParameter, 0, DEXED_LFO_SPEED}, - {"LFO Delay", EditVoiceParameter, 0, DEXED_LFO_DELAY}, - {"LFO PMD", EditVoiceParameter, 0, DEXED_LFO_PITCH_MOD_DEP}, - {"LFO AMD", EditVoiceParameter, 0, DEXED_LFO_AMP_MOD_DEP}, - {"LFO Sync", EditVoiceParameter, 0, DEXED_LFO_SYNC}, - {"LFO Wave", EditVoiceParameter, 0, DEXED_LFO_WAVE}, - {"P Mod Sens.", EditVoiceParameter, 0, DEXED_LFO_PITCH_MOD_SENS}, - {"Transpose", EditVoiceParameter, 0, DEXED_TRANSPOSE}, - {"Name", InputTxt,0 , 3}, + {"OP1", CUIMenu::MenuHandler, CUIMenu::s_OperatorMenu, 0}, + {"OP2", CUIMenu::MenuHandler, CUIMenu::s_OperatorMenu, 1}, + {"OP3", CUIMenu::MenuHandler, CUIMenu::s_OperatorMenu, 2}, + {"OP4", CUIMenu::MenuHandler, CUIMenu::s_OperatorMenu, 3}, + {"OP5", CUIMenu::MenuHandler, CUIMenu::s_OperatorMenu, 4}, + {"OP6", CUIMenu::MenuHandler, CUIMenu::s_OperatorMenu, 5}, + {"Algorithm", CUIMenu::EditVoiceParameter, 0, DEXED_ALGORITHM}, + {"Feedback", CUIMenu::EditVoiceParameter, 0, DEXED_FEEDBACK}, + {"P EG Rate 1", CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_R1}, + {"P EG Rate 2", CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_R2}, + {"P EG Rate 3", CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_R3}, + {"P EG Rate 4", CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_R4}, + {"P EG Level 1",CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_L1}, + {"P EG Level 2",CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_L2}, + {"P EG Level 3",CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_L3}, + {"P EG Level 4",CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_L4}, + {"Osc Key Sync",CUIMenu::EditVoiceParameter, 0, DEXED_OSC_KEY_SYNC}, + {"LFO Speed", CUIMenu::EditVoiceParameter, 0, DEXED_LFO_SPEED}, + {"LFO Delay", CUIMenu::EditVoiceParameter, 0, DEXED_LFO_DELAY}, + {"LFO PMD", CUIMenu::EditVoiceParameter, 0, DEXED_LFO_PITCH_MOD_DEP}, + {"LFO AMD", CUIMenu::EditVoiceParameter, 0, DEXED_LFO_AMP_MOD_DEP}, + {"LFO Sync", CUIMenu::EditVoiceParameter, 0, DEXED_LFO_SYNC}, + {"LFO Wave", CUIMenu::EditVoiceParameter, 0, DEXED_LFO_WAVE}, + {"P Mod Sens.", CUIMenu::EditVoiceParameter, 0, DEXED_LFO_PITCH_MOD_SENS}, + {"Transpose", CUIMenu::EditVoiceParameter, 0, DEXED_TRANSPOSE}, + {"Name", CUIMenu::InputTxt, 0, 3}, {0} }; const CUIMenu::TMenuItem CUIMenu::s_OperatorMenu[] = { - {"Output Level",EditOPParameter, 0, DEXED_OP_OUTPUT_LEV}, - {"Freq Coarse", EditOPParameter, 0, DEXED_OP_FREQ_COARSE}, - {"Freq Fine", EditOPParameter, 0, DEXED_OP_FREQ_FINE}, - {"Osc Detune", EditOPParameter, 0, DEXED_OP_OSC_DETUNE}, - {"Osc Mode", EditOPParameter, 0, DEXED_OP_OSC_MODE}, - {"EG Rate 1", EditOPParameter, 0, DEXED_OP_EG_R1}, - {"EG Rate 2", EditOPParameter, 0, DEXED_OP_EG_R2}, - {"EG Rate 3", EditOPParameter, 0, DEXED_OP_EG_R3}, - {"EG Rate 4", EditOPParameter, 0, DEXED_OP_EG_R4}, - {"EG Level 1", EditOPParameter, 0, DEXED_OP_EG_L1}, - {"EG Level 2", EditOPParameter, 0, DEXED_OP_EG_L2}, - {"EG Level 3", EditOPParameter, 0, DEXED_OP_EG_L3}, - {"EG Level 4", EditOPParameter, 0, DEXED_OP_EG_L4}, - {"Break Point", EditOPParameter, 0, DEXED_OP_LEV_SCL_BRK_PT}, - {"L Key Depth", EditOPParameter, 0, DEXED_OP_SCL_LEFT_DEPTH}, - {"R Key Depth", EditOPParameter, 0, DEXED_OP_SCL_RGHT_DEPTH}, - {"L Key Scale", EditOPParameter, 0, DEXED_OP_SCL_LEFT_CURVE}, - {"R Key Scale", EditOPParameter, 0, DEXED_OP_SCL_RGHT_CURVE}, - {"Rate Scaling",EditOPParameter, 0, DEXED_OP_OSC_RATE_SCALE}, - {"A Mod Sens.", EditOPParameter, 0, DEXED_OP_AMP_MOD_SENS}, - {"K Vel. Sens.",EditOPParameter, 0, DEXED_OP_KEY_VEL_SENS}, - {"Enable", EditOPParameter, 0, DEXED_OP_ENABLE}, + {"Output Level",CUIMenu::EditOPParameter, 0, DEXED_OP_OUTPUT_LEV}, + {"Freq Coarse", CUIMenu::EditOPParameter, 0, DEXED_OP_FREQ_COARSE}, + {"Freq Fine", CUIMenu::EditOPParameter, 0, DEXED_OP_FREQ_FINE}, + {"Osc Detune", CUIMenu::EditOPParameter, 0, DEXED_OP_OSC_DETUNE}, + {"Osc Mode", CUIMenu::EditOPParameter, 0, DEXED_OP_OSC_MODE}, + {"EG Rate 1", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_R1}, + {"EG Rate 2", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_R2}, + {"EG Rate 3", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_R3}, + {"EG Rate 4", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_R4}, + {"EG Level 1", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_L1}, + {"EG Level 2", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_L2}, + {"EG Level 3", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_L3}, + {"EG Level 4", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_L4}, + {"Break Point", CUIMenu::EditOPParameter, 0, DEXED_OP_LEV_SCL_BRK_PT}, + {"L Key Depth", CUIMenu::EditOPParameter, 0, DEXED_OP_SCL_LEFT_DEPTH}, + {"R Key Depth", CUIMenu::EditOPParameter, 0, DEXED_OP_SCL_RGHT_DEPTH}, + {"L Key Scale", CUIMenu::EditOPParameter, 0, DEXED_OP_SCL_LEFT_CURVE}, + {"R Key Scale", CUIMenu::EditOPParameter, 0, DEXED_OP_SCL_RGHT_CURVE}, + {"Rate Scaling",CUIMenu::EditOPParameter, 0, DEXED_OP_OSC_RATE_SCALE}, + {"A Mod Sens.", CUIMenu::EditOPParameter, 0, DEXED_OP_AMP_MOD_SENS}, + {"K Vel. Sens.",CUIMenu::EditOPParameter, 0, DEXED_OP_KEY_VEL_SENS}, + {"Enable", CUIMenu::EditOPParameter, 0, DEXED_OP_ENABLE}, {0} }; const CUIMenu::TMenuItem CUIMenu::s_SaveMenu[] = { - {"Overwrite", SavePerformance, 0, 0}, - {"New", InputTxt,0 , 1}, - {"Save as default", SavePerformance, 0, 1}, + {"Overwrite", CUIMenu::SavePerformance, 0, 0}, + {"New", CUIMenu::InputTxt, 0, 1}, + {"Save as default", CUIMenu::SavePerformance, 0, 1}, {0} }; // must match CMiniDexed::TParameter -const CUIMenu::TParameter CUIMenu::s_GlobalParameter[CMiniDexed::ParameterUnknown] = +const CUIMenu::TParameter CUIMenu::s_GlobalParameter[CMiniDexed::TParameter::ParameterUnknown] = { - {0, 1, 1, ToOnOff}, // ParameterCompessorEnable + {0, 1, 1, ToOnOff} // ParameterCompressorEnable + +#if defined(PLATE_REVERB_ENABLE) || defined(MIXING_CONSOLE_ENABLE) + , {0, 1, 1, ToOnOff}, // ParameterReverbEnable {0, 99, 1}, // ParameterReverbSize {0, 99, 1}, // ParameterReverbHighDamp @@ -304,154 +635,240 @@ const CUIMenu::TParameter CUIMenu::s_GlobalParameter[CMiniDexed::ParameterUnknow {0, 99, 1}, // ParameterReverbLowPass {0, 99, 1}, // ParameterReverbDiffusion {0, 99, 1} // ParameterReverbLevel +#endif - // BEGIN FXRack global parameters mapping definition - #ifdef FXRACK_ENABLE +// BEGIN FX global parameters mapping definition +#if defined(MIXING_CONSOLE_ENABLE) , - // FXChain parameters - {0, 1, 1, ToOnOff}, // ParameterFXChainEnable - {0, 99, 1}, // ParameterFXChainWet - - // FXChain > Tube parameters - {0, 1, 1, ToOnOff}, // ParameterFXChainTubeEnable - {0, 99, 1}, // ParameterFXChainTubeWet - {0, 99, 1}, // ParameterFXChainTubeOverdrive - - // FXChain > Chorus parameters - {0, 1, 1, ToOnOff}, // ParameterFXChainChorusEnable - {0, 99, 1}, // ParameterFXChainChorusWet - {0, 99, 1}, // ParameterFXChainChorusRate - {0, 99, 1}, // ParameterFXChainChorusDepth - - // FXChain > Flanger parameters - {0, 1, 1, ToOnOff}, // ParameterFXChainFlangerEnable - {0, 99, 1}, // ParameterFXChainFlangerWet - {0, 99, 1}, // ParameterFXChainFlangerRate - {0, 99, 1}, // ParameterFXChainFlangerDepth - {0, 99, 1}, // ParameterFXChainFlangerFeedback - - // FXChain > Orbitone parameters - {0, 1, 1, ToOnOff}, // ParameterFXChainOrbitoneEnable - {0, 99, 1}, // ParameterFXChainOrbitoneWet - {0, 99, 1}, // ParameterFXChainOrbitoneRate - {0, 99, 1}, // ParameterFXChainOrbitoneDepth - - // FXChain > Phaser parameters - {0, 1, 1, ToOnOff}, // ParameterFXChainPhaserEnable - {0, 99, 1}, // ParameterFXChainPhaserWet - {0, 99, 1}, // ParameterFXChainPhaserRate - {0, 99, 1}, // ParameterFXChainPhaserDepth - {0, 99, 1}, // ParameterFXChainPhaserFeedback - {2, MAX_NB_PHASES, 1}, // ParameterFXChainPhaserNbStages - - // FXChain > Delay parameters - {0, 1, 1, ToOnOff}, // ParameterFXChainDelayEnable - {0, 99, 1}, // ParameterFXChainDelayWet - {0, 99, 1}, // ParameterFXChainDelayLeftDelayTime - {0, 99, 1}, // ParameterFXChainDelayRightDelayTime - {0, 99, 1}, // ParameterFXChainDelayFeedback - - // FXChain > ShimmerReverb parameters - {0, 1, 1, ToOnOff}, // ParameterFXChainShimmerReverbEnable - {0, 99, 1}, // ParameterFXChainShimmerReverbWet - {0, 99, 1}, // ParameterFXChainShimmerReverbInputGain - {0, 99, 1}, // ParameterFXChainShimmerReverbTime - {0, 99, 1}, // ParameterFXChainShimmerReverbDiffusion - {0, 99, 1}, // ParameterFXChainShimmerReverbLP - - #endif - // END FXRack global parameters mapping definition - + // FX > Tube parameters + {0, 1, 1, ToOnOff}, // ParameterFXTubeEnable + {0, 99 ,1}, // ParameterFXTubeOverdrive + + // FX > Chorus parameters + {0, 1, 1, ToOnOff}, // ParameterFXChorusEnable + {0, 99, 1}, // ParameterFXChorusRate + {0, 99, 1}, // ParameterFXChorusDepth + + // FX > Flanger parameters + {0, 1, 1, ToOnOff}, // ParameterFXFlangerEnable + {0, 99, 1}, // ParameterFXFlangerRate + {0, 99, 1}, // ParameterFXFlangerDepth + {0, 99, 1}, // ParameterFXFlangerFeedback + + // FX > Orbitone parameters + {0, 1, 1, ToOnOff}, // ParameterFXOrbitoneEnable + {0, 99, 1}, // ParameterFXOrbitoneRate + {0, 99, 1}, // ParameterFXOrbitoneDepth + + // FX > Phaser parameters + {0, 1, 1, ToOnOff}, // ParameterFXPhaserEnable + {0, 99, 1}, // ParameterFXPhaserRate + {0, 99, 1}, // ParameterFXPhaserDepth + {0, 99, 1}, // ParameterFXPhaserFeedback + {2, MAX_NB_PHASES, 1}, // ParameterFXPhaserNbStages + + // FX > Delay parameters + {0, 1, 1, ToOnOff}, // ParameterFXDelayEnable + {-99, 99, 1}, // ParameterFXDelayLeftDelayTime + {-99, 99, 1}, // ParameterFXDelayRightDelayTime + {0, 99, 1}, // ParameterFXDelayFeedback + + // FX > Reverberator parameters + {0, 1, 1, ToOnOff}, // ParameterFXReverberatorEnable + {0, 99, 1}, // ParameterFXReverberatorInputGain + {0, 99, 1}, // ParameterFXReverberatorTime + {0, 99, 1}, // ParameterFXReverberatorDiffusion + {0, 99, 1}, // ParameterFXReverberatorLP + + // FX > Tube Return parameters + {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_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_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_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_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_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}, // 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_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 }; // must match CMiniDexed::TTGParameter -const CUIMenu::TParameter CUIMenu::s_TGParameter[CMiniDexed::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, 99, 1}, // TGParameterReverbSend - {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 +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 +#if defined(PLATE_REVERB_ENABLE) + {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 + +#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 + +#endif // MIXING_CONSOLE_ENABLE }; // must match DexedVoiceParameters in Synth_Dexed const CUIMenu::TParameter CUIMenu::s_VoiceParameter[] = { - {0, 99, 1}, // DEXED_PITCH_EG_R1 - {0, 99, 1}, // DEXED_PITCH_EG_R2 - {0, 99, 1}, // DEXED_PITCH_EG_R3 - {0, 99, 1}, // DEXED_PITCH_EG_R4 - {0, 99, 1}, // DEXED_PITCH_EG_L1 - {0, 99, 1}, // DEXED_PITCH_EG_L2 - {0, 99, 1}, // DEXED_PITCH_EG_L3 - {0, 99, 1}, // DEXED_PITCH_EG_L4 - {0, 31, 1, ToAlgorithm}, // DEXED_ALGORITHM - {0, 7, 1}, // DEXED_FEEDBACK - {0, 1, 1, ToOnOff}, // DEXED_OSC_KEY_SYNC - {0, 99, 1}, // DEXED_LFO_SPEED - {0, 99, 1}, // DEXED_LFO_DELAY - {0, 99, 1}, // DEXED_LFO_PITCH_MOD_DEP - {0, 99, 1}, // DEXED_LFO_AMP_MOD_DEP - {0, 1, 1, ToOnOff}, // DEXED_LFO_SYNC - {0, 5, 1, ToLFOWaveform}, // DEXED_LFO_WAVE - {0, 7, 1}, // DEXED_LFO_PITCH_MOD_SENS - {0, 48, 1, ToTransposeNote}, // DEXED_TRANSPOSE - {0, 1, 1} // Voice Name - Dummy parameters for in case new item would be added in future + {0, 99, 1}, // DEXED_PITCH_EG_R1 + {0, 99, 1}, // DEXED_PITCH_EG_R2 + {0, 99, 1}, // DEXED_PITCH_EG_R3 + {0, 99, 1}, // DEXED_PITCH_EG_R4 + {0, 99, 1}, // DEXED_PITCH_EG_L1 + {0, 99, 1}, // DEXED_PITCH_EG_L2 + {0, 99, 1}, // DEXED_PITCH_EG_L3 + {0, 99, 1}, // DEXED_PITCH_EG_L4 + {0, 31, 1, ToAlgorithm}, // DEXED_ALGORITHM + {0, 7, 1}, // DEXED_FEEDBACK + {0, 1, 1, ToOnOff}, // DEXED_OSC_KEY_SYNC + {0, 99, 1}, // DEXED_LFO_SPEED + {0, 99, 1}, // DEXED_LFO_DELAY + {0, 99, 1}, // DEXED_LFO_PITCH_MOD_DEP + {0, 99, 1}, // DEXED_LFO_AMP_MOD_DEP + {0, 1, 1, ToOnOff}, // DEXED_LFO_SYNC + {0, 5, 1, ToLFOWaveform}, // DEXED_LFO_WAVE + {0, 7, 1}, // DEXED_LFO_PITCH_MOD_SENS + {0, 48, 1, ToTransposeNote}, // DEXED_TRANSPOSE + {0, 1, 1} // Voice Name - Dummy parameters for in case new item would be added in future }; // must match DexedVoiceOPParameters in Synth_Dexed const CUIMenu::TParameter CUIMenu::s_OPParameter[] = { - {0, 99, 1}, // DEXED_OP_EG_R1 - {0, 99, 1}, // DEXED_OP_EG_R2 - {0, 99, 1}, // DEXED_OP_EG_R3 - {0, 99, 1}, // DEXED_OP_EG_R4 - {0, 99, 1}, // DEXED_OP_EG_L1 - {0, 99, 1}, // DEXED_OP_EG_L2 - {0, 99, 1}, // DEXED_OP_EG_L3 - {0, 99, 1}, // DEXED_OP_EG_L4 - {0, 99, 1, ToBreakpointNote}, // DEXED_OP_LEV_SCL_BRK_PT - {0, 99, 1}, // DEXED_OP_SCL_LEFT_DEPTH - {0, 99, 1}, // DEXED_OP_SCL_RGHT_DEPTH - {0, 3, 1, ToKeyboardCurve}, // DEXED_OP_SCL_LEFT_CURVE - {0, 3, 1, ToKeyboardCurve}, // DEXED_OP_SCL_RGHT_CURVE - {0, 7, 1}, // DEXED_OP_OSC_RATE_SCALE - {0, 3, 1}, // DEXED_OP_AMP_MOD_SENS - {0, 7, 1}, // DEXED_OP_KEY_VEL_SENS - {0, 99, 1}, // DEXED_OP_OUTPUT_LEV - {0, 1, 1, ToOscillatorMode}, // DEXED_OP_OSC_MODE - {0, 31, 1}, // DEXED_OP_FREQ_COARSE - {0, 99, 1}, // DEXED_OP_FREQ_FINE - {0, 14, 1, ToOscillatorDetune}, // DEXED_OP_OSC_DETUNE - {0, 1, 1, ToOnOff} // DEXED_OP_ENABLE + {0, 99, 1}, // DEXED_OP_EG_R1 + {0, 99, 1}, // DEXED_OP_EG_R2 + {0, 99, 1}, // DEXED_OP_EG_R3 + {0, 99, 1}, // DEXED_OP_EG_R4 + {0, 99, 1}, // DEXED_OP_EG_L1 + {0, 99, 1}, // DEXED_OP_EG_L2 + {0, 99, 1}, // DEXED_OP_EG_L3 + {0, 99, 1}, // DEXED_OP_EG_L4 + {0, 99, 1, ToBreakpointNote}, // DEXED_OP_LEV_SCL_BRK_PT + {0, 99, 1}, // DEXED_OP_SCL_LEFT_DEPTH + {0, 99, 1}, // DEXED_OP_SCL_RGHT_DEPTH + {0, 3, 1, ToKeyboardCurve}, // DEXED_OP_SCL_LEFT_CURVE + {0, 3, 1, ToKeyboardCurve}, // DEXED_OP_SCL_RGHT_CURVE + {0, 7, 1}, // DEXED_OP_OSC_RATE_SCALE + {0, 3, 1}, // DEXED_OP_AMP_MOD_SENS + {0, 7, 1}, // DEXED_OP_KEY_VEL_SENS + {0, 99, 1}, // DEXED_OP_OUTPUT_LEV + {0, 1, 1, ToOscillatorMode}, // DEXED_OP_OSC_MODE + {0, 31, 1}, // DEXED_OP_FREQ_COARSE + {0, 99, 1}, // DEXED_OP_FREQ_FINE + {0, 14, 1, ToOscillatorDetune}, // DEXED_OP_OSC_DETUNE + {0, 1, 1, ToOnOff} // DEXED_OP_ENABLE }; const char CUIMenu::s_NoteName[100][4] = @@ -470,15 +887,15 @@ static const unsigned NoteC3 = 27; const CUIMenu::TMenuItem CUIMenu::s_PerformanceMenu[] = { - {"Load", PerformanceMenu, 0, 0}, - {"Save", MenuHandler, s_SaveMenu}, - {"Delete", PerformanceMenu, 0, 1}, + {"Load", CUIMenu::PerformanceMenu, 0, 0}, + {"Save", CUIMenu::MenuHandler, s_SaveMenu}, + {"Delete", CUIMenu::PerformanceMenu, 0, 1}, {0} }; -CUIMenu::CUIMenu (CUserInterface *pUI, CMiniDexed *pMiniDexed) -: m_pUI (pUI), +CUIMenu::CUIMenu (CUserInterface *pUI, CMiniDexed *pMiniDexed) : + m_pUI (pUI), m_pMiniDexed (pMiniDexed), m_pParentMenu (s_MenuRoot), m_pCurrentMenu (s_MainMenu), @@ -487,6 +904,7 @@ CUIMenu::CUIMenu (CUserInterface *pUI, CMiniDexed *pMiniDexed) m_nCurrentParameter (0), m_nCurrentMenuDepth (0) { + assert(pMiniDexed); #ifndef ARM_ALLOW_MULTI_CORE // If there is just one core, then there is only a single // tone generator so start on the TG1 menu... @@ -566,23 +984,23 @@ void CUIMenu::MenuHandler (CUIMenu *pUIMenu, TMenuEvent Event) case MenuEventSelect: // push menu assert (pUIMenu->m_nCurrentMenuDepth < MaxMenuDepth); - pUIMenu->m_MenuStackParent[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_pParentMenu; - pUIMenu->m_MenuStackMenu[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_pCurrentMenu; - pUIMenu->m_nMenuStackItem[pUIMenu->m_nCurrentMenuDepth] - = pUIMenu->m_nCurrentMenuItem; - pUIMenu->m_nMenuStackSelection[pUIMenu->m_nCurrentMenuDepth] - = pUIMenu->m_nCurrentSelection; - pUIMenu->m_nMenuStackParameter[pUIMenu->m_nCurrentMenuDepth] - = pUIMenu->m_nCurrentParameter; + pUIMenu->m_MenuStackParent[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_pParentMenu; + pUIMenu->m_MenuStackMenu[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_pCurrentMenu; + pUIMenu->m_nMenuStackItem[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_nCurrentMenuItem; + + pUIMenu->m_nMenuStackSelection[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_nCurrentSelection; + + pUIMenu->m_nMenuStackParameter[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_nCurrentParameter; + pUIMenu->m_nCurrentMenuDepth++; - pUIMenu->m_pParentMenu = pUIMenu->m_pCurrentMenu; - pUIMenu->m_nCurrentParameter = - pUIMenu->m_pCurrentMenu[pUIMenu->m_nCurrentSelection].Parameter; - pUIMenu->m_pCurrentMenu = - pUIMenu->m_pCurrentMenu[pUIMenu->m_nCurrentSelection].MenuItem; - pUIMenu->m_nCurrentMenuItem = pUIMenu->m_nCurrentSelection; - pUIMenu->m_nCurrentSelection = 0; + pUIMenu->m_pParentMenu = pUIMenu->m_pCurrentMenu; + + pUIMenu->m_nCurrentParameter = pUIMenu->m_pCurrentMenu[pUIMenu->m_nCurrentSelection].Parameter; + + pUIMenu->m_pCurrentMenu = pUIMenu->m_pCurrentMenu[pUIMenu->m_nCurrentSelection].MenuItem; + pUIMenu->m_nCurrentMenuItem = pUIMenu->m_nCurrentSelection; + pUIMenu->m_nCurrentSelection = 0; break; case MenuEventStepDown: @@ -669,7 +1087,7 @@ void CUIMenu::EditVoiceBankNumber (CUIMenu *pUIMenu, TMenuEvent Event) { unsigned nTG = pUIMenu->m_nMenuStackParameter[pUIMenu->m_nCurrentMenuDepth-1]; - int nValue = pUIMenu->m_pMiniDexed->GetTGParameter (CMiniDexed::TGParameterVoiceBank, nTG); + int nValue = pUIMenu->m_pMiniDexed->GetTGParameter (CMiniDexed::TTGParameter::TGParameterVoiceBank, nTG); switch (Event) { @@ -679,13 +1097,13 @@ void CUIMenu::EditVoiceBankNumber (CUIMenu *pUIMenu, TMenuEvent Event) case MenuEventStepDown: nValue = pUIMenu->m_pMiniDexed->GetSysExFileLoader ()->GetNextBankDown(nValue); pUIMenu->m_pMiniDexed->SetTGParameter ( - CMiniDexed::TGParameterVoiceBank, nValue, nTG); + CMiniDexed::TTGParameter::TGParameterVoiceBank, nValue, nTG); break; case MenuEventStepUp: nValue = pUIMenu->m_pMiniDexed->GetSysExFileLoader ()->GetNextBankUp(nValue); pUIMenu->m_pMiniDexed->SetTGParameter ( - CMiniDexed::TGParameterVoiceBank, nValue, nTG); + CMiniDexed::TTGParameter::TGParameterVoiceBank, nValue, nTG); break; case MenuEventPressAndStepDown: @@ -713,7 +1131,7 @@ void CUIMenu::EditProgramNumber (CUIMenu *pUIMenu, TMenuEvent Event) { unsigned nTG = pUIMenu->m_nMenuStackParameter[pUIMenu->m_nCurrentMenuDepth-1]; - int nValue = pUIMenu->m_pMiniDexed->GetTGParameter (CMiniDexed::TGParameterProgram, nTG); + int nValue = pUIMenu->m_pMiniDexed->GetTGParameter (CMiniDexed::TTGParameter::TGParameterProgram, nTG); switch (Event) { @@ -725,11 +1143,11 @@ void CUIMenu::EditProgramNumber (CUIMenu *pUIMenu, TMenuEvent Event) { // Switch down a voice bank and set to the last voice nValue = CSysExFileLoader::VoicesPerBank-1; - int nVB = pUIMenu->m_pMiniDexed->GetTGParameter(CMiniDexed::TGParameterVoiceBank, nTG); + int nVB = pUIMenu->m_pMiniDexed->GetTGParameter(CMiniDexed::TTGParameter::TGParameterVoiceBank, nTG); nVB = pUIMenu->m_pMiniDexed->GetSysExFileLoader ()->GetNextBankDown(nVB); - pUIMenu->m_pMiniDexed->SetTGParameter (CMiniDexed::TGParameterVoiceBank, nVB, nTG); + pUIMenu->m_pMiniDexed->SetTGParameter (CMiniDexed::TTGParameter::TGParameterVoiceBank, nVB, nTG); } - pUIMenu->m_pMiniDexed->SetTGParameter (CMiniDexed::TGParameterProgram, nValue, nTG); + pUIMenu->m_pMiniDexed->SetTGParameter (CMiniDexed::TTGParameter::TGParameterProgram, nValue, nTG); break; case MenuEventStepUp: @@ -737,11 +1155,11 @@ void CUIMenu::EditProgramNumber (CUIMenu *pUIMenu, TMenuEvent Event) { // Switch up a voice bank and reset to voice 0 nValue = 0; - int nVB = pUIMenu->m_pMiniDexed->GetTGParameter(CMiniDexed::TGParameterVoiceBank, nTG); + int nVB = pUIMenu->m_pMiniDexed->GetTGParameter(CMiniDexed::TTGParameter::TGParameterVoiceBank, nTG); nVB = pUIMenu->m_pMiniDexed->GetSysExFileLoader ()->GetNextBankUp(nVB); - pUIMenu->m_pMiniDexed->SetTGParameter (CMiniDexed::TGParameterVoiceBank, nVB, nTG); + pUIMenu->m_pMiniDexed->SetTGParameter (CMiniDexed::TTGParameter::TGParameterVoiceBank, nVB, nTG); } - pUIMenu->m_pMiniDexed->SetTGParameter (CMiniDexed::TGParameterProgram, nValue, nTG); + pUIMenu->m_pMiniDexed->SetTGParameter (CMiniDexed::TTGParameter::TGParameterProgram, nValue, nTG); break; case MenuEventPressAndStepDown: @@ -884,6 +1302,60 @@ void CUIMenu::EditTGParameter2 (CUIMenu *pUIMenu, TMenuEvent Event) // second me } +void CUIMenu::EditTGParameter3(CUIMenu *pUIMenu, TMenuEvent Event) +{ + unsigned nTG = pUIMenu->m_nCurrentMenuItem; + + CMiniDexed::TTGParameter Param = (CMiniDexed::TTGParameter) pUIMenu->m_nCurrentParameter; + + const TParameter &rParam = s_TGParameter[Param]; + + int nValue = pUIMenu->m_pMiniDexed->GetTGParameter (Param, nTG); + + switch (Event) + { + case MenuEventUpdate: + break; + + case MenuEventStepDown: + nValue -= rParam.Increment; + if (nValue < rParam.Minimum) + { + nValue = rParam.Minimum; + } + pUIMenu->m_pMiniDexed->SetTGParameter (Param, nValue, nTG); + break; + + case MenuEventStepUp: + nValue += rParam.Increment; + if (nValue > rParam.Maximum) + { + nValue = rParam.Maximum; + } + pUIMenu->m_pMiniDexed->SetTGParameter (Param, nValue, nTG); + break; + + case MenuEventPressAndStepDown: + case MenuEventPressAndStepUp: + pUIMenu->TGShortcutHandler (Event); + return; + + default: + return; + } + + string TG ("TG"); + TG += to_string (nTG+1); + + string Value = GetTGValueString (Param, pUIMenu->m_pMiniDexed->GetTGParameter (Param, nTG)); + + pUIMenu->m_pUI->DisplayWrite (TG.c_str (), + pUIMenu->m_pParentMenu[pUIMenu->m_nCurrentMenuItem].Name, + Value.c_str (), + nValue > rParam.Minimum, nValue < rParam.Maximum); + +} + void CUIMenu::EditVoiceParameter (CUIMenu *pUIMenu, TMenuEvent Event) { unsigned nTG = pUIMenu->m_nMenuStackParameter[pUIMenu->m_nCurrentMenuDepth-2]; @@ -1702,5 +2174,3 @@ void CUIMenu::EditTGParameterModulation (CUIMenu *pUIMenu, TMenuEvent Event) nValue > rParam.Minimum, nValue < rParam.Maximum); } - - diff --git a/src/uimenu.h b/src/uimenu.h index e8448c5..9cd8693 100644 --- a/src/uimenu.h +++ b/src/uimenu.h @@ -85,6 +85,7 @@ private: static void EditOPParameter (CUIMenu *pUIMenu, TMenuEvent Event); static void SavePerformance (CUIMenu *pUIMenu, TMenuEvent Event); static void EditTGParameter2 (CUIMenu *pUIMenu, TMenuEvent Event); + static void EditTGParameter3 (CUIMenu *pUIMenu, TMenuEvent Event); static void EditTGParameterModulation (CUIMenu *pUIMenu, TMenuEvent Event); static void PerformanceMenu (CUIMenu *pUIMenu, TMenuEvent Event); static void SavePerformanceNewFile (CUIMenu *pUIMenu, TMenuEvent Event); @@ -139,18 +140,37 @@ private: static const TMenuItem s_MainMenu[]; static const TMenuItem s_TGMenu[]; static const TMenuItem s_EffectsMenu[]; -#ifdef ARM_ALLOW_MULTI_CORE - static const TMenuItem s_ReverbMenu[]; +#if defined(MIXING_CONSOLE_ENABLE) + static const TMenuItem s_TGFXMenu[]; + static const TMenuItem s_FXTube[]; + static const TMenuItem s_FXTubeLevels[]; + static const TMenuItem s_FXTubeSend[]; + static const TMenuItem s_FXChorus[]; + static const TMenuItem s_FXChorusLevels[]; + static const TMenuItem s_FXChorusSend[]; + static const TMenuItem s_FXFlanger[]; + static const TMenuItem s_FXFlangerLevels[]; + static const TMenuItem s_FXFlangerSend[]; + static const TMenuItem s_FXOrbitone[]; + static const TMenuItem s_FXOrbitoneLevels[]; + static const TMenuItem s_FXOrbitoneSend[]; + static const TMenuItem s_FXPhaser[]; + static const TMenuItem s_FXPhaserLevels[]; + static const TMenuItem s_FXPhaserSend[]; + static const TMenuItem s_FXDelay[]; + static const TMenuItem s_FXDelayLevels[]; + static const TMenuItem s_FXDelaySend[]; #endif -#ifdef FXRACK_ENABLE - static const TMenuItem s_FXChainMenu[]; - static const TMenuItem s_FXChainTube[]; - static const TMenuItem s_FXChainChorus[]; - static const TMenuItem s_FXChainFlanger[]; - static const TMenuItem s_FXChainOrbitone[]; - static const TMenuItem s_FXChainPhaser[]; - static const TMenuItem s_FXChainDelay[]; - static const TMenuItem s_FXChainShimmerReverb[]; +#if defined(PLATE_REVERB_ENABLE) || defined(MIXING_CONSOLE_ENABLE) + static const TMenuItem s_FXPlateReverb[]; +#endif +#if defined(MIXING_CONSOLE_ENABLE) + static const TMenuItem s_FXPlateReverbLevels[]; + static const TMenuItem s_FXPlateReverbSend[]; + 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/Chorus--Channel.png b/wiki-update/Chorus--Channel.png new file mode 100644 index 0000000000000000000000000000000000000000..65d3e98c5247e80d1e2396e64f3b0390a888353c GIT binary patch literal 33880 zcmeFa2UJtdyFRM&DJsndh%}W?5oyw;3#cenML~L#-lPRWC@KmF0wM}RAT%NL8bAm| zLMGho16RW z*|X=)ojZU2JkLqmix)5QG9TvU<-K(25+5JmWtJlX0s=y8M}>rhgxQV?3kzSlaz#{B zRE(WY9QZ3PE+HWy$w4P6DJd;2Eh8f%D=RB^mR??7UQto;+O=!S%E~G{jMuMUzj^bf zs;cVk+qc!#)ipFUG&MD~wYBf~i{9lwe(&Br9f9LIIy$<#y88P1Mn*=aqNhwvP0h^A zEX7Y*iZfeUT3T6ISzBA%*x1Oa&mHZc76=}$y0T6b8~lh_mDsB;o$*+ zK)k)Zp-?Cc2J`dt^Y{0E^5n_0XU_s}um=VPK7al^C@3f-B;@7Gm!YAd;o;#C>YT4% zzmATMj?w0hiHV7gjeURTZ2aA`@$vBq2?>dbi3kKDIXO8sH8oB5d|F!C2i@}@K72^m zJD;AOo{^D}m6er~larg9o0pfDZ*Z=_=+J08>gww0>FMq5?Q<9G>+8e23*zzk{{H@ffdK-6Fa!}A8XEcm5&H4t$H>UY*w`46 zNSv6Mn4FxPo}MQ8iI7O7nVFf{+1a@Si~0HarP5GJQ|4;Vr}g2Ejp?6TOS9YC+lRmZ zee$<&dEC>|*>`QM*Bbb6AiO-QTcU`+7mCLc*j5dtKGrcf zKMrIc_;Kjp{(5!aHmT@IAC}6O6jt6J3uRKc_7ekLlhH}h`+7yHtM)H34NjXa=1h2NMU6B6Ns{eYYd_{JZ?iUb*Kr^N_;UHLO$+?#bZq@O~((Z_p z66B=6T0lz`*^9@cndXvH@LF-wC&5bC@HixR@Wpy+FGPt2Fi@|loZ%rlDqvbv&_l&s zyIDpS1y2qZ$(IvLj_zF&A#Ii5SLKr)fVE5tw~Im`$J&UehENcbfrK$AZ$it0{)?Rk zTIqY;{1HNw&P`B|-7V+x$;j?ueUe-f_A=Od*r59tQC?VksJ%tki``81W0&Z5)J)dOJg(hN4+XQSzwKZu=BZZ1R0hJ%s4GoZ*F4 zrWSNanR5-YYVKEq^xj9ZPIs5@m5L|}KmP@L=qBe{!9DS$sg@oV6cRg_=65lvQ^>R& zyU;GU)3yGRV@}>W@zn)zFFOqU9-~Yi@yTutTi=%HW;$WlH7jluz*u=4LI) z?HY8Ct*0#?3RM`;vH5zQYR}hKN3k|+c`#?>-lNT#5X!!!nUeV3yqYu1V#spXr5hSM z-n8L(>yZY!0Gf}r-)#*p9{f7*5>z3ldB^RN!ucWzVR|&d>qc7cyS)}}PD)XM_qUDe zYwl)a`Oq+IEy!LjwtlyYk3=%%H&A~5f3iNIg0~dzfV$8pafj_zq?9o6U7DZt^a9lD zdQT1HKg-wuXWp=XP^z!txav6#ZJr(fs1aNYziH6QmSqIB3NPc#YaeAD{JnpzGY+K3=y;?n$nYfT<>{>PS6w` zB>DQb*c9a;8@GEE%9DbH%*61){>_uc`$-!@FXHIVM@VAlkh~+r7YMo}JbUi>=-@{` z1t;Cq-}$B^T%LuP;Ac!w<^f$1tHUun z{DZ->Fiiqk9T1`Ccni%l2w6x##o6_~mE>dzmnvE3h+fvJnvf`2|A?OkVr|tm{%X$=xJ(s&U&NVwF_iP z^PFEDX^E)vZAf~`^u&+4%W*g^Iny9~5IFjpD(hnKfwVb~bPZL@(8@xU5>B4k(x2lI z<0(jjv}y5DX;%$?%6HkZ z#@mL0&K1y4t=9XIZIGV_S(QGsD2uB7N=}eM!3MkDFxcu5rtKMgk$tizquM=( z=sPQ9-iEbT`%NYJ=nol{XT|qX8poXv2)<8cd=%}_rA;q%fwrg zYwEGYfVh=i074fKq#8NIli1;IJF#GM>M9LbE1MrQw-&we+)-KqJ{L7%zOPSAQQrg% zRygfDQU4Zlk=EeQ#|`&yxgb396&!+HH~^Dlns|#ywhGbnk5uNTKGMvJP@+(v=Q{W{ z<71Q%a|hM(RCZ=BUry8H8I`KPCf@q1wH&sYkJ$l5rVW&@kxS|7!m2XqN#8|3i?z8S zT6U(yf}g~+$f@|Avxyy%wrnHsY`jgP!AI(?D&pXahs zS`%p0tA+h)LaJb~(mXR5gTdz>YC{=T&$?!Mz!qm+u#%DcW(eF3M`;u-Z&K&-d;ZcZ zJ*v(9!1XDV#@xocfJktH7PcA}#t6+^mq{0H7j0g@RCNq|i(ben+wgizb@0jGY7w7O z@B$}X(nqUae0|p5j)PNym1G)@Ng>w#2q?qaKGu0u@Et z#r=G6%9QF$=M}V7c~?(&@cF%ok?!`55CCVb5Hj&6kMDtrw+dP<90kaY6JU*EXCG8b zW00@4Cel!?#l!0-Km#ufs0brh>48k%$LN#IY3QgHesT$&skpep0r*c+j6R}f1EvH% zaPVq@2{RL549qspX4T<6=xzt_E^bKZv5B{XH(KOetWPR{uA@+!7Uu4I9Js6$RyRDe zIl2R_{kSrM-F+E=t2e{y>K(s;aD0Gh;&Zi83NTO*b$X!XrXy&#-y-@{pv$?$4t6^c zZ%+0i(2vSpx$&_zfgWlu$qnWcfrdMMIWQ)&Ce=a#I;RwMRqm^`5txG$S871Xw14IN zQ3DPx3o#+kG)YQ(t-k*&4>jSGhMx+OBOu&&c9+_OTTyWDSUZLvOTk^KrB#G&Vdlkv z*H1{0(W{7!b*Cv@;f51K0;W*Zuo?pcOL_61%i}{&Kfb_x1Rbw`Kx3Qn3&!y)_-+i0 zU0m}z>-@)#o~&h0pEssRZM$W77;$S*HD((@UoPO75Wn(jFRGzsD|=ma~+cS_#LM z97RglpoHUUn8|{}CbQ$3gWrNG2Y>Hk0GmZ#lAWJ^U8dA$^T+GfY)V2=akXdd zfixt(cEjnoxljN*XM!2S6fHm1qw1|>{H&FY@iOk`O0)~<;*i3I!8Y+;%8nES2tx>p+3>W-WNI}`hPlH!mO{N@b%RmX^N zn&5EylTs=h=EIk{M1&p*S8Sd>bTGG%{eauEG`0i98B#xpmsBNw*l5~#_n1exc=yCx zTp2nS;eN%mot`j2d>`x_H1#-{O!rS$b@yzN>?^Vj*y1mL>)x+5Z_sK?kKEw@{XS-u zRP;;mX1`0xvT(= z2ZLsnWJmY0b=)c8Baypz8o*PM^#mz!{W61u7@oC73Ds|T)6=yRzbb;e#KJ_HQbJ3& zEWFw>wM|MWl-1I*rra>`w64y9o_2!MKoEpJopm!toihiGVJe1rHs; zcidJ*yAWi>Wbg#fFe#;j>r00ymJQ~m3$=YWqUC14$+zDiso>?^o^lEBn^)6yx80ax z$+&uUk^v`k9y1Y#md-VvsmX{X;jSs6b1!$u-DM;-hSE6Llt5H8Rm%FE(5XgOG6}|! z6>qF>3$=GP@kco5d9Z%_Jp)WS3Uxm0=4=nrs)Xnj=+fTMVTLLxgsR|sQR$Skow>mV zLT+_a-uZWCZPRs3eXwu&4gM@JP95n7i%L<=pnOb2q}L4yt8^O9b#6XF?G2$&v^OKaxf9a4wz@tgU%> z?sI8eF5j{;p`uDc(how)S33x=yoo=Rmq}bk!SmiFP78g*E#T#>@%6@S6y;VEb*IYP zyx3&TiLu8_B-NOr@nk$kviBB32qlZNX?I>u&~;LLY*rwuM@d;7DX(SCmYAv~fNqm+ zbjeFX+lx5ahFVYiC4g5sSmf+=J9x0J;HoN#>@S?rUv2W3g|vU>tIuP@a7n|=tg@XE zv5)y1yHioG{<@MY(ugfz*!H<6~md*fQ6nHv4~U z{zi_kVxGxHm_J;uQ(6gl3e1!l=_(saE5R-mvxdN2xL?pXb;!;9*CF;=0G$!PcknJU zNZxb~UPdXNPuyD6h+lpfuwHTqgbiJ<2IY2~trghZ_7gm1Gafm*p5jCsqC#-0TYe_qgmu~T^Ap~jtV6~jCf3nB{PpIkoD z7#pC{^{7@iCiaI^+UkJ67!0R2Ck>dZC|Dxrw@P^innL&3r1~-!ut=bM7sbx^T%jU4 zjloR!#z3G@A%iif7H#t9=~z-2}QdX|70;T==R3s>Y5MjU{vk_Pl#);y9_ zfJf=5m#zVP!zHERhl!*G$efVHym|2ZYXG}lJ~aIB+(UR@{cKIw7y-w6$`YK;<5$l*Cl@Otm7upRXI5kpvX zi6Lm~ncNDiC;S0gLI4`X0;F2>bLDjtcu=3YPQ=CkmD@+^)H1IK|;B0mUWHoVFh|u0QQ|liZ>aoFRI* z^sQm%a=A@~tQQn(|H1>Hr$`uO;A}2-rss*Vimv~KehpnK_JrHU z=4mtCGdt=0`dRZiK8^E?w?!oOy;N=8f9qlpyeLFwK%=46?4V9AcS5of$WIF7`q#4f zT*@kXT0a(|@VK|>imTWc?u+@uQ7@9p2mI*+4|Gp6?3b=Pn+jm4l|p`%WsUi@R4e(RSGECG>VWc9O7x*7h+c|X`x zG)$mZBqXBp^bE$%^c7_prMGA$-Scq$ZAEAfvSLD+kpe*_`JR|LY0cCegDMy+ z3%lA<{(&Gj7?)GwldAKhQ;{a)-L0R*L@O<#|U-W2b$jwzU@~ z=Zx<{?t#nLTW~FLCwbbnE)HajT!B^n%TT$Vgd<&t;+q-sym~5e>R?Zvb1Lgj__P^b z;)Za>y4{zMe`71k@Sr{!QnEZa$glMmc$d5rBJ{FtvW-tMpVuvfb0Ab#{p$&Nk__HH zmY>p{PmGs;&3YdkiztlO_V<&?td;uOF~Q}DxSvhY>n{mkC#?)h+q*TU64L}M?;`AE zJg+$U5K8!&>_z$(@21RMFDc4^p&L_vLZeajnbT5v_q zWLNUHiXoHWH~%+H1Z;NvK-xp`^y+>afywr1O|Y7&yn21L4bpl_I!uC>BUBOJD&z>r zhnh~+Kl zAe{7ubs6C|-)eSV7>{#)!wmID8c#W)0&wxN=#||jr#IEpQ7(& zx(trFGY(?4vIhDVkC4Rt#IZK^BZ6$-oedugqG+-43q95V1MAZ`l7+)Xr}pcMsNn9O z7w+pJCmKq_dExK0D@_f-zL>F-lDC7)xNoN6a*c|n?jg9<-r`crMV6r^PpvvJVx+dW zI}FKCkF(@=$4HtxweC1tMG5F_1_oyF`>%NC7oR{(Dx|&UW8e!~+zLgR;X6P(gvquX zDZS9jJk2;w77#Z2dJ<}V3;jXAruK0UwI%nHAnuMe1O|q{^~_%8k(Y8(Y1RBgWLyy8 zCb(=1M)jvP==!h_JmL8wa5nW{ee$H`=Vi!!zFp?AB=c*j5feTej5 z9oG8~m8#Od{@2<7*!7C^yeixYN&H|N1Ya9667{Ee$`LOH`A`UOI-Nd7s2{oT-31lq+IP?6mNMvIsC>3F9GK*wqRw(U(UKn zWm!&E2J2(GqH)U?kd}Cyb=kXNZ->fu6Kesm`kLe1?tWKOp&7_TVrZjN`={(Mu1*j> zIlo!g->wtksk>1?EPs2ui?Nw74fN7 z0V&~NZEurJvoPiY&2$k4FdILg4kM}9SdJ2iW#aZ}v@^;*7>@jS#EFF@ADwgmDoJjr zNyD~ej4biQlgB}7VN|xDhOXuJvW>QD?6ljy;8OiwnA|TlrP2!}>&MOsE9c52tghzk z8wJB+NAE?i#j`ix@%75?D+&zba*AvWL?wSM)u}?k0bFvO*6rYYedd6BoJ?w+A zcan)!1{7~E*uUfjOSN~*(uKD>NoENy7@2YjwJ+pAc-)6oRx4vq`|Rm+au zcM2OfHS2GNAq<%;cGyhiyD&8RQp$%-0{+eNW62~SQC4>A8eT${WLZ^WIir9Gi11J= zZ$F^w$&IZ>mni_B3Nq41ZOQnxCemrr3LSuA*#r-Ian#HE(9Se%{QfK=$T>U|1zp+d zue~9Y&icLM!rErJD!FV627JjV=%+m7wD~Wt`oEH^mi-r3{aZTnFRuFk4_tLc;NB8F zWKL`?{rU=9wQKtqWo09AbEESmug=CcwVEC)eRY=gI>vOXEaXaTZ8)P=VbD_GZp`SX zXrh8xijY%c#p^!a-WRR7*u4JhXh%Pv*9YK_15ar%-ZnqsdMh+*|1CKS#%rP?1Fvp$ z{xwILp@7C7E;ZL zQxF5^amIRlo)-e%)g~oiJ=RKn_?4|xMq=FEOP>d*;YzRMMojhFg~ay`0HRm$ArY#} zOYEiP+m72xNwHuf$#Q=3wrMiCeoN0kP24U5Kt{n>qdL*}$xCoXuFr(TG(|i0=*zmt zt0a~YqW@Z84jcMPElr@qIcerv);SUZvwB0HaBT-D4Vb@#49OITB@;?aCP7UMxv)Sp ziNf6v6NT12SsvWdhfpJmveOPYVy=N!$+eslIiAa<@E1!S$oSo|5fFC`cXfm=QvXxD zesJ2YC^_8opjc^Y;U1+0liEk4*yqI?vwbw}O(SI_jU|?u+^3T-1XF`kPq}95{F}sR z{Ky|YOBamb6PPo9+NpZFt<=cL0$P?skgbCLe8VfTvqW(XHYb%~tNTKi{o0 z)UsCa;hqZY)}@V?cS~QvLos7)P-WOEohK7mDy^xkwj_U>y)d+45=5Wm!ux3HkSchK zm@$bw5WQ6Lt5}6f3>Dso2lmQ+UobMg?=ciDd^~n%jp6k$TM)h_>jhDMa2@LrT5u&NEAXA%^muvf zg66x>rw?KcTr|+HrK`Vb@N_C1cv!md`k_aV9yMcu_WbS`P5-2f3r<(KH|KR+YxE|o z8Ym$3_P?J~uBs=W+z4tIx{f#~i5(CJUoFn%(uNx^T{K`5tP&1=@yiFHE?VmrZ3_;$ z#=bmV(;;-y1O4sJwRMk{lL1-Gs^s$dws}E2oUVOR0?W{-friQI{iHhv#kg+0&qyO( zaZn%NO{)&07$!h84d!1p31Y+!NZ3QPPgKl(@IGB+u!`H)O#s8=Re@>7xAcDbw`0%i zNlpt~FJZxBI_zmMV+)FLTBb)q2rf%+m)3{!%wwOCtCr<)OKDT+Q{qD{ZHH!;CJM35 zfsy=~E6D_pN-4Ao|H;nF5>VnV!uO%On7ICTxjmenT+&#O2L%S4g0kAT4vddP49Ukb z;AczXGd^#<(>8AQaqYjCKj2&mQhwgS&f02~{K>I4oq6-KlJ29cL-L5TVvGB~VfRU!v0Q zko_l1-&&K}RRe$R>_iWtUO0!kRF z>YqSt;504#sH3p!C!oa$`;7HYb$ZgE0#*Gmb7%2`pRle%nuaZ_ajQcVZjo#0jeN6n z;n;9#|A-#MQVmAgH}0W}gLSG)W)sxNYa;34X4{m~_`Wog;s;J;1|E+JOfNux-YzJJ zx8sj_WydNA-AXO(SLqU8Olp=Dr(31{%Je=@9))Gh#`wZ~McAiREqmn~?KotVZkG1@ ziI+-))CZ#{BCUxKYX#F@sFS(974gu~N3`_NL#)RBMJ4^6;Rem#A*HaKlo6vywe8a@)E@pru zaTQI!pj4+LM^vJ|imREIjWolvjAupx%IFWhffuN~bqLjOBGx}06qDk2e>&97<{ITW zR?OlSS|^*DNBwIEF4lToex|LGWcg%O1B>Pp&mhQoe|f)DS89mOC`FA^LaoOP)S}8( zG9g84nM*%Q*<+1az3tDebfPC#xM=hg!X2b?wEd2Oqt}1By!YSd0e%N)1`p*`Oc26M z)*K1b`9I&g_~;D`&$i!R$l=$^AGqC8G&o%7uF}GN3vG?`dnJXMCe$oqflz~_!H-O5 z(@L)rd?WCw3x(pqVC=aoIMXSxq%ImeH zl_t%xfJhHDY)ZQJIJ`Ar-%Bp-b)Jq1ZR`iTNTz!h@?i7ltgc#}T9c!jc)NA2WnXN7 zR$M7KtQL&I3a*<)5`hTENfiCux0$=P)E?ts{VX=Vr63IGUQBVKO=30IvOKBJjL%fxDw)__}Kp!8ywGn=tM6+9jwga6K`G4^cZmBLX^pI{jvP-)JIW z9lrn)&wH;6`-pKtkIe^0oI^TV(iGti=yDL80)HN zoH(okWTJ0i{cvfOYK!Pv5)0$p|8-!feN)c&xi-*_jdpP(OK(j#}=}b7$7I{ZADw$2UqB$qu^H&lOcA@}Z;9>)WFM$!JeZ;Pu z;r)Q=Oo9sn0Sr_L)wOj^vN#hEB17B85iyRR!O38N=;h%WAq-rWwH0}|QC$ndGHm_g z`|cxdz8ZJRsIBf6o6n)B=Ck@0D?V@ zdr=*71}ObeHsByz?@52WeoKFXfEOaY;iu4_kPrVRe3U;@*C;EcZdmuvWjY`dR9^Te z5;Orsg5vffK?BzTb&uvBJ7l_Qw6y1^7Wpv#`wbg)O+QVS^8*2*e&%(|1fcF2>)g_L z#A&#x^JS~v9Z2hOTkp+*^nKmd9XlYs)4X-ql^MQyxP9xBH*^2yr`}B;Ga&W(k<3IU z`Lq40%^a^!ga9=IPib z0iLD{q6@6o1$mkd-d%{T6+GWM>XH_CGS__5>>&6i1Ft0#tC6X0Xe0D!`3U6P!lKob zWV?`I64!@M7YEKBj8?h#{yN7S3;TU1BHz=z)}WWNJns21E;O$0XvRaut4e`8zO$nL zaMNFK@y={0Fp`c73&^p%yKfAlljVkD!Ryvkx{V6XfEx@q{butq=`7Ge$Etj&rmL z#XeI}@8^i8DQBsTcZnrHHHUCDcsXS)?SY;xK5&dcvULo~4&>f1fn`rQu<}31$vUgq zp!MS>IS~^Ml9&pZ*N}qpYFVOG4j>9aK0lNf!ycyhg2Qc)#i&ZsMmljyzkCW(y50>{ za_JF&hc;vfqiw$NN1S}nykE%Umq;Xbtr&~qpsx3DP-^EJujHg5fjR0^*ntp~!3*4t zyIADlqCHua>7A>+TWl@_!EqJ9RFt^v$AWs5$i`uyMOF$p6*y0XG9+AS7kImY+!qop#u>V}SIz%kWsd?OR$>g{ke4A49Ym^E*C zcp0XFJ*6#%Ohm4A@-x`(FtaVCs5F+uk)CBfLG7ii*u~Nvem1OY{sXkI;3>q}@B=1F z!2C8Mi~Az*xhFVkw3>qDA!v=8bhA&f|fR+2sfj^RZ)Bx{y;)yYYFSj6DN zmtN{l+n2jbU%78j)o9uQWOmu07*r`M5ebc(v@5@`sNF9E;>;Cs6?_GsSE2WL@?Cpk zbH*)gxZfK?lKaNzQoC=Q0;88F3z)`NYanU&tB!@p!3|~Cy{L%MZn;!iSF>P&J{Uc~ zvyRX0uQdXr@3)CVz=TI62vglmyxngQ3NTiLV%Tr<0-9~kGZq6AfkmFy1DqlD_T`UB?umU+2*s=XR z{4hj^$Fzp3dH#8`CV_*vNX14Wl5G=XQqNUVvi zd5H(8kez{b?*?aT?)p}+sVB>;2kdeQEb>E_&97c9f{)va$Oo|mkaHzDaN_B=RPU)MK_aVrN22h2> zkeR0G!GLwD7^Muh?L={&8Uo}k<=-s|3FtgDrF)wNfDKVBftW$Vp_;z6e?g1?erQn+ z#Baa>fbM^%>g4!{^75PhNb@_N;;YY{<-Hnz?yQ3kjemsOeH#C6k03A3v6UdNJibE< zoWoaX7nm{MF@6!yaqEwaw39V=!0G!RY!ZcyZy6m#B6TQ#R|kRPFr~@F7~+Mj&PREb ze?YeZ@L@`m9mmt-?0ljco#k6oG47da++HEIyp%>5u-AzsPpP8slI)1MZIqWKA%{2D z)u+SI%`ILV-qydb?#)jav^y+_DjB0>!meZrhU=oGm(b;gR<0RUteehD@uF^}4^a-- z1*iOSI&ggUj;u;#BN61S`5}Ij-$>#zIX%-Gl~IrqXqmB^11&fSa6x6o@Wy9e)_C?4 zHV;}xS)-x(eFlAS7V6jQ?5Pfu6UmbNGn}}w>!**})m?kOS;z6Kj0{W)x^!Tz2UfgkzXsP zcEVdG`An2tH0$U@f`uzLwMaCk>s6Jy1B=(XU#SnDa;ARjghjFXpp@qG&5Q}TiheyB zY9pHk`i)=fDba`h@TR{yUAr*``OW>f+3HajyAE! zJ+o&0#dG_hQ?gNq+)t}6Hy^47hzlCXk6NF({ap8q!JF_)dY^(8H2!kRK-((0-=T|N zgTekDutYmFu17z;Ac3BjpBX!H7W?A6&~&yG0h*D8lZUG(y2VbH#S<-U^};-7=iOst zP{9R$(PfnVJ_}z<7Y0oQS+h8)>d^n<&1O50VXNC{dgZr1mQ@;n3=I(t>3NZp`49IX zLwa5!UED5YXc_>bJYFTWJCMQA&*k;AJ;-qOVB|E@{z`P;5C|E9KAh%w@@o$=JbC2( zF>Vhse2j~#d$9)@>R#LodiHN2!&=cEWS|M&gABBc?A#a0dywIxv&EfHdypadiH^#( zJ;)IBB!OdgVGlC=ATG}4??Hy2#{UOosPnZ6^526D!O!*}!>7nS$ndn%CfI5ZGSIgu zC?4LX?shu<=-Ae3iqO!WHrD8hbK%^cHrA~E^x#4@Fq!WY#QpU#G1Pq_VOJ8nE`@as z65l)wV2$_~HpzgTzo))F+?Bv~yS%bu7+E_45Iy>rVH-LqJH2Aw$MZ@T}A6c#rp<8dcRmv*{H!adkWphBiG^VY-=TUT?Zt zVY--a-eS5KZ#q?AhBKXlD-J)b%Lw>lzV*oFVEU=TYOQ?isaqOVwE z)H)X63w_^HNZRgPZr%**#I|z2H3>jKax6e-f>3>CcKQnPpb zQ7E0t#33oFF+e{T{4&S;%g5K%zm_depDMI=Ioxz4!uoJi{NR(MG>)z(NfL=ajf16Y zei}Q3*7*isZL9OWA?D$pWXV;@mS6w0Qkc4c`u{N0ndl6O>6gDA0QPcNgQBs559o3& zPIR!1iiv|aWm*{Rleq~JdJ2z;KPC`bc{o#DQoED=3_-Endj1LVfdFaEKNsG~g+eU1 zIh@8)(uQ1v2ssq07o`+}+6z2xrcI7Dj`Nu5Tr2coN+WYl>SG5iN{FJHLb5>+ED) z=1`%bzAh1d#(kCB)}Gujzr!EjDsc&OXXuT{Sa?+LPxpOW zPArum+buyLbOpu}67Qz%kX%vB_{j@6>E7im6VWt6>;15P$_>Ya3OU89T!cfJuG9`o z`4!P_;6&<_i-RG&0^0AiFMcrUo^UZlWVcFT@12xb;HYk$VwTtmZjInaW9A>>QqCBR zt5Op9kZ3WCqoM8Dp6*t6Xjc_1{_=-xzTar3>AX{^ja$95;@btN&mDMb>w~up(Bizf z2Q6>nbM0()@=`~6z43#mkeTdbFF&J^LcL4McK zzjz@TEuXz-M2RMXVL#}2GXYOOiD=y?qvbS&w@%1nK@^_(e za2It@Kj{5S>n$$MU%kDNT-?^`kz!G7tqt3LB^M~!)so-&mWebm7+P!@?-=80eKV<9 zB9XU0{sp8$cLyupV#Zv6N%S4dgZh}lSTFmDOXr4vBiG$UI6&Q$VXO{2o^$_h*?{~D zTaIa%rn8-_=+^7;R`IFQ{>fJ21cd(u#HIcAW<$8-PV_!274uZEy2u$duhE|pI?$1S zhYLl0Z-y7F$yUP{C%e6WjuN9cMVRn(evkHJ?9VMAN0F4H1|m#Dxy*QEDpAlN&dDc>2> zcQVfIn{MICE6u|2^%|qcU7ULtxcVzNNt^G>cD9?`Z6*i%Fvw2bCADqY=fWI_6=%-) z&^mh%0g`SI3Pv?v@GnH}=Eqo{?=T#fN2x`+3QnYImw8SU67x(FbFd0T$wIWdY zOmfWLO4;2Hw8Pz^G2jsK-xTfM zNT^^eSaZmq^KDm8%5#uqk61l}9S$8-^%N`I-FvhYI@q?uyzbmT~<{f5JqOLP^Si5>3Lk~Bhd4^%D+gosNA~*CT|-0ZRtZZyW}t3b*v7f4MGCm5+%E2H>&mZ^ zwDwwNU>DNumQzYM(~@c_pLU_uuR)px9^abZbk6mbzt54y%?I>;5rAenD~P-Pu^>bw zdjba3`~Tc_6y%Og-h)^adbgWye;`)yr73^2J%}|!YaMQ~z6Y_$E`!xue<0Qr7F{y3 z2eD*j<0*50AQrdwLWI{I#PV{Im}&n5u_8?<5v_X=OI8$38TtdU0{W}_*Y+Tm^Ax#y zX%Aviy31Y4{spoA1+o6OK&)K?`j9gl9%+;@kp~VQgO63vAO7DzKEeOUd+B29LS4lM zvEyOWc1geB!HP?r%|95>w9dCo#5x4x`=gkIIyryB40mSdV=fPq3Dxqj{`M+eiIz!b z&X>ju51iR+(G^?HeOuw1{p&xxvO(#SRH3;Fx(er~iNjWP-zHjbzEJ7&EzKe1^e&&n zmfbd>s_z)eAVZb%M{T{dUKm$9yPL3*szWs|VT+dBSam_#L#h`~*b1vko-hd}XMGQR z0b_mW+DX=;T4FUu9EIOJdN}lktchjmueb&_p%uIPm%YFu$s)jfT;QQsHzY3p=mj-u# zi)Kx!mOXoL(}ZFIXUZiY4s%j#;7dZdH!LL+43cyMq<+OsU1N9Hx-TO|sw0ivfPZg` z#@J^-W=bpcFOrI{GYR%Rham0;IB1Y+uB}!YbF3&B6rUq~&0COsq=qKO*ev)8>nd7_ zr$U>9Q2OCytV0RCi$!Y;4ihTQ=cluyZDHsh(q}YA9ifLY)A|(6! zGX^_%11}L2dlDmu`Pk9%8;HJV%VygQq~$MdzobzV$OV#N2YGS(EyAu21>tRk4hl>` zrMlrALTjd;m#~*4(yCh?FwN#eT#~+*iICce1ZY$QHUY9^q}xBSK(2wj%gCC3V!)W= zS2XP)3`(9hEUxAaJwHWzue%-@1F9QW8a`Q;LyL!{r^id714LXUCF2n%h(TEYO66>G zD-5)CkBLPIV?n5YtoG7!71o;b2HMZNUf-n39&B3S*U=}dO|yn35+=+A!At*uApO^) z{~&<r2YSc&OU)X%#^fL+ZP^-x>)$x(aG3pTy-lJ>?>N!|FkK>$~+}Q!6UdP-O(s@i( zBJr=BP2~Ei1+3GA1V?0HfQQ^u{OyYtjzAmjo@hb%#B)Y;b5OIl<;p76<7OO=?L5^W+B;A|2ffe+n znh-3m{k8(2PfPk>6(Nzt1IpoqQ`ey@hm(LXcO*`=b|#vbZy>Vqm?Wr~r<27CsEiKcWx}#MzNnF-YNUlRG<6BH#UOIeHB= zfRk_;jOlNkp&p&_WEnnS$Mu^H;fEnm-c18~lg8cSzMKYvm(yne zxg)!+>%+Alpmw|*`U>FF{eT<<1sNm%@ae(8$q~Q#^k*!=!GH9DegL1&4agkSZCyV` z{vpmax2^j&Jw{&u`asMdeIRf&*aje8K&Xe+8~*LZ6nLtm~vv>{v1MgY~+9C@m~5X&=ykTl}l!r!DFva za$t_VmZ;vZs4AVkU(rFP9@rG_TaWHO6}Zainh>}eYCS%t&?x62W)w{0X?h8KmH)vx z&xd%m!(Bh0;W_q*Og#ru>SGFFBxw1V6bj1;j^#HJ)JEP`=sVjcQIACq`GSlAxaU{W*^@X^X?u+v#m7k+v0TCDZm><*De#hbERY->3`88@aeaeZ6T$Z)Am$ z+3uj=2}Inh5li=6c8d#!M7Qy?czkQ4YJWpY@jgNhatjNrE#EGLA$q}qnYHL19LI{T z%1s#Lx1dsDA)a{Bns-mMTyd9CRIGqBHN+M65J^zbV_tw3FHP@mP7=0AEXx4SRv`HV zOBM9-$x(Hi=i9QYqr1LvK?Uik=Hzw=>DH#m-!f?dx2XFbmqM|x;h|-nLXYM*w9tML zrV-#|dcI8+M){gMxSyXoQh$*l=|)g4$&$3vcLz)h6L?<)1nnQ;Kros9eei)*un9O! z9UsA?Bmy)cC>ULd3BvjazYulDk?EK3Sy>qanUN9K^$e5F7>_<&ko%etBR*yKl)B0} zAB19uGs=_RjJ*~$EF6b|=LPs4SHTB5kKmoWXK?SF`=qJOCIV~>A3*kHbhaf$C`XZ? z!X?0Qt)oivN*QU!)9;;81KjFE71ZI~;vsq-ccA(&2D@_p=?d42)57on>4|dxL#LDf z2jFaz$iH{KI(F|g_Ny}9MUjk>l3!8-!x@Uk%`8;}WO{p#g#nk2&i&NTc=RMZT=`VU zOZvj1yCDZeqV@yV@1DIV`swSH5?6P5ao{UtBtNlFiIA?btz!^E8f* zr&6!|-#r{NpFJGS9NTMh3CvV{Q5Z4Ap5U$nX8OHQG5MNU$Y&O?=wu~4Qn`b9Jr?P5 z2rTW)2SP$`!d$;R)@sLA+i_bd?Z>T-Ow_M^@X&{EFWi? zYjDWi8gV64Q>wUWqWK8XxxL!Qxu;$xi8yIK6rVPz+x03Q zPr0t?H0DJVTX3BJjFK?5l?rn!kF)bZN)(tpKu$5^3FqP6>4+@5o}6w+Vu`o>1KdPg zbAw$hr-C4BCfYB$ZJtnZjV%MlZ!<$s=*ZSg@u?&9j-&GWmxWN<-$`DjHG*>o6CrpIeIaQnzT$hO{Yio5b!qMLUGGRq)LcxthluaA zPPDiBpl7eg-se;_BtrG>`vKQwXJ&(ZoR#4x*|nxBTT0P}12eHyZ`Z+(2A6kL=xrw* z1O(If$F7UDl*)3mGI^+jEf&-!GQb<~ByPw}SI3Ds)m?2eid|ZeI^szfs4RC2h^}7U zI6L825ByIO|7mYOb?A7kw81}>qD%``!+M2a$wcs?7?%&aEoe#+d|UFo2!2Bi;YC%8w%My) z@A&n|A4WUUrG~cIbr=6_Hdjomi4!Xid`*8Je4!qT@W<-u_w9cnaVI4ZY&jL*t))z> zEgJy7^V&V_2|#?3JF!w8lX{9-2JDwY?9SQG0l@mH=X=L|_WBXbx&4oP-=^+XX-&>e z_NMHX9)OMy0_SDODL+1Qx%E>r=s^1zVA&5K^Qr$Rc1_ z0||m`bpeZ1p%AndL=Xg7qM$}aj3NpmA_z&03y46pWl`B8jRKLK2*H4a9b{Jok!)|0 z?@NUD$2+Izy`Ix|p8UsrcV_N)XXeiR%{TX#j9xroSi>hlRM6Vror;V9QSz?V1Tk+NFXp*izwnKg$ngA%m>c%qXY%~Np& zM-9_*U7vp&P;18|e?>A3A#Gitio7cw%^T!+G&KMVP&J;MY=|`%l&qa+WPg2d`5Ft* z6y}ysQng~c!@RzCiIdSFWGYHVvzn*-(?I}4@!x>7I$4jkDp9ogEt7ag2#r26;4=}D zlC|wS$nzD0aA`e&GkDu-#d@S5YTLZ7#ffSnASR4WcIt5G(*N4J!a;jOSc1qM_3^aA zBF^AdLD$PXGE{l(o9EP}q;rJ2KJm1Rz@(~r%yyCvZtlQ2z7>&CkArC^Je#a~4()w) z&Zs)R6=cTP^0I-okxV0c_O7CfbL|~II~f+1hzCh~0$Y!Ml^J#Sx&2za7NxY|7lEfI z0NY_{QOi8FHt}`_jXM>H-g(}h{e*jC|rP)g<4>NuLSVdK~_QReFlR-Lqc$`UuXtst(oO?vF|Gq zab0Txe^d$Z^F?_LaWK@73qUmu+?Cd~$9ka*R6 zotR}}7c=e3wvZt;nNR|0r*ijqE;+Q4J>7OKe0hmiR{qbN$f7bdcjIs>jf#8j?Y8n- zMCsunhV8*NK%Z?m(Vw45%*yc5dqrco7EDm`M=^FSh7*~N*^&3(&>9~u-W^cxe|V5b z&Cla?frpl?MlL-sBh%}PpMs{oAQF5MBCH(Cn~SDg*dp5P!4owuOeR%6q{VmXvV$z= zgZ@@Yg(A2vLshK4pK4RAaiQBkG!g09Cd%UD$FB&m&(DtbGQL^sM0Mcp%YUs9x4TjJ z^l`?IF;_{`&9nF>s+YoSk}uxsVXT0)$XJU#<%D%b4E8V4#k3*pxgh6{a?#o$zmLD$ zExPXg?8n@b5tx)hZZqeb>9SeW0mwSar2)YkWjrs6c9bdsI0fK(50f{E+#+Se2p{AH zaxvXzkgQuPmr*B|?Acu+C)yBQh=n57@6$*>A|!7S$X7pXF7SCBAdW_~$9N!X&=$~1 zLe*oDy~ZOAfB;_HcsebbO47phzL2#O?TJZ~74?JHyS>WrCeX%^Li77YldilyUEH>& zT#Yv%UAeOL*NQ9*rk1R$XASM7BJRn3%l9-;1ks1y#piC8R0b^Klk`<#ABShhYlq@@ zoWPF3!OZj4&c!+@h@6}CoIz`0Z4(m?%WhPM&DO+uvn}k=l~Wg*zJ?mQms*za>Oi+m zzv08OwQLcC%QmkmKx&TNmGYEH7e45Qq2C-KH zTJoCZ)nShkXXC_s!KSGV8<8^r@ebX`I4e9j~xsg26 z#l4HCS0n^u>04ijgGqxeSrViQ zM~5azi@ztRO5VdZ6dc>;MMxAm=ZDvC6;iu<52rjdZ;xyHi_e^p+)sH}`xYQ}!s*K>L3E0H~bNsQyHa0;WdgY|aXvgB|I)y%F|8IQOb0>85 zW_awi(c4=3{fR^BETP9}zxJg{zKSdYs&r?@z>oD{PtmR{^UPrevtO5NUa5eB-pY}v zmeE+3c}$Oc9iO|5d7tkhbp5%WI7pDxtwY2uf=B1YYm}m_2CPUiZoRxE)W&+;xV3sD zY(<3Sasn)~MOJ}Mfz@j)rw0$hLl`#kt@?3T+{$vPED|101%*G#CF1nx;0aj#{r|MM z!Jo5?wfa$b4vckB%qE~YOldE*4e5l<@gz#N=OH||UOu6Rw8G^>?F-EZ;W__Yp-MV0 zPCCk)!{aodP^AeQxR0l4IMzl>@`cA?iG0;U_|eYJ1oa?kF{A4o>|8o;s!NxOd^JT{ z{8ZgfDqSo3AqIK;!Qo>^QeeFl&CFz_3zi;wUQ+ycfxLlaWzF>fF~MV!l@q))HQBF;+4 zUH%dQgStO=Dzxmj>Y4i*WWOY)C#V%RO$ADwiVAcjBtuYK{K*wIDc?m^zUxcJZBm_!SI? z47}SGelzX1H=pM5GQBr^t42=1V#pcm$6cQGX1sea#I(dDX6F?}W(4F9=V9WVOwYjH z*5095HEJv?^8HJX0+0Jz=>@}xkVEW(wyDhAeXAy&^j}=H96z(4dG3dG3{NLlp{m|6GLr zcUxFbjYyG0Samg&Zq#U&&H| z3eO!aDGWf?uex@Wgz^n^|1d(0t}Gu{lr7LEsSN8Ws@>b&THAm9^806w3PuoQ8M#f}^m^UK7e`k0F|m!FJJa=EZJ?R` zT3U4Xkxkz1Se%pVVF7fq)0)}Q+Yxd$(tZE8eh;+Mbl6s_M}52EB2JpbTc~n^J)P#-}#yZD7W;mpUbC69{LvG5c)-& zO^gEpq#Wh&VLNGF4>HBQtWL=p^vBiL&6X3h zbsH;+Z;(x{ixJ*lWZ<#p5?_S7FvfpV9T@XZ35 z6tni%YfyoD>x;1?fD!msO+v)mc7wA}?M3&hOE-|YNe(WMV!Ok^w>94t;$!d>@JiT@cCD*F}rR{e5)xy(}2bp(PgTx1`gBUGsfm}|T zv8G(0-oe>a@3S{%PFeqUHQzta#-DR9>8>pN76~I>X}fzF=7Fn=X^-0Se5}*1xfcjH z)Di)^Zq#25zPhn5wm!n>eKD!V)tG48G_s*}>XJ#oxDh_%v8_agApP9}+9_9JSz}>YrxwNNuq?AJSn$AZd%anA! zANX+cCj1Tcuedw%H}OIL*7de`%9uXhyg<;xnH4TX?Mx(aGb~dUfIla@9b2e2d(Zq6 DsTEHu literal 0 HcmV?d00001 diff --git a/wiki-update/Delay--Channel.png b/wiki-update/Delay--Channel.png new file mode 100644 index 0000000000000000000000000000000000000000..11beb5aa0f775c2b586fcfc3f26c8a813f1bcce4 GIT binary patch literal 36274 zcmeEu2UJsA+osAD^h!}t5NRqR7C;3AAruv9((HvIAW|Y-N&+FEqI5w-LBN1Y6KNuy zBoyg}9;7Fs2M7>)fB=~TC+NMi)_n7?HUIzpGi$C(*YTXQv&*~Rv-h)~w**|()8P2? z;GbKzY~j$-ynG$F(za~b8MT82_}?`dzIVW7tMhe@OItD;1V(|IKddh5Ufi-JD|FY2 z+4e14wpm@(xv2&`2mWl`x^>&uE!(zjW7)cug@tAN_U)`JTiMvycI?=(bLUQWc6JU9 z4o*%^E-tR!J6QJa{A2Ilz1-Z~`}XbIzkfe3FE1Y--@$_i`T6+;1O$Y3vkD0b2@4A! zI&|pp;loFc91-DWJ9g}t*!~@2Vq(XSA3t&8#7Ul=;^N|xe1A$xN}lHX^YrP{XU?3F zl9H0<-z5Y5m617j?wqW^E?HSwd3kvS1qBEMqIig1=@5sKl9Gyw%7qITE?v5$D#CgB z@?~{(bqx&-EiEl=ZEYPL9bH{reSQ6_UQ*Xi?YVya`VH|tH*Vaxef##kd-sftj7+5V znV6WEnwpx+>@%0yZ*FdGVPRouX=!C;1%*N%o#%P<=#h<$jh&sHy}i97@F!j4@#DwN z&dx4M2V7iS+}zyYaJaj>I|6|~B9UHRUQeDpdG_p?j~c&^kI(bx&wYJ;{r&v|0s;a9 z17E&;8KN!t>eZ|8@bCzI;fRQc$jHcdR}V#BI}{xq{r>%X6bcm^8~fqIhfkkA#os;> zA0MA^`$$4ULgJkxiHV6xNl7UwDXFQcX=!Qc>FF5;hck_iW@ct)Wo3Q)_ANU*J2yAC zprD|zu(0UCv7(|PG#ZUD7b`9Wo2b`b#+Zm&5s{Ha5!9D zU0r>BeM3V-b8~Y`OA8*4Z*6V;`SWLcdwWMmN2jwyXJ==ZvqV={S9f=JPfrhlKp?qE zl1QXpH_6`K-hqLE;o)I2nLIi=IyN>oK0ZEyJUcNlL8VfsrlzLfKbV=Bna>TR)qGxR zFQxaltc>@q%}+5HjPPS@&)4tD1DEY>yLKS5i(Y?{6s9I^#DHPE&AVe$p>wjNPk&M}QMC~rxvRmq~%hp2= zFO6)wQ1iTL`;%7zNAgc;?A;M{{1V3C=u_afB313*d%JQu6IW=@rVi1&6vKV~Gt7nOur(JqV6j-@J`J zlA@b!<$m4f)gPCR1@2aP=}vuWZLp+hwN#A7_b=#B>)!_--7R(P`65&tPK&K+Korm> zP)fO|d9C!#{zhQ3lk;TW8ZaCP;HdFR@9xUi+ zZad7a<{wvu9YC5cKKPmL+;At$7%nZ{uw5liT3T;ySr>nAb3hgj#JD5|L5pGcu? z*~+ivF(Y*E^#Yr8GAP*l5@4f0k8H^K|F_#>>HfwGm^gP(X4Ig$Y+=jcu#I^)86G>i z%0pfr`Lkv=TbMehogN{*n&kEx3!in)4*pi{DMqaBdJ(#)j4_;`P*N8zdfkD~dbY)O z!TQZtC8zX!Mpknc#_ZvqaTCc2%JgaF#>%ad=&7~?S4tkxQflaW9!Uw>q5JKwzxy>?W+^GO$#tjJKaH@Cd>N^qb5cjrNcE(RMHN)w8XO#t z%sp&h+{gEh1cilL{|SCk7A<%8`jyKmT*}S8kBz#VIl3rAii9;{_{mWiw#I|>8T%?c zY9bxJR!Vi&B1XxVD-#T*(KO|E3*?Y{Lj;pzZ3ouMt72HR$mc@sso|gJ0%{RcwmllB zPP^Z6jLna~@@*7u^LSgj;~paPGwfr&-rOKo@lyJk0hDW7mN&Jz{HN-vI(R7REY9kh zAGoxglsSp1=Dfp|t~h`SvGaa0S65rd6t|70hL1T0Zk^-VjD}Smow(CM_c$}s*W6TB zx3ztSk17+H`E=pbID!3xw{W^lT7yizp33)JcmqUmsyx;v*TkKwp2}}Q4>+DZ@fD$= z=ympcLLbVq8-NdZg=9G>vT2AjemGyg zsEaiYn~B;!tm=}x2kf(*r+-=Kj5^R|Rf8&dT_bQE)AE^=>tH+k`m!7 z=Z)SQ+Q5Isx+Nv0hOj_SdF!yP7D}6+WIU!tiA*Mj=B|bTO#FGFhlh@2NZFZ zwqWn_$B|yJJ*&qv3u1pfYaTD)kLr=^1tcDi#J5UJn0Y z>U>NVsMPuH{#zwyn|Tk~t64k3{eQPtvt`%xq2HyRY~|_SDr*jYy!Os2EaDZbzpJ*N zFE(tPMbEp}dkc0~*qcJUG}Dpq+MMk76;RI5(}C{ z&$J?u=;)H!yN$)(gh~JldaYq+wwsm+$M55fhW) z@bxM8m>@U_4rYBtcjJmOf{cqeyOQ!KA9ynmu$0Ln+6x6X$@!o1?=o%ru2~odbt)X= zdE0h2D%Eh{svRNPH_?Ml`u$bX2k*~i@cDwvU9k|ic{H1*t#W*qjzQyUI zyR288J(5+^h$G06de8nM{zuXJB3h|3ct6+V`k3}Umd-~$tPR)#tju;Nqje#KbvRJc zuYJvJ{p1aydcFy}tyrIENdSyf{NTSan-e2zkgt@ z%I%>llsd=gcpaUAAlfR4smOT{Svs7M>TR~|+Rk#rD371R@2>bA)_3a z9MB}=Dr;t(Q zS6g(VC*AWutsb`eD&)-Jt{ROwLAAWXa4526sPqw(gz&b}Li0i=T?FRe;}UBnZxUm; zmFzxuHe|tQA-V~9K;>;NN9*<6$rF#@qF9rpk1X1u3aqeCVBp~o9%pe8% zIc}VQ_(N?*2tTOnAy#TuWLt!0S zsaGk-G@h0PPgN>TZ;O$*94)`TSJZqI%lk4~tY**x*?}?FwShjy!t8g;TXS)q4?Ts+ zMzz#!eEknJlpI1Xb!j@(nw_aPm#R+?jqd3s&=qqTPo47;I`5L`XF@DDmfF3LvCer` zqG3zjqb;L?F%bz_3AG%=m#SkkQ%}`36yl@vE9zZHXt|AjP;>0_eQ+`VcXK`eT^!SY zV!JDKJuh8F(F&g&;CP!k?}8D9Pws>c-b;f)`St{l;0Wz>{_aff6~s)43z7Gp82m2p zG7Z>S%?$QN-r`*@;9Ru&%Gn2jLJQw3^frd}xKo7z0FaM=+}j-VnXY`F%$Nmmg0y#oNO!~vQFgDri#YoQ!__{HY$y7= z?(o*cou4Pb?ADYKBmhjrC0e{6o6OF4G^xx7w(n$U)Q3F!Ny#3k2{Qm|?UT6C>MC5H zNKaP+5Lt;f?x*rYQf9_T5%MD|UmI0QMvV-xX-{BIFon&Hkh0Aa1{ zm6*l6ZD?o0#y~Eq7I!Zm0IWWZ*e;92h=Zr?KdEa0Dgahh(ZFq^exNhyqRc+?VCSbM z6$;PeK3W7wkP^TxIJ1wy4m<`xQ`{$u09f|ZbIj+x+Cj7*I-Xl7yNMdOy_sE8i66lk z_%n?+%Xb}pD&>fO>r2!Df%EokxgGUzR-iA>Bh-ks$8Lj!)a0y1RY8p(P}p5-bR z3ljy#n)?T>C;%hcB7sw^R`+B+CN}QoUE%-)s%#M9uEIYJLMj>`mTmIDKX~uIAMY8I zl;5xYeL#78z65QewZ8-n%gDZ~A=rNJeEZL|PZ5+y!IaOpui;#8R=GOcd?ptajxMwE zpZ`c?GRHhT8A0zmC&@{1_fb=wXbepps`c*B)ET==BOnWHgt<&WX8 zpwH3=p9(Xy)3d?lofAeO6btMF9v_UE1g@ssHllWvPe<}SocaD z{u8Kz-J_pE>F_oZwHrN|k&!0^YxTl_r`n#`;&Q&-X1WF~!I~0^r-F|jyk32$ zQ{==d__Ive|N^E~f9*%IM~pvIp8t= z%uUB?R_J5NHZQ1pOe3eGTr!JP)OlNRN&Mqs`B&-iz$7To9$jgs?Ez0@M|_ABY+Kop z?{m{ys@X1W0zGTbfA?Oe7sKbiw!5&97Bn`BXdA7gsz*q8b4-KVHjUpC?O1TGKKU)$ zl`R`Y{sY9$n3rYu8!ZC9$U_d|0#vEuisSxijb&T)w2PFEZjSJPT6xWkuhCT=sFYs4 z=v|os)I^TVxyv@pRg|ncN;DVLL*EM;_fN>ZZr^E`Dtf)#Oarr*NVx4hEl({!H0%8B z64kzr4Y;vyh2}heG&fvo(GPWZ+cuc+V!~wqcyLt38@XCv+m|w~9im8Zq3q^xB_wyM zs=93nf%49jcn$2x$agbvuo7YtJA?I}FwEC?9TQMnsG!K%A*8jIpd~S$tm^}=;bC$y z5Zg2Lx#-ogAxi4N9aytq)S7MVyE%JAf{F#(DX!v1=JYJs`?bi<-_exz3zH@}otM}0) zQRe)J5D8HswHMQe9IdmtQNA?~pKXV#C-`m^=f4L(kOX$`9V}nTvU|1ZY+m>`tOv2K=exE<;NRF}?5q^x(Ir|KDbO zNi1+)c{=3|Zjz_VQIs&Q)R>zD4Ch^VD5+zo6R7d-((=G;M0cn?^uQwr>%p_c>~RK+aXgze_qa znk!vTJa|98(&)j@zG5hKgomO1h5aq6v@^!?48O9~5PhUqkbZaqG=JH*cnGt?#O{B_ zxtQe2;Tzo8!jW%yl1JZaC@^b(1{0G$Bv^6H;dR})K@R9+0t-L0(+9>E3p*GS6QyX{ z6aPW3K$*fJ$CB?v0wk{{7zW|JrfN*AyErMpH$T~^_ASEpG1KsNOoYfX>Wlu4#uwY) ze}@puPCEUQ-)>C?jlkeN>56g#C>}wTI2#4s+k>cKNDQCDYri|&8usZX*N$Pjmxze3 zPuX!r#;w3PZr7ng)n~CSE=b}xXmaOK(iBBCw4|R({mntb zkGT$r-bjt;=kva7FniMrqhvURXtWSY&_?Mbe`4~GgfyPymEQ0TN`)A04+FAUP>+IsS&ErXO0LUpj z^m9vV(2MECEWkNJ8+SfadGsc@$dbO3lZ3m&m?xHAiDbn>5HUEI%|t0q1C**~V8jWc znx7%KbdyT;&y1ZADpz<;O0;+_oQ&gOB73VbV}oiM!0kKWrRo=8_FzX-mv)H64$}do zE(eV=n?<;S7$euyY(+opy)bZY2*pd4Q}WhaH(0F0#SzUaiu9FrCikF(GbS>mojI)6 zWWEUjl|a`WjZIRxDy}1-3f-AG?t>br1_T5(uylW(afewtB>4bETqOWFXkEc6b}MfZ z?$ym2{^l$H;UiCA8F`Rg)ZAgRxZ#&uIXe?Heh@ zq{Ib^M^I!wKpplN@VJY`+y(J%L1QG}z!71fwD2d3sCgB3a6V}6A%`VrD8LDjB}aT# z;Md{CT}9PsP!13bK&ub0+E##G96e&IZk4_Hz+(jPc;eUNDla&R1_3G|PGwNlAk4v^XFW+J(k2UACX6VlJN zN;)sP<0#Ox@MphS>jt1=5nzOt2JAvs(z2j9WVz0kS|~4HDo@|R!O4~Nt35V8)5Ag! zf0sH_dP%YL7q>oX_2flC+^?#8(upvNyH~z)=2E6Pz-?3BF^Vm?(MVE%i9Vsio|L@o z9clX@-#c>A+s_`j`Yp#nfcrSeVw|)caFt$)J7sTH5_f7jPQ<~iI!>gU#BXa>P2%5& zd_rAB9HAr1IL4O{7wL#zj`3xLDGkAxAEzU{X)qy5CylDuLz+*sB9~CkdROO0V;Ld1 z6$0^*8w0IGg+<$RGN>{*%$r+N=$>woJB4vS{;xmuK<<3EQhdC}l~ttLRW!NqebMVM zGr{H)lBprq2_|xGZ+4~e^Vd@T2zC7E`b_N(uScm``wL%m7UyC;_)+|4_=@n1E+nyK zWX>9X3L)HZ4Ri?_ab|AuVHL|Gd2Qcm#m?9X;#YHUB{DpkbvV6XLhue|3-xx-oE}WO z_z#Dhy40N8FNhO_SUmEBh*rP-w7s60!Ot&9CZjGUEGeP~B4MiQwoS}28amV>aB899 zz^?*nZHR@{F4SVzn`3NWuzYS>(NI|X7Z%Bl z*HpqyOlZVwG%Q;SM=nBNX~lzxa_f=9YGiGol?Fdi>H^<`U7JF969S92MJ8bp+Oka8 z^zots5&F&0sTT1?19b6n+QrdAvlmXroZz3G%!EUf`O_2^H!FBmEJt=%_#97Ml?+Ii z0(Y}~&GH$nC{Zt8fsm3;4eSt`-uV?#64xfpw4!O2OJTZ8^bvCykum?#VAsaU&DxB7 zX?=&RdQlRA*&1l;FZ7+@1|u=d7J;zRILF$;z`q{fVdHkF_&UOY7zKBJk7pN~x+qgm zTWBr{$AIo^Jx4g|XNRFDvF6%AMWz7epdxDGctSt}u{K%yynB?-0MEPgKSekEJn0D%f*5yJn-5Rpon4l0L{C10%1*HA zCPlgNe#Sba9LKM|&CWi~^bO@QR7g^K4dpBuA8+7tl#5jP!=t(&U$xcH;Qcw7oc;ke z(2|S+%6(FLg~YCW9o8tIrL`G0Q4Z<4A?2D{0>3?unE)9SqL|%?zkR6KNBcvawi#FC zmd>_5JQ|}L?x$vlGt*!vJA(>FPvDrZB`M8u-PgYz4!!1emCb5LDl{^ow&!H7Kwji> zBdu;LQzB4^(%sh|?4Ix>8XpN-Ni!V*@PlrHI~U9#WMlP$$K{~Tzk%3hGjcBBw@Cb` zdY5$FzL{>?$)$dOE7jNK4@7?syC$xv`hr8weh*lL-_xcuha|Lpb!8{ETsr5G-D!K& zr&Af)XZn>uJg=^;j^UCRmlJ0FRi)-&?YZT2Wf+XqZlfhdW*Vt;8Ywl zO$@UP+3Y&+kxfZHkFeJtJD)sx8<ZGscSbNN-iwQFn`i7l3AYE7`JZZZfO~C6+Y~>7u=|l zr*Qu4OE&-_K|+GXD~fY7>f;Zuf5@f(YI5n#KjhLsi?bOl5+3Z zkTMYect<=ip$ap!UllY0mNpp*DEiH29s(C!7ImyivE?XXm=KU$h^|K8nyANo12H^T zDP0eOKn(j-MQ$_VDo^1$i6bpTFU?d(Z}Gn$o94J@WhUmo=-5^q?$Ce$ZRS}v|BDLP5Owl zA6*@T&f>7V7bD+{H4jSIpY7}G1L0ule~p3*=fw?+Vd)OmUHiL}t2k%sIQ+HM7sz{< zt@;w{Q=+Kzt>^ocUfG*guF>0l=W0wXFBr`Py6dCNprZvaF<#*+=_;s{_l+sQLbY33JCYvF=!M%&bwD1&TY}g;JyDu!0HcM_igCN5%}F#q z8m~Zg`@96{7)Ba7zxyd5KmOsVvFH5{nL3@w8Rh5pMUcT}Wd1Fp^l*Vmg~gOsDQlm{kF zx&@oSt(EeC-hPo0ixEN5)b6t>VJ24{eaifxT1IWI)M{5wWgh@rX=&qzTIJzh3ExKg zSba!(xThMYKV?+H1;ZNwFS`8Z*UnpAb&id-{qh>jG?c!TJfaVnta5YMKcn@UZz5~| z;xzbKtdnW)i5gXSNO}(V0jlH9{%kuOlLDb_`V1Pt>@ymADL@^eP`>yd3O?DcqNGii z!Jlv6XNoK{qfJsWLPjnTI(~T!7G>?)FS>5!(QlSgGj@FzIi{t&=`h$D$&8I?d~mLo zS_zook}RS<#-5yRM>0131rsOH*T@Vupyh#_x~tkK@AxOfzug609VZ8-f4K_^b0t3- z2?cx=@i}$Z%aMj@^tlzl+_Q30V)mwEoKWh`F?~QpKzL2#8WlH4@S|7()$&^3Go{h` zX2#0bn3l2e)nc1r=Z|HAg&qfPSQ#R<`B}7>c$UM08FgzfRC&8LWUoN>~Cn zzF16NKu&t^0t~c%5f%%GI0Pe)T(Umpx1De;d5S4uA%)SRi_%<5%>?z`DWfJ7Dfjs_b?86>>4V zo5g52{{|(MPibrkZ%zptu{5KE&8>uH(pX$VgL#v)Vv&r7 z@>SzT54Sb6&@9X-wUbUQs3T3JThdCpXT6dOBUTxD*>&3YwwK_rN{`>tQxvbXp8~f$ zlYrTO;x(8ghGa$(^>LvgxUBOR7+T?;E%jiPG$I5i4|!OEk2UNKd(d%|J*k)&)}#g| z?Mmg$lW^`og>gj~B{gn5JDRAGYgLJ)w#rFcZE(w<9AU31NyRWu+UZ!Hd@T94A{fm7 z0^jsa!zEwjok~?(XO^6woOgp=B^sg3Rk(%PcGmTe_?LXVz4d)U0tQtO>z8O%{cUW5 zgh{%`%q@o=2tnk1%yZ#z(j~w8w5zd>zz6K5Ak`c@q0jnbL5iOEp6 z>RZ%X^JmhCNkwngzs&^x?y2`Ntx;-tBm1(B zGc?*KZhphnFlwPe?%aWEst%F3du?=Q&yFXPANS zF1+mts!Z?7-D3wTvjQ|F&LOhTxyFU(>vQB=Iy8_)92!`38#(2|hH)OksPJTXK3!@a zAEtsK`^9L^9^7asg*-d3`ty}#?s3D^ji|VUfNzBtlLaPQJs!I6`|-lVhU*h_a%!=r zF|Y4-OBzpN^FyxG4M$c@ZVUWs_GddC=WrrH^O*2{pW_tQ?jK|;3|r8BAQQR3j+c$K zrQcXm2qe7}A7YowPjM}iqTJM~i;Y7ETWn`6b?wp#Znhh?n$LK>*=0R}vcA&{nb?6n zt`f+W-5OYtF^L$eskAe(Zt%G1x~=nC9O2@DrbjWviP~-xNd4v4Wm$`@MBQw-aAgY^ zBK2pejX;hV77@2Ix63D&%Q&Ca2dh{J!;7bUJa4!WrI|3-ajiyq>>De#7l7B_Co! zk<)GIhM~=mQ`%W*nT$0hcMSz<5M~Vl$1?h=0s*qCAdRvbN`Y)LT(}hK)QYCs&+?c1 zOHdIkq4zH2nT|XoRe62LOpMUP}G#{C+D6v>5QgS$h@X zG?tnyZ=x~}0sLCBbAoReueQGMD0BdPlz_gMkQ*PZohiVPDg0b{HJFeGLjL}3vFYpf~&d=pN#@HLop zFx|(wx*pSU&S3cSfEQ20so}?^pWxw#O;~oMJmnf zC?vB*N`E^|?Aw)!&B%*!hSyEvYV~Hog_}3yY^LPoIyP-={#Ht)%2^Rjrg#D1Wo3Qu z0hz`tLls+M#?fX`=~_iJuGK9-WNB!G=mL^)m39oVj@bb3o`>zUAXh5a3OfMkc1Q$` zFRhg>tbR}d#GrB+Cj}`M&OtJ$o3XKiBt~~JiS7VUj0+vu5 ziKTCQCivYbZmkwDsw+;0U8PRTobQpFtS@VBI&k2l41V_=+v+;&ZqY>-D?>*lrHT$j@^~$unJa^xj zsC7=`TW1+@jOnEime*`mM%P1JXt9l+#LPN>q`|FC@6An46#2@eD!op31yfwWHM-Q} zpwvmh7)?89k>M$tUbr9UtC#BTDr`Ap93H})T6zX;9B4>`M2fs_90{T)^s9a|xb*P* zoI|=MUuYNU%VV6<29BM?bhqX5QCnhsHz6G6{SH{V&lMT+U=hZ1o#C+P)-roXtRHJ9 z1?D#5H{OVTOTh|j;p2%c@|JkdXj}6;)7k88-EnfMxdZynP>F6R|z#q{R;g#$!)Yb$XXMrB5W*YEi}8k(YkF zF4OyH=RmB7yLh&wzKlo^d2>t*TRSQp^bv-CeVdBB;w3_q`;kR^1Wty7FT_KxMcKYv zMBeLh6sR^N_KAV~bNc!ZBdPV~ai>F;sd`MGU@z6FeLn{h%8dhHYnOgLh8H+6vu`Dx z=TXr`^H7O*upHP-|9tSX@$%^@?B6*tg~aUyYrezu{?Gkaw~JAQ{FyP7jBwBLnEUaJ zay1jNC=*`#GyCuJ%tR%L_j$WZIF~mJYo})vM*3W-e*EmpI@~Jhkrgs%Kyz zncPq|EAm#2OYXpmn*pby2LSM@DDOOh2+ZP_5$|_>HkZ1VKdcXI_J+{WYe+(Lih`Oq z;2E5mXmNqy8kjVu?NuIUF1Xgu4?Xz!l2R=*{;FQ5{V<*BWu218*{MS)bO5}yBdz&9 zwiG!#yRw=9rZ{gM+<{wdeDBjwEiu!Cq-16cdI~mE0oT^X7AZYf*UP+PRmIGdAh|zZ z8h<{%o_J#2OM2`JH|D1P46yqz8XFvw|5%&=Ql=g}sajsAfqht30^fRr&9iWlP6IY+ zhZZSS30Klf1;#IIF}A|LUB>$W08U;;$d46d`Zx=R3Ijxsm335NART`GmZ~>^Tw;?f zA~Z%kM8Oq>@^unF8xCNV)SS8-Wk`>->nSQP0U&c3r${e39S#%Dhy!Xc`C##sK=Q+- za?#hLWu1Xs9yEGJ6s?o426UItAfjUlxll(xx%MZ}&wUcw0R;*7TSAaHw>t z#o7))l>qnU>fe-$D!}H17B@Mby5v)?`n$c005QY%yA%ui*WFxSe|aX;0ng;g-~P+6 zR2sn}mXzLTvqtFvco>D@5{FK}=Qw|ndP5GNZ&KDsqJT>>Npy|$asB#njm!yL$((Cs zo%O5E8adFggGvruBi9&qOp|LCXsp1M#;PXV3t5Y;S-bDZf>^uXv?c^+L9YpQ06_&x z^fe-B6;1@oG<^IGu_{t$v8e_l&EuJ;K3)UQd=3Zq)bK2H% z&ZQxbP^fUl={7W8kG58sjo#j0=`q`(+%x;tPSZJZj38uhDdL|@&eNXPGg#$EBqh0& zo^FjPCwOOm-`YM`1|g&)2JPxQ>@Zvv5_hRDCdElkH#Uq>iY)1C9J-m`Aa`NJ@nGM+ zA8g#`;f0oeB8Vk^Aa&aJ*Ju1&7tGVLHnuM<7Dw`HHCXM7xZDIuEX* zsNJB0W8=H-K+_zg0($LQV2*L$dT?dMdzy=i5;&n;U$IesBp}G`_^@+_*s4)a>HGX+ z^x&6T8=YAx{nJ6ots8$6t{$3j`q?6CVH!Sx0U59aI%z&^dzptF%oq?$uC)#XnK#2L1JUM5q zYG8geH*{#8sFSZ#1O_q)e~oL5;)lHb`M$=$k~gp?#!29SaM(s&aP_V$U5m%%29PV) z+DBf2l92BB6G({~;HFBf?|-`V4rG$yto)R?+X@uN(`1yTGd7jdgH<^Odfdg9nJz;j z(<$;$&zyt!*4d>Qy**Gj_}$E+0p-V~Ae3}|tYIDZP)2$HDKoQj?{O;Z=*yHex%gVS z*9ML;vqF>Eo?gum(i93ZeI`}@HP735d$w-m!zQKdq)vH<5C=%)q(5wufT7XOE8w%8GQlky5+!;ukJFWELK+K;%HY z+YsUkStSR%1o5ife1gxUn8BZH!FIV2vL#mI)5Nud(~}`idR+#RtrL%wv^mK z?A($8_j$#izq(iJ$D*T3w^*NFx${>rvkOpPg~=xQ+`*^G=sj7 z({A_CSKz^ly^be35js5f&myV53lm)xeiF>!&3~KUm({R6#y$hBH^brJ@p6re7m0f4 zWjwyCXlFaG1EFaCfJCH+u`NSkgcJ@-m@TfMeDG_>3frGqJR=c+E1Fy_Xej%giGpn- zG1@;SrT?`_X=aCUCNs8HunpjB6#X2qac%uJTgX9MtH zJ;4~A?&v;m<_%yyuaJoC3tpsiv&x7PfO}C<#qEWZG{(A{RBq;#K$7k>V?&48fSn&e z762P!T_hKSI0)pHP{kcV7dw1G#PzICmE5$oMO`%en6e`5-;e^Ns1nEsa*b|*GMt@FOy z?~bImqRU1)L63KsX1TD>{v^#)gjr=V@N~clT{QpteIGOtK_oLj#{E70h_Tz18VNtC z?r~ty(DbdI*#*s14F>{+zHH6q7(=a%@oWT-gT;YosjaPi^S8C|cREoNMDt4VWNJOQ ztKG?JhTw73(O5Ye&s}hr$$St4i)+Zt#2SF{4W9eSQ}+0@cg++xW){XE~i(q!YUy<0n;5eAiH1Y@95!ujlmZGzh^EsOt5f2cdc~nA%z7fST zoa4@E6O;6nsm&haiFStcYKun1*Q?h;1_3%x()bVdUC!}mPf}r>$xK++QRKEk= znN`mHbaMn%7{jN^EK~sr`Eg$sN-TjX;@~Jv3 z;?%>=r;7>`cZd+i-MM8>*+N*cl}EFuUz*o0kTod|bfP91bG6xE_r8P+-@a<2{z&-V zS0)qlFY)ldM$7*%yd6BkOxnKlzY63Nwq&mI*wmvdwXQNi|xKoK3BrF0l#m)_#gbaf(NgtiCw`3nmY4$)x9U@ zTq}9(1;A!pJ|KFRN2I8Nhr#MY22aX#el>SuzP;R>(Q)Cri7}#g_!Zc$hKY<4Zi04J zl3BhOb~5uDiDmQlqt$zpTjxi9wbo?FHBE>e0mn9Sz=LwR5p$vw75LVrg8a1L^`ioT z`%9AvueIA(w~0>tDF4!X(*Z4e2M$kEU?+_g68swmMqhxMt_*w6F&iWD_JMm?tBBCJJEXK@l0(JvHvW1L!ma= zWk&5FX#~2}=|!v@K5S)+M!z_6-feQnrmXm{c>6v2Vs=GLlHx9{^y4+mZPA%3^B%f6 z@z$#H8vI!2WcORp8eTmQlG#N3?EBH0_xWuo*+`})bm>)3)%W$O8Pp+Yq%6A`J+5aR zXTC5sfm4=SKEoKtvR0Y~^X9divk!%5|L`vam0BTZdy*f!8j$#Zp;?_eo+d98$$U{o z=dDekYl}D3!IM!gu43tX?{th1nkLKRpK5_RVV*;OE{i(*VkDmTI z|D0LF1L^>=YqS&IKc16cRqIloLYz2jmBjpt1hZzHsC|wD<2f+f8dmQjT8-=^r-Ptl zk|FpNHtm7LO)D#wx*Tal2roCk)1Ol&R-Kw&jL4%e>V?*G5DOWOx&F+S`qitkxjXO+ zH$Flga+|`E^4*0Oa`N6yux?IR2mQHRIhm06Zb1*B6}LMvC7qZOnp63gp&&+FMB1Ge zrHP|G_5sfP7=)n!-)~X)O*U0Nm4K7uUdcM750r@C?L#>@+1}lpLmz9q5G|8G5~y4I z59_2um*ICu!&@_iJSb8|?gh1Lilk$~?dr_Q`VTG_|H0M9QFSGz`=g&S*ps{cxYNq? zLGDnMxn33;iBamqrL^c*eCbDCZVQbXH!mRecH}x_+hibcfICRul>(B;@-dpdpA>2cW(Jh zOTjZhI7P&w34qb#;)Q4zr!abo9#*uPF+3lv%gKQ+@*USg150|Q9V=M7||rmk-5 z<9qnzW$5oFkjgU(Mjk71zyair_2_I-=PuV9A?duleq7S%3Z%EZ^r9sZkMw!{?>usQZn&H`77@gM!CXD3FClnHHPBs zA|3L#LLUaW9m;zBy|)4OYzKp?jZ`1|_)G`l_bJUWcLdyeR_o9u9MDbgW~m>kDwpq= z*KFYzP8|6d3Tk?QhNzjw{v+iVWV z7UB)0)>tz%7={x@OsxK1LASX#d|{~_sJ{f@#%V21Tz?Z@*=(?z@A~O(?UcbVAN|m! zzs;}X%IJ?h-h#keZG&MTiHP%G_2bQq{@FHpBEWPrwoB{^_8dO;mvMi5BkcA3eAW6v zks%MH2st;868X#P!<8yEnpR8sz)4pH;Lry`BmX)l32=t<%+56>;6$nqq`np$Q`Got zx6ZDft&(r_UUwP|k5CIK*7~bNuj-VfMox-GH971Fn@JTc7>4W_ywskd~yM3b+}R=mnM0 z`3}{X@-x467kZu-`oRgAmzVL%5K`Th0Ps!F! zaQ{6K7ym~)*B%dLzwLLgEv2F&%7ixxBTk9nSFbUvT<=RIfdeLiQO&*%7S&3b;n^{n4o>$leT zck!&GM)bmwwUrHeoX^?>-xUiJSZ(YW618%EWq&g2HD7e`#+8ixpl3$)r9Qh;b(6|* z=iapxyn8iz(XK6nfl*uPuT{!z6=E{1CJwJm>4OT=6nX_IXAD8OJ|6g zn+hwB`op+Yl3c_&J7LUX&NB>F{FzfZMXa9sn0(uV`!jK(nW<)}I)Q8gq#4c0s9eH3 z)JXt^VqC#VM;6!Sdjk0BxHxuwpT(LG5g>!#@X8uoN7wYmR}^X1H2B0&Q#*L9gG2sx=qU*p_X z6vcP}D6?N)UhI{Kx?Ob$u-kC~tqoH`gZCeM?5Du@?8S4}PVb#KpVqv`Y%@`@h6BZ0 zm+sq;wEt_|l;*KFM!cimZ1!Z()uLc zy$kmBXciIbm!xSfIqs7T36Ak(-@OMot#Z9!BE;TgnhkY$Yn}s7Lfvd~s~1KKNR7}Kk2HqQoLgM(@|6tN z9qm9Zyg^=fkz~+?UE149gkNq*0#!TGm^gFQZsfy9^}0j-`>tMBm+ER09>Bq^o|*vw zZeIemHJ|l?tamDkM4;DHMw-Kunj?1YIcZ@8!1qg?3q~6Vv@=(wKl?9^G>kANuD~1v zO)H-BG`n2g?m`Wz$T?Jy)riX))L-p7&C>bqp82gNso5t(ke-Kag^cH%GEoz2Hmoh) zO0@0_mt$VGA=1L1f}VkYZk239ClbxATWF(`HvX5B3oOF-))!o;zkbiW9C)q505Z3l zzHlfh7oNem*)>*ci#SsWJo=5rXHM02A`=+CPa2Vt4i&;9^qKMaSD^IBtWbB$fke>f zZR5>{edMCk2l1fRYNUh+VO)tgvkh!7L4BiU81Svtjs(7WQ}Jdp*tqR48_xWc-Dp|^ znrD~TgFw)&$CQrFfd;r^b!!5Yzp-T904Q$zg)MKvP&-g3lL$_Z3*q_-4uHGrHb?zi z2;TUo2Kdn~qN}#Ouxj_nGgY9!Uhg&R1MNa?T=nA3#C^cLG@A2XC2xv?-0V>ARr2Oe zhk@${?V$N1nsX5%6LTDYLW<(g^SF2`h!oA`&A`N5Q;7QmDVk@@BrqV*`)jQu^`^C4q2|%v zxis9dX5N&QO)r|IA3*JevX*SK)uLClDwG*&L!OBR?_}_j=6eQ-ES;+%3PbUD5<~f5O}Cr{RSbX^T=IbSL6l_ z_j;jUCL@EO!$f-q5LK~V+;SJA{lujPc@LIq*Q!eh!cVzdxUwUvnqswX`Ey%csPbeP ze(^0l)4mMj{O4epni}rrm^Mn+fN0EJs+$^%E3?;)eiTOek2I-Tq(_Ho=n(W-gz;i` zlgY8#R_@N#hg&DbgS9jM<4}*#ih)c;l$(W^Q=sca8=_yJ6TZMAtt!23<2!Ajh{m7%qe&(VBPfK+h|3xr4SVHV{k zcNp%!&pI99q8kk;zW%R>i(A%dm3ym8Iz6#!3AyuC(0EQ&qM<>q_zE2F59ErU!P!M_ z6a($1Fc9?9OTZs5qU^XgPLtPPnN;)f8@EV6FDuS-sEE#?ja!fYgnMaV? z=r{#)Uh^L(chXi~^U&B|R%t$l3QuHzI*}*mJ^dY7TKwaQpxg#*lwPyvm3(j#Zq#&T zQQ*y{kIjKOYnWa#OV>ofJ3!#KrP+d;yuL!v4W-ETd)IB`3&0P@n~ZcC&h-Ud*9nqn zJTWjw!v&A#mwookDm$A80K7rXvRNnGWD+E2E9x=d^)a&y5UlNLwu3ZS$;+Vhm2}Nx zAC7=pE1Zt!ktQiT^3(&6Bokk0iCj|M`Z&V((3t~|E@gXK@E%14Br5`AGb5E^N}wJ+ zN1bV|F~N`HJ2g$Gl{!u5Y#6G1a={{T**Sf{TtL8Pxntr@{@Qn8RCt zw-BSssH;kn+t0QuFl(;W^5jiw->Ws_FD-xfpfq&=vs;BZSggK$#d;DaSO>?~5A}XS z_-^0_$0^!EBKSTczedA~;7(~-U zV?+~-7Vn;vV_wNJiKtiClDcNRyR6J7{w|~?3dh_=W!2?vzVMmY9rNyx=ss}R+LI;> z?CuPPj84l`%OnB66h~^uvZoAcTox5as^<0J^x9hIwkV$QEImJgR3#tQc^|U2zLBaNEZf`_2uB#p@y5B z^@-6b+wU<8`ZUWXmo2!f#$?}w3j1}kw;^dNhJBC?qs~+T(evBuy#~V|cN1Yd9&D>d zG80t+24%#jbSvP^sHzn~`3FYCR9J~U7*~mFt=7%loyT3M28AkYD&9B%O5y@LATqhY z4v@hGc0l-XfSqIV;rT3{I4*-U@9>`)nhQ#u1*FMXsQ(u3wnSHVu4Au{lbpOWMHiLHDcL* zKtEFn$6Y^X!;Qe!E`DSM(3m-W+a999c)Vj7`wH@N@bXq}wbWV7vpzi{AexIcwh44VyhnH=0__ZGWxy4=^W7cXjk2 zT|u`nb&~v0y+1CnZ_g@in!_syKNglBAz`*DR2+wXHG4ekWMDZyC;)KJEKhztd6sy#v)FuVm6}Dio&D?#&a?C zxAXGqIPehRE?HXDjfuWRPoetdnYjZU%xaujl#N|PTa_f$b9O{8u4uSJDMx#{>eOr| zE7le0Z$@(CD7fC^)WHmG;g*YgsyUVZo#uplX3e<-uc4yb2=WGh4p6)A)!%CsF(m2m z>Iu!nc~G-8?HhoU8S13N!=_|ktz)^?#+Mq&wytO!oc^F?vD zspj-qy0{gMopzG6(&+JHr1l5u&1gX8Us)byWzt=owa&vSlgo%|VQTsyMaA0?LYnmL z{(*)s6r}Wg-n2}@Sjr9@objC`#-FyMm!^Qt6DX6DgrKNbbiZU)>-Q#S*`CFAthDYa zyTdDJWd+PqULw2eC$-zsJ71qR7YBBSIe7Mf4HKPf$RY%u@~}#kj1Nw&3R%G+|6(BA zu$<{E!nyDL$PaRHs^`zbA#(T?6d6B|+-L-V_bU2)kf>q<2E-5Ku0IEsKS!Sbn{X3a zi0U%-@h~YDZUSQ-`Vy`Rq3duV15I1VhC_~ts@p&W9xf!Od2;o^T~%mF6E4I>l)!2Q zU0j#)H6#nR5_tdcO^=4YD^L8aPX=h!-9Qds5NF7Q!?;n#*&+3z4$EZGds%|uL3BE? z3u)gfyLO3*+sM?XuSvTU7iUaLK+Z*q6p zzl1GUzmAZytTARjnwvsLPYGr!x4TpEbvrUf#QW^F08sp&ye~84Ons0so`YtjIN#XCYQYieUL0=EmqwKprZlhxgRO%r zoNIQmS>8}l7?>X*ur#b}zp*YY=}8%KzJ4PnMAEn2^wh{BUrhjEG7@@cc0D%TO$f!w z5+&UY!IwBFJ2Cfp#MyvMjnq+;^NDh;*_gsHV%#-D*@6I*ergl?N`5C%r-GihZo*i; zT52M&d^7Xl!Etw+k!g1&5f)!E=cD6ZAqLJvy%~(9(^fuAG$jQF?wv$T`wicA9qQHo zmc~cb-ufX`PUSUmN8r5CGp`7ho*?Eo-@@(#5jQaBj|tyNI|?kWvKM|mN11FuzQwPP zm|X8V)?4~v$WHoSV)uX2ZU5i>AI=;9l<7Ek-6UZbIznSNm3%!yxnl+1Z+lMB;oN&8 zCcW_5^>;431(B|R2y4HmR%x!AlX64I1{|zk|;}UjCeB%=D|xxMMK8h zP|kL8Pg?rt032F-aBH()#Pl9o6|a+$Y_}Bk0M7Lw_BvppV&k2`ekV%vNK=8^EH6$h z0!i30MUy?YE?6!fN%PW?YXS3bQUtxF`CCgJmT?wWaDXS_ooV|voa+z2KaN2}_@l(ku`zWB4PfVPJ}+}ZN`=MQyaaxg1A_R{Z1s=sGSJ6w^Nhoy2) zD~}5_*0l=V5lIu0N3^hHY!5UaOd+%u`IOGkjKoKp7)s`53%U{yAGb+Y+PfHc&&bM2@2 zjO=Rp8EQT(FC{R4`O)R2+K8G#wcvs3g@-Ye!i=bq{V5OKQr~rT&QJGUU*R_8Y-9$G z`i3oRn;DaSn(3zA?Nn^kmnLd!Ymrj;!QscpCT%FJ=IKw5QDv4NY|UGJ z8cHj!o$AayML;$=>|*+Pw)xTP;?6Lqmuzkt6eYM#TJV8G6fsmAj};uwiQXVkigHcA z>^**G^gVU-<-NSQy+c8o#-X?Od2LBRWcfJj^;>2R5~3^AEd1n0lgAOI8l^36)doC4 zVIM5pPXydg*ECtWCnV2$P<;bcUdE9^%a9x!^NZQsg)o-1K$IHN{y>$YuG(^{UA7cq@LeJF*q}a>| z@V3HM-?&fu+MS!|jCZ?%QeY()vsV^v=uoP>PYp#~I!D_$DpU4^W4krX*M{r%?JTM5 zt0Zg5sj`0Wa1nzyM@NAwyeWNEQu>AdkWH(fDi&#z*p;c+Wc?YLFVM1C3XuG94eO#6 zHr3%KMq8v)YV71V)w@#VrLC|>E_j1#JW@n>=4<=nFC==OeNbu_vwGNi^dL!qxvcc> zpKj1=ewr+2D!JJ-;19agOr;_JBL2nqWxi)RB(dGEMO6O6`8%O+a{S3r$D4lx$9wH1 literal 0 HcmV?d00001 diff --git a/wiki-update/Flanger--Channel.png b/wiki-update/Flanger--Channel.png new file mode 100644 index 0000000000000000000000000000000000000000..775bd0ab5c7b4e9c045c52fdec8f2e9a56331207 GIT binary patch literal 34889 zcmeFa2Ut_l(k`qbVgsyzR22ac0!ptzR79yNDAEz6Hz7a>p(voJGz&$#qJV;gUXy@` zfYeZ=lYmk}O@IIaLb+RZ(C`26eeUyp_uO;tfB)zBD2wduJ!{si*=xNsYi4|QLr0x? zKj;1(J9aQ%zjoyo&{B8o*cZ2#0r>5v)QLAhvlDhp{n8Fp3-<)@VYjWSw(5=@d65U! z?lJDzvCHg+mcANr9r&|z=gwU_ckJ4=i(%(Z1_lO3M#eo1JDHf6_U_%gZ{NOy2M;nc zGqbR;u(Glq+RJcc-|izvjvPID^w_au$B!RpXJ{(%9;d5;JL`6l#PV5&G6B9qNUtC=L{Q2_| z5)zVJ2c&?%Qc}{=(lXo!WMpLI<>eI=6ciN|l};X1KFO@CtgNDU0hrq0DrR8-QC?`Fqnrj zhlhuUmzS5fw>JWTKq8TTet!P`{tq8M3=9kmQsW8=3JMMme)8nW)2C0LJ$v^2`SbAb z@CZ$w7cXACe*HQ|moFwJCN?(q&5e`sH&4dL$0sHxCM6{$Cnvvs`!+Q-_5GdG@87@w zaOd=g4*;&)M18D5Fz3CTDVTa`N)>^7Hcx3JQvfib_jM z%gV~iEd|TV%h6~w#!9H7qN1|0^2?VmRaI5rzJ05ysi~{0YiMX_Y;0_5YHDt7ZfR+0 zYinz7Z|~^n`0?XMXJ==3cXv-uPcID8+uPd*gY@Uw#6*oeOb>I`MJMP72g z1O-c)G9fB-m$i8QKYl&6RwBf3NibMvN3ho3q#b+X4k_$BByq}P*U9^--;Y+k+kbdc4EMTLpnC;v5;9CFGC4Vs$47 zm|m8K);Fnw-0)rP8vjzCWIONixMkkqarKL>fv6m`PfRJgXXxdWG{GRWc^VuK>t)`{ zkzKy&vaBTkM)$wh2uO9Rx2^*tIG~UVV(oqo9n&|Hf9&7B=X5pGjZnune(0y;^lqPM zJ;C_$f@uB0=|lo$^5cl8aIi&*Js$i(8UfJ1=PJrR$71SHjCcAJ&V; z@e4mVAG<&Y)D;_L$)?IhbCtuVwxsRPk$)nfX^eti*$wC3?q6n@u(F$dSfu3&o#Ka% z6?Cwg^vaFc)(6{nF}!0#{wm~K6pb88O6iO6EzRL`w-8!+<^=tJIAN7+q zeHiy8#<9p-N9+6`+x^8IM351@i+}F8spSw7oNYOsrSDc> zj2ji0WJ`EP|J?VXjf_X!YUG|P(%P0;+m!O`h#w|HhCT}%#T?#wE$CqmU1$0*ZaOTi z-Oaj4P)431v)ZtzZaw+GPt*U;ykGx7uY(+;xQmz+#PzK=-!*itfX}8DRQQy!Y0*tK z;@b4t$`USXMZ!v~*YUdLpS>K$b7Mps<}T$it~o-t*~(MbYIHkPJjbJjb>8u703Hi>f;Bc;dHLm_NMWdr+n-5D zU2OT_HoK$?>vMSNp6*$ysGam)Tmflw5L9vdN!yaZq>o2H*sFja1X8Bi9W z=&V#}UDDZ7e2Q+v}--2U?y)vUrP5*cyeXC9U+uub-yjqS(wIC&;3X@ zxz~ig`Pqg>@FPp~+dV!^uGrsk+YubR?K?ATvhV#qBWIsGcG8QtzvB{{!uYpVL1>7t zlw4Ut2iETKb@H9ZpZ%h-IK?CqcR1!~d6v|;A;G2H1jbyLlMiouwA3nEX51-x6Kb*^ zRI(SsM@ioWQ=G{nnQP+ePgk9G!JkSe{ zu^c>hEXyuQp0M(e2pM4>;S}YiYr&hf9i-NUkL7sF2r8-R31#4GJAK~Nd)Ud)c=Wnh zPj*`zq}S1b{cMa=6?)^y?s-{$h(ZXa=xStOyb(I}=0)8Hqidu%7y69sdtT>E(vK`G zy`>^SB|BN%^t;~lIecrb|Ha$xKd>zP?|U?|DTfa^UV$c;FUD}Wmj0|YcEL`OXuLkt z-J%K-;7g=F(#<+Z%hY7V1^kq3-0Z|m5<(0f#DW_XTP0?5(ay|ADtc{gezXzZ?mp2z zMcxz;;XMGp0>iUu$mHi1Rq#>Md`gAK#3!onv*^em@a?*=+?3_kxF+2tjK6vSvnshe z;t}}8&w)*e!gIWJ3Td$&w*300=bFyOA#KdTA|5Q}6x@H2=|IzX`cKK?4s{LmP@Pw#Q`Py+t z`hK&vgAl3~lCj1+wGfigQCLSi>$U^zBXp%c;lcR)!OwcDJP>8fgiw@W7|8FfiuGFu zm%LfJgx8zuU4nEr?FclwX@ov7_w(dngl!7T&^FoLXR8=*!44d;yrOn*M>11}%&=EL$1=>Yw*L8>vauMU7(nMOko~ zdVL@9vd&)x?&gG8iTdY=fy+Q_%HoD_`v?T+^te&2H>tg{1zbCb?bHz4gc5)Z(f-6J z{#Y^yU6-|Z-<9xV7^b3lKUgO|=DPyIHQWe`g5pI=%ykCYaw=X)HW zaWS+C>+}s=^#;@{O)o4f0DQ!-1sUWW=G$V!jf?uzZz2I8%xT1Jqw+;y%R+GGeINAN zmkD?ou7_4zIn`d>()fX~QwnnRBqBuoUCqx^GFIS{?gHcENgQFio8ch|VWH-o-~#C; zpeKgTpi@c)u7pp#wMU`!h-~hk4jnsbM#{LHPNFo;)9FNlA5XzxiKtZp*?5}zsj+98 zrcWckvUXY`AEA+3f44Viun?eyG0|Y@zgs~XtVYd=3IpbSM9pa#cAtt20$OCyZN4F{ zjpXm^W)JomZD1BLwX1-yjUGCDrXJURPwLz?Bd5ER%gOgKo{XQ z{w1<0&6_T`)ub_};!VY7PqT(yYhu)A>sbS=f?vtGNrQNtz&A1}d`i^j$gskJ;qrLI zl`@pgszN5vMmVgNml=L511x*rAOY_41o{$oq&6osN%ixTr4TA;>6sVL!m=k><|hit z$4C4kNRVTCKWy|Sn7iB3iTh~e+u=81Va8U6y$0d~pUtt<%31gZ?FZHG^4+x-$Wp2P z<>43FhyA(pAGr|)<$xdic`u-XUEOKd!zAzK%c4g1W=Nv$U$^CMQ`G@b+N-Y8y!FJP z(ma81w?LX)n_Hlow3tWiYhHFvRE^sg@qg5$ycXw|Kla?g+U}fP@zTp~1uN1eIpU`J zyvtHjdSEjmMS10np87lr{@%gBsfpHr$dgWw95Ia*X*pxGzj!oBv9>7>1Ai_R<W<>aW`C>$RtbKSu(FA8jBko;%~W*4?o)PbDMaqUGGT0+e}8+AQ0CD4^@mFkBR6kz zuHR~$tpZ`Ry3&8m;U*JXw61R_3#tDlqa%{IY8|?2EPcPT3u+-0=3Ua2H5Q+{yUc-g z^f<*M626nG)niM6J~WMKMB5meVdbVu&Eyqx%%hEraUBryWSDhvouc?hzMW3z*zI-L zKhGoyH8k7*(x^l4)122zc0m}ttlFPMD&d+RVMMSe)JwxR`6fNry_*UU<=yD48y!Ax zqohirg~VGFU57MC`fVA!y=N{S~4p<@A|yH*JA;WciVy^THWrRT_$$ zqaN=FKTO)tuSCXuh%>i!zc3+Ll~WuQbj{w%z7`0_zh#yYJixN#QWiDB<5qHf@T55RdEdJc~2C?YdeY$biXGHsF~}<}rj=wPg~bZ#dS;Vmd2mZ$6l` zdKF-^AQM&z4)6lwEJH}9Yz!7&cL|sKdnbIEuaAnN#boru`Yf<3f=2dnaC6l{II>c$ z5k2yTF!S0Wpgf#Sbb-L0Q%EaOljUq|$lQ9)G|i+~p+>61s9j+%#;O?_pGY=!J>b=s z#LzOlpKLn$hT!xPI&wm$bV_UPO_L--T3c+^#V@&U<4alIhn~BQNO&@L2O8g|r04vC z_+~9aTXQ~Dsq71Swow4iXZK@7GSgerM5_clr8ZjldsDgcco(=*|Fa!F|NG$MzsN)N zKWCU928j?c4Ch~6V~6SuhuleAkV_4Bv*ObhP^t7?nNKQAoG#7Fb_=W&A-_tZUXM6B zaDsg`2iV(WjD`wp9}~Ek*4#ep`N%`0GbCA-`Dt(hjSKjE7{W}Fd*(KXtXtU>26p3z zF>FHTTLL!yc>EuGYT(|dX)n_h4i3}}(*fkSipaVz>)pxo$j=>o$vPdpOardjmq2s& zLJ)NVu?GN$5iz`92^qG_6Z9LRQ%98W1E9wVO6|(T)ktt~WQK~WeDDb6P z<9Vim0MNigsFekcmb|cTe5F32bbcoZU$I50QeXR!(fVOwxDwo8cCa&;vfS+UAIl5 zDjzpMhlf80G-iWCdY`Bvf-Wd%D6X~RCNvCyYVWO|tMQ40m>2i8Jm8l)Fd_Vf zT5}E!IJ(eS%u`c_eYpW{t~8#}thi3cjMd5>utZ(Uq;@8|xDj5N^GtM@w&p%>7WbV;~B-RL3Aw1fmI!k_>D1V3biOcG8aJCpj(Q0 zN1ZS<#8bmHt;S-5m4S}bc+&x-20(R!R%liAAEZV!17Mv2K!drEW1#U5tn(p1>aXqw zE*BMYV4jCBg9x*~l$ESG2uQxW_1AgYP7q+bP&fckrU)>tVZ_aAB`E`PC&SuSb=^zF z6|oP(!ul7g(Z+|)sC-dKOR#qA(^{LsjJ|+a0MG@*_5_580c}WMiX!kiMX@JE5(2c6 zy(uDMmgp3bz7&3O%jy(<^dOh0W%VG}=hYp9v(zgjYM^G%JT;I+{i4~kK>adC-8j&* zMBNx8E3xIy3?klCP8oiw4d@pi2J@7pTUcU(F0gP6z6G^;?GRffEL2&nvsLcCUNB#Xlf^*UJ{{mkpt_C!F4+Ge z7`Jy$s3m#Y-QVA<_UmGOf=RA2_%iXjy4@TLEfEBbz>)P4`9=dlSEtJa_A|*PMFQkd z`A&9Mjjgo}Ghgx5Nwr8wY~&$P+xaW)nMm2hbsGZ#S9>mkZX&TbRIZKP^*VTKcS7-1 zS5%_Cc_MCnsJHC2ZFa-)QQ>JZ?KhT(yi@9&0 z*e&m<^lE++m+8)!oxBh$46X)nOqSUtv*_BZsNU9b7uEHH&)~Ondv+XcUgW}MFj#AV zuP+kY%k9iFlc}r=$2}V;@d|(|*BWoK9ee!7;U@=$0sFX}-S*ehpUSVD&?6Tq-v|zj}KtA(*L*7Z?ly*KDZWK01)B7eBC=d!ey* z(xLOKk7M(S(x2Ze z;N5NP{Jf+6lz6{q{)*k+aZ^_(A)U)1U0+2OVs2b8OGGi6-;2lbCJ)a>x65?ZqL{OKLlme9WQ3$Sd3;*Au%FW2WpCzL zN|%vqIjQ|Dx#1^`{gZx57;%|hvG zBhs<#USo)g`*4jy&9S&?g>lpDCY|nu2XRNXRp02`;qqJlyYx3d#l%MGLz?|=ChZ>m z`3ZXSyQZOWN8G@Tx6yGe#=K&B;0{O_Hcgpu3NG6d9t{^#U=~0p-E7-@EBu|A=dR3M zI+GY2nxvKN2z{bvHHFk=ip$J-ejwwjLKw1loYp) zH(cE2%Z%)UyzL01%}7u2*P5tx+%I|m1e1_eGD+Qj7syo9eNN?;$!3Ei-x>Qt(7{4g zT|&Qt2%VF(loaZ=mjBPO)IaNt@xRimFQkvpE9W8TXHiI;@r!)m0lvrG7b`<8eWbw; z1}6gwzBW04dcv2oP7b^So)@hxn^4V;gR?mdizke-w=cr;Z5MGmoP(@XB&%Q20qdk> z@*8!~Wg}aUbursf(|B8(?GmTMOPd0*o`(asHc=K984KVHy9C11Oucef^n#CIFHbGH zkl&8E9-Q}GhwV3lfV^nWc2zQ};m~~u+XVzU$FTBQbHQ!9E~N1m7jCbMb?tlPp9mnQ ztX*y5_0mt6-7tr&}AbjN|7N zRpUD|Ue zgUs8u62$NIJfdRa7BEDh zscs$vynq)qLywm7d2Fs%2K=#60$2yg>wj#NK^ih|d^T#(DrsZZBYw%7Pk;sVQTkp` zK^$c6zIO+qzwcE&%8~G z&G3u4b%6d%t?h&_pDf_njkG&4blwe=vzjk*+0MLt!4hyYpMo$b&Ain!1r4NqDkprM zVli~fMqGKMo^HMDyNnx&qnkMMg8Rilz4hHme&5Y7@C@*Ir&_}kD;N&Af`baf3TA`$f}@HXP_ z=cP2IB4W-TAaV?HRFu|49}q7-@(^wLBw&vP#_Th@I)?y7iTfqF;1R_N2&~R7&a$np z5hPMz7oY?E@{ij_`Exuyds6_blG-X!ugC6de-?yx3`DihLpuR$R|wJ}>MaaL0i>v| ztC8hc0TZj=K5lH$$#M_K474&mQqPwKu!1x~tJe7TfSl8mwAeG2B>)RKjx8vp_i5zT z!VQ><9&XQb02*9&7fNHdjUd{1iO3#vz*_8Xx12pE^Na499)@DX{Q%3=>~d)JG!q!< zP}*$e@!%C1khX}un|IhB>qF@ZXzmCU$|-&O^(} z%i|D0$_;DwCs_ov6asC_{Qy+y(;0u1T|flpDRV%?w7+XE(7NVMGWb>x9xWR@Aa<{D z@Id(>gZRCUL574unz%*(AT6Pia`#Jd0P)@i%62E$rfDQq5w+s94mTl?m&OWK24@T_ zI})3h0y4^4Gz}jPjzaSSqG?qFsuOW^_4~GrUpKk5Mk189SPEW16`Tj`BK4>#hxDBH z@j&}AJtrYSEpcjWPo3=DuRDi%=nKHTwep@5-^#_jeks_c*mbK$np0hllFF%bZY)l} z!eQqXP>-*FcZ1Z{UYOgf5K;fVRGRHxUAFKW4zfiUL#^ybaD7$@t|1RtMruk+vGgAM zS$B$y1MU)dlmm_$Iy|hgELf8AO)f|PIjj-!Kw(%T#-sKy&q!hIVTgS=S3hoF1eb9; zhfrzcQ68bY`oovt@)K_Fej0HztyzL^?SBP&{EtITO4TZ`6A_fI8C@FblfpOB1~G&V z3|`jsC3cTh!1Dz4Lg=devZh@B7plZ1vT5NbC?wp^^Id+6g-du#h*vV5N4P!A0Zrx?Y=sLUMWf5^_H^hZu{pM(B0yaH&}9yJbCKIJN*>6Z4Ex|C;j?M zqzwXIL{U&CAVpe^fhV~o-+3H;U}9N05OUY`eEI?&a}J!QX8qLGg=uyuid$%V1+ut0W(O+OJx{WxpT@D38Ansc zX+!Lc@Ok1Rr(0 z%;YupD^y;e<)Sc$8TUaczM71ga2aBC6nybu9vJQB7CN9=r>J`eT1{vcXxwH%h=;6X zm?Jl;tlvh*OqY@tup;t=s6|8xG5Kr?vkk8=IIE!p*9Q|QN_;=e$X?fDnkBXci=W3P z1i0N+K&#wZ_<5A}!FSi^L9(MV`}R|iYOXRF2>D17iH<6o7XE=BF51Grh~& zk#L}*`R=zRjQCaGAcBo8%di7dwqkFVczo$ohKf_`z1Gxn!nQut);g3D;e%UqkB(AH{=ObL#alPs?sM7>N*Q`-(@yz0g z-8@+l`r66e`5RYMle1bLTQYRs4?RT(MKTCI2zgc1shRX$ggCK!rS5hI!?SaGH>DPQ zN)$RkaE8%_>nZUaZ@t*PBo@%n;dvhCP=6zJ*z~F+d8`4Q)C->bVwe;9GWxuet0Vnm zUNQu}&Z4v@=t zx{WD-D@#c|S6>jrjm6JU3TFXxXQtLL$C5y1xV_QHV|@0^nDL*x96Edp+7vRK4YkMA zXgCM{XZW8er8trAl<*l@P+$eQ&87p9pczui3rK%I39PPmA|aP_Gyf8(*&w~=TRFUA72nEQ{$kwKm(U-Pzc)HXdJyZFaAN+^e? z4E!;U{M`TF#*z65foAd7IAZnM^uzr%j*?k{BaT1D5pMn8#?e31ID+5!w{i44!2jRI z(f7r2+I5xeeV-`ks{>RU(kw ztpssZSIXh&NBdk!>7?E3t21>K292I!56po~q`su0mf6gGjL6*eQ?Q~M5LZNY42R#C zdYF<#9?UTok;dfcv%aDfyq~5=@w%;Is4UCTlLO*C*>S|FqK{EOAv<94Eh8FTQy)Ob zv78^Fu=6VORA4y{QEZfjJ#xG($p8JSS@n5(=L?9AGL2kE{UV|~1})#H`&Ix?%j2>_5!#vz zwcCK_sZgCrS#9n&U0Qk5YoAwV-{pO{VA$#{e<+c8#k}tzUBbQ8F}vG%mz)>2^Z81> zv$db}EV^&pn&G17@3<)t(Ck0UAFs@xO>sK|BXV^hZv8^zY#JC(aPGI^CLNd~Sanye zOW%#L9Wh1Av}stvzu0n$%f13dWqiqZu0V&PH#?@3;u)V3D2oegqWfITO&jXGX)_UYad!%E z+1j~-#$RRmTN4S&gOuk~j1Yyc8(Es`X0F9vv&14%Wh%G$f8DvU_T413`@o&<5a{M( z+z-!p$A$d-?1p`Y)IBMADdrWvD>_CxOFlzgi-UvF@cI_onVe0M3AqxT_shBPi@hni zQnsS{cQ~!Pk%Nw{Z;1Mmx;`F%cTTNPs&x2FEoGdia+Dr@o%m%LvOc`H9dbQ8ym&AS zw_pso8QCDFmXSEA^QbXB|47f(>JIz9;fHQgBH+BUOUiBZNdoaK@WO>dUTZ}^=a!NI zH+SW`G$2B9COj<1`zR1Y6BuK5DI!NsCV8wG;D+C5&r{jtvGL_k;=hAt+9fWQ&gs?F zHTp3EF4mNoQ>o#xiqKbM&cLn8Mthz~L+8KA#lr!=WQpC0v4?KbbYHNf^z*SPpl7ba zutTWM1{Df z*H~0jH@(QzjoSe443Irs6@zGGz-A86r=$Ia9@6^yOg}c@-#*!YxldN--#%Fo1N@H@ zUCFud_dh6k3Gd9b!9_!H0nbtLvp1>oIrtcSe35`>6vvrK5{kT&(Owvl&aS3T&`pV9 zAar8mvyf$X;L^<<8Du8)tKK7Q}1 z!9W{V2l^PNksT#t!)OK(^3e2P{Zdff8(|z-|(1+ zSZfY8lNybe^l-6A2cki;Od1V7C>cUtS|sZ`a(S`9rsdSmk#|~y0G05L(7`jVn*52? z%nY6E-1?$b{{mL%Wk+X~YfF2m&rLpXZ{^v8$>JR;yG~xkYs$YC(o}FY;-sa2xEW>^ z#slosC|XyXwe#4O^@!{%B6o0ya$$f^r|dpI0X;)pQ6(>N#XHpK@axVzDe2+_L#Z&A zyV2fD&ZNZwxgq>wmcc-OT-g~(9?qTF(!rp+g{fH1vk5Pj@iw(guF% zicy-U5$~JLb)Ct(Hl{PrCd}&(rk_R->(7-EP2ESsE}G@Qc@BS9)a??t57G&TyCae+ z3^pGSZW|se3rUt$tsy=r_FPe!%w83zl|@K3#?A zN_8^@0B*cM)J!^S`YYeR>19oh61uz|mctlc9z@qvi%<$yk=!6*bQsO1Z-G)JJUB^q zD1Ursx|hEb)=NlTl25VS10pqY?f}};1ZSvs;K}rUh0sjKcNnf;HTw}y6h1R~Vm_3W zOlH^4kJSrT+Kj3#zRV_|W}r@=?p>#lABIvRz-+63c7EFyzG%MPeSHgGEWQNrMbiD@ z@*Z{1qo_alqP(ZevvnI^1d&Xr73iv=Eqp<(0D|fM;ETi{0AH}-@fNdmd{H#cQ@5Sn zmH0(YaDBMzFTUtH7^e3ZU+77luNe6c_+swNUwpyR`v+fe=l^sg{>2w9;bD@0@r9(E z3~J;LzCewP%ccIo7j9ST>caox3ob=y>c}5_p)>o<`_&(OF(>c`U&N36!57@K^=^ZI z@kNDhBxREg*xmO-tgf6O2Kek~rYBYj)cWy+(Y&|wsSZ)+&R=ErqaQUNCiVXs$RMr* zJHN1z;NAx*ytW^I{64i60+Oj{RO@_F_2NB%DhEW*X#;A~wVcaWqmUNaDpAu#Mvnmw zx8K4Ba-({e{gyDabN=+4sQ!waR0LnME&v3O0Ql&qwn@3lP{_~9J$IdF|+y*H;=(ldOEIsCGW+OpgC zJ+(;*L%VB}M7+P19;v9G5xUS~QBNp+#h=(x`br?l?Fy58w%Zj=qv6^mSm1DNj8yGD z((skKeQcejt)@CYCU&K4bvrBn*DGg~o+bBuRy0U1A~{srgDf5>HMXq@Ug^OqBV%Sr z%*gxTWu(g>66yeLMB7L<)*Zn_OBcH4}BHyuOi zy5oOPpR>H+U@O7a-BH@LCC|sOZqCSYANBKp|Q^4GHK%g|=yr?Nv!KbyUNLy2pLA)3cW z6r{5ml97lmyU!k(F{!df1@|)=j{QKV_YU;j>%7C+Xgn5v7kgprep6>M&uy2Mq%`&D z5tO6iOkl%9YqYS%3TgCoM=y_Uwn3+9iBUqP-fwnamb>C%nKJ#_-E3;c%J|@lTqjvZ zgj>cYV>FksJ(yaA}`Bq3ZNN~vT(0S#smEv^& z8N9c-TrCopskids#3CxbL1ks~va#6skI#I}+1Ab3_EuYczRM`;Ge#GYZkF}lp-St) z1^5_Z?8}u4vNTZb_AMR`V`WOsRjxm_j_?j5Wo0`jZmMQgGkVleYQdy{uax3QF5QVZbr_g z1L<>*NBsx@I--@bUZEL8=i{xf{f=64mm*)q88!Bac(rr~CVe$)2EIn*Yvyeo*-1>B zDlAdd>nCQ@2~P)(^d@9~@_lVXy8-7%!k}aXjMvVm z5FMvfiJ}tZ5l`Vo;;^Lnv1%j+xR#S#6jNlt?E@VgG-pKI3FUMw+HwFKyD8Hx-0-s{ z8ySOqmwv->Mn?)a!^_uPko}umwKCc8klS135&b`R+{4PZQPT=EivswBqPi zpzJln^j8DVx*<()q<+aUQ{iH>&6%hJg zy>iMGhZe#qq6B0fM*8>MJpH=PsW_ub?y|iU?PWV-I??d9AeM>hk}S}9+}3eRXA((@ z`@>lkLa0YJwFw4nSkX&AIJ+=~0mXcE9~xFFJYtw+?UXFkhUx%2KNze9&_WB1?Es9bPiv(~YMpFZARXdeBi%`ooFOn&z+coKu{qU-S+F~|vNGBjOa3t0p4L6Msd-0e^ zF(Z1_iAzwL)M_P88+hh`kq@HJR=DU8_>8r0ObgXb67Xw3joHa^6pR@&|5g$bxs;|! zH#xs_uqe>ab3tGu#K<;LRdgDpg)S)AEW@n*3 z%3qRzej!Fr5aI&t^ka*ZM{s-ToN9$M*H($I^Kg3Qje?b3%Df}tz}?bDwRhLd=+W6? zDpTuvAL@;PPDKjC<_6LNlED2CmqupA$+!Y!a2*m2XkjHVrfn`x>5{9uHxnT1YmIUT zRGxy8PO0bd0OF_rvnix)>wEJe>Gtf9^|6!?a9%{Amvz-w&I8{4uoz)BKa40C$sD>w z9AWUKJJ55|*XTil#94t=`Ig`DA(soa@<$Smfl`+rxGY<@at0vsFy=bx9s`WdVU;-7 z;G^(ad%&P&g}hestcrcIh0=dXJ}~>XpBKozgttpH2gXW(WKR4rUx=Up!Q9xS7<)6E zApMMsL~&e|tD$?{n>O!(xh$o)Y9J(4-yyR84D_1x6!XDA(lw5X_(LSGo!WGy}C~u&>xc>iz~aUj_o2@i=3% zOQF@5|5oFG0+l^jftj=c(nbF!oWeV{5>CsW0U^TZanu%n;;6ebsYO1?=2Nz^?+OWl(N{UW=j{E~(pI#RrbeM?iGJtDKNoV$YE1gd{vD_0aF8J%cw-Z8Qd zTkhQ8qIczRJgzICZgkzn6`HV#PhM1P?seLP$4_CR7?({^6vgSX|L@01zl=-yGT?t? z_+ZR*xQP7Mi7*kv_7mzJFFH8Y3qMG^IH?H9xj0?7N*sdfcqCff3_pM${ZRM#iK83$ zZ0P@bJxQvYm)FMq`jy_}Ml$rGMo?RKlwEv5a9I{u8Ob}g*t2S-Wi1#>*+)ocQ!yn& zXOfodeGGtd5u*dqK6ei2cGEPLd~S6K+-6`})5pqJ6fNl};gUYe8g&{%>>8QYu3+T{ znylr9R*v-`%-in!bK1RRUw{Y;XEBR9z|wq(QkY^8%QHBC@+%Fkwe0BZFYZJ8e08kM z{$y|nnM1P;SJyV(mwO*&B;GM`gI+$4WmUpm?(X}}?Apmiipq~)-Uel-B_{F0k|)7U zt>S&YWieBionFo$R72o)$lUJ~FUuxmsSdre70yALd5oCL&S>*x9Cj81yUredLT9lDR!G-g(0vp-((u{HYf?E^4n0zVD~ zuIUw*`(cNe6vB8^Y-#{-YT%X8Z@RoO|A{n0SJeiavi%05s zf-C7Br}v(z2CnK-lE0J}e4$vqE6FpwU6Zgi0zE>U@OE^slN_0Rn2b%`$9b5Y#Tab@-Pg81g5UUUET14^w?EUa?L!TMHLF~ok!t$k9sb(lh zdB2N%zgausDt#K+I;({@r39NB9^pW$&xvB@>wI(K$LI`#~x5tgh;jr*D#zSy*Rs0#`X?>xs8@*?m~3 zFR@gl$~@L0IUAD!HFxAI>?$WBvXqjSzR?OJXYk&o(S;kLZ)RQiYF<(isd+Ao*F^|P zJUu;g^g}M%P{$Oul0gU?dV9YA^OE=;A8ey%V^@L1;F8!!0*cwU=N700|03-CJ8Cm0 zAq(}|cjG|Hrzw6BomGYUTF<=5NkNl8RX05IvZvnCt8SPv;mb&V@Sv)GyGI@6BtO^0 zpg%#Ia!io}5$zFp<~`=WYr5%JnuHSEwETgJUgB@lYW9U$wX3)^=Kxz4qOfou@aq>j zwMxK~ZQIr^uq3C(Fsun3rQXd@QA$czX5rAy|5I~g_=Pf1h|FJIll2~uQ^E@;$pgTK z%V>440%_p8T#zgPM8xeT1V-e7tcEoRz^S-Os`W!}Ak8F#f0dr17R;sY;XBY{0AwLi z?N6NUE6p3`*C5bqt=%2ots5qU5CTv{Xv{qp4)a@JG8ZE3jSQw%UoL<^a?DN3f$pl($T~$}psGf-``q|gt$wur z_h^Zg2vw%n+faQ7P`jMw50oK;sy6QKuM~gn$%kSEHtgR?WEASp{MwN9vjFwr7~x|7 zL1{7+$p_?Kv9?Ln*OCi}c!RmufJAlzM*vHH$D3(({+vK=*X71D{S}evh=MXEfRm&` zt%3k6!G|xI!0&G#|kM(lg%j^1sB>ECT4YF`kfvW(d@^EP(7Dqk}TOgD@(T zO3(KKP6Gz|OO!VS0ig1PEu@zfJo$7>r~}Gc3<4rCX#X|K@u!Ly;wg(xJ`K^RY3Jts z^e@Oz2e8LZpkAO>Xtm#8P~!p?Jd*f09wT#8w2-%cA#n_(H>|M>o-i?4)?E{v~6%B z4s&gA_pTExfRdl1njzGtIV?%KifX4EcnaO&wTLZ2peQMo<3`sx%&*mE!q!u4YwRulAs)Y)30lpSoI3)CZH~t zDjouW3saH8y0j0L5FRL~4=g|>OE=y%-*WfO>r zYA3)g&`^}(qL?V>qA>_^#4k_s6hV6zlK;m7p*J@-*}))w+c1k5 zHXVbj`_rR4fA>|;KWfYxqDGh1*V&c=XL19JVRru;Q90!Nn$uVaE2tU;980Kyc}^a3 z%O&lSmQaTpC3-n-XeiWm_x)U2@Vl98)>oOwVTo2Lv4{GV4|C9orsB{?>^kOLQU%cX z-1nw%df7a~1q8K`8A%jiTr9hJQ#_A8R<#^B?IFeRUI)79(q$AsRF^i1lvQC%S{fe`$R8 z#qmF7?Gr^Y;~`8uT$Vpo>z>^8Zp}Nz#_Qqq^f7Sh@p7r)*;^OuuAbVzTW$Y%&)F-F z-d@`YTt9p0nDASx_lFn*PcwQr9ZS7<zWcJ@Y`Ja1O zdn$FLfRTONjDGu%X|Z1|PW>iekDMOxL>y+v<|UBkTS4@GZ8oR7^l#&D6;`|o82`G_ zd=lhD+gM7a(V2QdjQ+7-ku@hD&#?WmyC5+|`a$bsI^Wve#;kMA$>ZQ4e|TU$Q)MwH z@)cR{+|q-xMv2%TjKzx#E;k@9rsIbM7~UtE)DO!nvbfV950|O(xZa4C{@_Vj%r?oo z`>aM@rD&d%bZSbn+yAE%%Mrq~!Bub=@haLo@E-IbqjK@13{WgqrRt#eMv49b+i zpT5`<*V}Z_N@7w;EbW0A#xaM*8qfOahq5?@(9oIiUUDrH(ba?(W@A@t5MUoSZIQ)H zsZCm}zvv(c3wL2s)eG|6{drsS*L0)%v-^9dMzy4G^V3C8_U;LsbX6KZaBA{gN3@2> zIO?-C<2C!x&V2WBg1Is{qc=JR93CljqOBKQ;b(WlXbYcBT!WqbL=$Kqi{3JUv+d9T znZZ!Jy4P2)C-HY>Fi{5zlYcA2JCw<^nr_iF;jf}Euemqk{ga)nHLf+ks zqoPF(YT?R-A)tatk6xt=zKcJ{(Jmaz{Av0^vAY4vr0HtWuV^a8n- zRtkmvVf|pzotbI_iC;50N|UCa%?u{FAMe`!a+QIwvZE`&BwDhXAbBTwR_tRF^;_DO zPJa|`Wc7y2;1m0)Vq8tp8QA)1xE6g*3Gso%LaU5Q7VwSnq-Y>m<$0!p< z-t;GCx-pj;79E16sG|N`d)FP-WU}>PSz)E>m97xMRYasq2T_qlDN>YbD1r!x(%A?B zq9UTO5?p!@2#SIY2aa2S_|X`6yj-1WmP?vnpUJb$zCCvg@)-`QZKit|d!3Wq9OxzV$0d zcE#g&m~Vo9hIjaX!dT-`qS6|r;F?32Y#YfI1js%>DiS8BypHqaS z9O#(ub&6^fqR99F& z1V5&iKdEh)`UtctaU%0$_A21ejS7#JKxy7Ny|aD9itWcy5>UOo9>a)#@?nomb*+{t zO;UCG*n1i=RV31TWdLdfrngSU!v3zs*hAQwWha;nCnG15^mJg7oAN=vJ9*#&p|N2A zCLSp?+A4Y3Tzg4~;f7yi+L`^Jbq&1oszg@-FP%wD;tYR0XxbsAW-v#N0^pA&I%KLl z?(2K+kkY{b8A6YQ&u%~lYGlCdfrtdwyg9=V$RPHRp+%^X-H0A%pT-XMBg@fN9B$;$ z3>|$1tJ5H{Ljo9^0ZWS(bpU{b#2|i%wcImehjeR@9=@veDUcKD*s9hY@~__KkGl1Gl?SkpsxoOfUu7sz0$${3`nG?6!%eCRUMQNyxC^`i^lJoUFojnR!&M@3n=IfMoP$ z9RR&u055yEecTY#{p7IuT=KZ*nmE^ClG_!Mev6F5O=JUlUU7;W`g{z#V_ca{aw49h zO9}CaDgOxJZJIWSs|Hcal5#=2Cd~Q8TJqM0~Zab2mqb?%jPG8 z?UNFo0x%vo0Bq~U+zuJNl?>e-m2lKYmDXoK-)aEV<62(@|Mn>--x}&(bPoYzU0$yM z-h!7MHatu z1(JYQbwnQvRx3>=`ryOVy83`y))WNNl#H6xO}aXo^Y9_D_W06$6M6lX_&e9y|R zg8>&q`#v%zVESkv0EVf-DSL1GK5|l@C;})% z3&`Im2<8Nm*Z%m!GIG2P%OYYw1m7FyQ|p8$ACAVbrZRx|k97BL1O*5cq+wKx-4!?x%qKykg5D>CwvH&bv; z<4SE!lkl1pr*V(2VmM)=p-SpAWpl4bSzZ3EZGpebwD&6zPyg07$xHdOzu=GL6>+^m z+co_f!FKzZ($cDOsq)2Z9%`=SINKNd>~)1K>dfWW{ChB%6ILx>$x*i&D#m7MBm&jB z7$ri?RCBi?KDk&<5c$f3w3BlsV~Q7&*tyJ0Phm%U{gT_hdoT@H9`_xRw4c0=CEqbP zqGk?`z=iSii7{`|Sro?$bH;9x!C8{Unw8s}YpP^6bd)TUaH9p@71M28JReu#hKop^ z;Idnarr1?g$>^83=>Pz`r4?6ycfq`^TO6-G36DYKXA%%C0OC0SRqj=(u*bX@mV_2C<| zrHECNf^3fLUx$I!amxWfa-gE$=K$?<_p94{rspIz$a`>l@e+UuGeruU?4c-}^9_J| z4qGpnt)YDMz^(%D=e_~Yd~Q&BSE_2%>HPvg--CNr-)U=fy+EYZKF~4$0YIYH@Y4;P zqR?_mkzWwvy}9ea4UC?QkiKYbDyzHt`~`7OToAbD)B;I{SiuEMO-hz}`UrA< zq#R-o%wbx%{A&$3c$}#x(1vybBTFnl9@7-ZzSKJEwYh=Ie3k6J53(l7@SH96-gu3X1;3LZ@6|nuO!9UNs;mZTxlyp!EvLaFNyuY& zaa|yF!Fz9Ck`i^pxqiP+dX5)XcQtnY)$l5=6l7e5vF>GlEbp5!P;y7xuadz%@7F5u z4u=bgfk!^ad_vOKW`t8Phq)*?vjn1h{Zpx0A!qk{5Yc$M3h*V))?!b#Fqx|vVCP6M z`+@Usc1x$xU2%ms?Co5;*bPUm?cEr&yJ*oAvQNn_#tAec?bXX{_aipkqdsC*>VuK6_{_E)p&h7 z#K9^1BB+b;U6Xg!KMG$%<|@$WW|fGrg_X#)C^zZHC~@7uh0~-Ei1l`zCY4FgwG5Pq)?O+C00FTNQ`ZbGe3A2RF0?`%U?A ztG`aNgF0_q4JbhPq>pYsn@{<2St}`~cyE^gD3-{D%~@rWa<@^jMD36ciwM-n*%ZYV zQ$escoj`XBCtFddCdTgV{yHXipoY|lpLo`~6cr2#ShSMgnQB-@D<*c+R30a=*R$0? z!JYedIrKA?dKAc2PEaTB!DMQ?L?tf?6w6-&MV8w4*4qq4RjMUCXo=eNV~z2DSFyL5 zKR8Q+nE~zWlc2DUBHRv}P>nuPrT8CNRM|EPz(b3ul6a2H%7@m7x2s$iq^g;hb&XWn za$2Le6ePT51xscK>X@y$^)DbR%oEI_+DTe<2<0vI5@f#F^)y?}J0eD-iqEF4^{fIc zjkxJLtxFkaHmbX+{*rwHT0+jRKGBF)^Z_(>`}>cKs6HIc zo8{H*WkO92pQF_eW(KM+dqzT|J9_rLg#|0VgP1H-oF70RI-m^AP%li4F#Pj=KBf&q zpnA>&(38rEu@Z}gL8o>pTbeK&0&Wj=c3@o@K>=TxoODsY%o-kOSr#SMwu>thW7yG*>F*1$aDI?+`K`O4& zN5C9Kb$p=u>*wWi;Yrt+-%b#CNZjj~lWn2Vw!R}bVn9b5^cKc66Y+Jv^}TzvgYOmd zwapB_(yWS5rc;6=F29f`V9=VYOt4FMija%76pWISY^f`bZARK!;*FV5H#+?MtZ(AI zfxiL~f-j^~aEE(kQgA*n`0bTaU~H#~0Mj;S)NxWn#A-=}nY%weirmPzs`g>!{(utI z-Ho29J-a87xvIbjjb*A?ER7BGa7nbgbX}O zh>q@a*eu#FP)(^UypS?@q#$)k*v!^(QJPy;51_>;S+mmHZ(*iq$y<~cJ*4mPpCFC3 z?}GIEAJrjo{XFZd`1HiqFjfdIXI& zd}xxLYRjpK*4~f=M>k$T#1DRw4Hk6cB?v4VQqvtRkWA0sk%Ri#v#aX>q!LauPpBV5 zj7`xN^`AwMy#pKizvd5gSId!D<8Ci zv{MPg&@6?Ry%Z;CEvf~zw%8sYble)F;(!xv5;nJklK>8hVMtbRp);;75eCqt=1now zd$lmoiP#-bhD3c-igHk*W^MkRY__NsyRXOzg?smt37&#hPT}^$7mrgsNjmV)fTS;c zEIYu?+(;ieKW-Dmz;MJ;^l9rcyoc2Dz73phhZ}+eg2>1($;;c2UCk#2M~G z=c079Z{E3ny0_U&sI}Na)9$-J0IQ+gmRlc`&k>5siDV8k$=^W#**!m$$4$C!zPIPm zgUs4bNI%wQJIZo0Dj(eB5tyjre2p55CGxFW{|)j6K0~x>5NY!Q>4KD}Me%Roe3~gq+vN8pY{y zy57Pql>Z9&mmrhgo|A1^LQ>u%3(OgQA8!RMNz#$!A3nt9>hoRnrLUD3=NBNdDy^yV zW$sX4_0iMND3D!j)1+kQjr>U7*?wJ(BECM2(T!*Brg4Lwm17jA^oi!$HN$0#;wzyaNS6}1N4?^Xb+=%Bh05tbpa1XOHvFHiDtj{ z2<(Tz{(o-|e^}TL3;SVVfA^jI-@mGo=*D~Yuy82Le|Q%d#+E;evC}xNIu6H?A0o&# z^{egO{_=qK7{PE{EEPQC{>8@xe?Q}Y^%=uo8krs~lHw;LUBU()VP=n(r(E^e55~6b zhoeH+1WlclG9JF9zGmQQkSFMUd$Ij+e$*3!T4FpAG0Z#lkxDa*(b+gGb>~ z_==0iH{>B|uQhW-y+*vtKiZau6td^{i?8cFs~sL45-8+0$f^kFHQ2~)PTy>eq*7;0 zeaKuHeu?lZGj6(Yk{DIz>3P~SrBHU4adrtN|Ff-xamE@+0vfsGxgkF6%u5mc*t;Zx zi^HY7pyl&w40PSH4Hs!8Af|fn22?=*Su3TjQI$ET+eam(pk^4E}b%?rQ~A? zpACL}J+ztd?TJNjdc1}_!qatkg(=dwvdGB!yprY2!D~p`NT;!B(Rtqs#bM?9T>G1*3x<3A1!gzMhY(P&xCc#6w1(i?bsNVOM}L z&q}<}IYG@DOMJN+NG9uWbQNs4>v4X@N3`&=!E4;}F?xw!ai@F1w80w~y^0f?FW%&z z7I;*99s&NB9x-SJIwr8fYuysGHu z{Gkm2c#l6Bas)nyPZrqYXA&gigDax26}qN4Kc#P}B@Y_tL6aCaa`EWA9Gty-`Ve+n zz}VRJ0^%r-w9;)bq_JE>zM4GOHM6?m)N@&@#CGLcdSd9X<=Uc}3I{R4-ocN2 zs#9_-f&tQK-$*P%sc3RK$G@ixj(NzQbSlEOfx80HgqU8aNNAfDXgsXTPBpj~V(XOh zCyN}-$dvs}BB6t$fG=AAItrM3sVlm}GihWIdF z+)8e5pG0#4Zearb{chjMp`=496Ga|D8*j>=Dop7)q$Z{UtO$r^qTLbnEeVS*Uh?Oo z$FAT#3O2$==Z5gB2XeZ_G~_BI(X=@fZN{gSm6>2&qT7sXMBzm-4xaDJ5?j`D;bn$K zW4b)EdoRvaKTA!A2SY5F38MF literal 0 HcmV?d00001 diff --git a/wiki-update/Orbitone--Channel.png b/wiki-update/Orbitone--Channel.png new file mode 100644 index 0000000000000000000000000000000000000000..eb43aa9e4cdba2a34391d3e4d0d8b4981bd65256 GIT binary patch literal 60719 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 literal 0 HcmV?d00001 diff --git a/wiki-update/Phaser--Channel.png b/wiki-update/Phaser--Channel.png new file mode 100644 index 0000000000000000000000000000000000000000..8d2a6a74fa3a265e7d418c50fa1a5bc9c7b0c53b GIT binary patch literal 36258 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 literal 0 HcmV?d00001 diff --git a/wiki-update/PlateReverb--Channel.png b/wiki-update/PlateReverb--Channel.png new file mode 100644 index 0000000000000000000000000000000000000000..822ed16b82c44fd7b9967eb99ef5908db61e8138 GIT binary patch literal 35946 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 literal 0 HcmV?d00001 diff --git a/wiki-update/Tube--Channel.png b/wiki-update/Tube--Channel.png new file mode 100644 index 0000000000000000000000000000000000000000..b680ce6272bb0afecc207612bdb91c93545be4e0 GIT binary patch literal 33238 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

i@mN?qrbIu@0rEx*Z)a;-9x9y?-?& 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%0D%S$}M9qq=5I|OFTwq0VEKj|=`=RJn_A|p46|ZOK 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

nFt6DtxSn71Qi&E~^%9;OHNuV*@e;zC`Yuab@S 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

hJO&0TdXM&8@<^vPOi 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 OcnL%rT!s&4g^yhVBNh7sQ(uRXz?`@B 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 +=)(~{VzvV|Pa8A&h(a64q-WtJx+CS3xr z;7g&u^=rMva?jfsbRWGD4rtv;!0wwwm&=xMppOA(egg!7jXl^DpY&=P<2Q?-{VC;J{xKu4TxcUS zQ1uc$EI9)91^*teWWEf-ZLT)jpd(por?_?v-TAzAfGWCW;uCq7Q<~ovt4a4#{d|u6 z{LShcL7JC4?oB+CacEV)+s6&YZqpVhp|O4zTy@G3zbzDTa+=~oDZwt!c_65Q-I+2I zQkUfUYTh++%jz^~+y1V39YZZ67RG;wmIZg6-s(4vuIUjR@vZwlat%^>W|sMNFbK`O z)HQ=?YcIIRG~+QykO1uDhhd-RoUHIkiXP*u9#6z+Q~B-TU4?n<9V`Q#qwOGz!L<*V zZeObxWV8JM#Z_C&Fj7228Yms?G-;8m%Ju%E9QQHj$te!B0q z4yhw?#|G(Ph7qSQx~=FEGXVrW!)o+3);4`d(}cQ-Ue8D0Z{eqIRZ;GX&h}jn2SBgv zO9);BqIf`LUt0()5#NiCV=qci_I#Ro{qdrGS+lfR;{DdEyic9c+i3i6^xC!2@8lgi zQ#J73jp@0UkJS_=bcI+^ei)hu0DVArAOt%xC+8O5lZX}Z(S5-|UU2DQa{KxCM#ztU ziZu}&;npOsodq@5{*1P|ZiheN!nunpi2phwichCYOHF_sckH^)N-uTrYIU2;Tnf= zJ_Hb)$7umZBKvRblx>MVlhDu_5VbD~S@cv|v5^E`)y|fpN%#g{w^*5<@n*=zgOGhr zJ&8I6#i9c=kS1y&F>L#s-vsHBeT1LFCQ$Q>acPYT@PBu<#v24~H5W@-{-_a27%LpF zdBRIa-Qp+XPHO3^V}MyNIq%!F#5W%>JwNq;s>$2e5lntbz!dIRtq*|7O12q&W1n)* zDLWJd2S6u|DBXUP779lLQmGaxsA&9hc(RFZXKoRBdchle%QYT2?OG6rdS+0kgdM&F zKZlFZ4;kta7Ld$^43htbUC9a2RHkhjM@q6bIurqD7a7SXxG)}IrJZEv;VAMnLGVyW zW5nKfsqVPr{L^PmwF_2I^HF-=v1-auF%Q5o^+nBXvAjUQ&IWI?cB~HYYG$%1U+9

MYc*{#Z5hP!Th7?sg<9~5d%~&Jkkt#g7bD? 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 literal 0 HcmV?d00001

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 Ucy;>-v$R-G%jjCkm3x2vUz99m+yDRo literal 0 HcmV?d00001 diff --git a/wiki-update/fx-page.md b/wiki-update/fx-page.md new file mode 100644 index 0000000..bb651d4 --- /dev/null +++ b/wiki-update/fx-page.md @@ -0,0 +1,470 @@ +# Mixing Console & Audio Effect + +On multi-core devices, MiniDexed can now be equiped with a complex and versatile mixing console that is composed of a multi-FX processor. + +After the volume and pan controls, it is possible to set the send level of each Tone Generator to the individual Audio Effect and Main output. Below is the TG channel strip: + +Mixing Console - TG Channel Strip + +Each FX has the possibility to return to any other Audio FX unit as well as Main Output. + +The diagram below shows the synopsis of this Mixing Console. + +Mixing Console - TG Channel Strip + +## The Audio FX + +The following audio FX are available: + +* **Tube:** an amplifier that mimmic the response of valve based amplifier. + + FX Tube Channel Strip + + * ***Enable [Off - On]:*** Enable / disable the FX unit. + * ***Overdrive [0 - 99]:*** the overdrive amount the more the overdrive the less linear is the amplification. Below is the amplifier response based on different value of the overdrive: ![Tube - Overdrive response](Tube--overdrive-response.png) + +
+
+ +* **Chorus:** this effect is an audio signal processing technique that creates a richer, thicker sound by duplicating the original signal and slightly delaying and modulating the duplicated signal in pitch and time. The modulated and delayed signals are then mixed back together with the original signal, creating a sound that seems to be coming from multiple sources or voices. +The result of a chorus effect is a distinctive "shimmering" or "swirling" sound, similar to the sound of a choir or a group of instruments playing together. Chorus effects are commonly used in music production to add depth and complexity to a sound, particularly for guitars, keyboards, and vocals. They are also used in some audio equipment, such as guitar pedals and synthesizers, to produce a chorus effect in real-time. +This implementation is a standard Chorus FX that is based on 4 LFO: + | LFO | Min. freq. | Max. freq. | Phase | + |-----|------------|------------|-------| + | 1 | 0.0 Hz | 0.25 Hz | 0° | + | 2 | 0.0 Hz | 0.25 Hz | 90° | + | 3 | 0.0 Hz | 0.35 Hz | 0° | + | 4 | 0.0 Hz | 0.35 Hz | 90° | + + FX Tube Channel Strip + + * ***Enable [Off - On]:*** Enable / disable the FX unit. + * ***Rate [0 - 99]:*** modulate the LFO rate between thei minimum frequency (Rate = 0) and their maximum frequency (Rate = 99). + * ***Depth [0 - 99]:*** the level of modulation of the FX. The higher the value the more prononced the audio processing is. + +
+
+ +* **Flanger:** this effect is an audio signal processing technique that creates a sweeping, swirling sound by mixing a delayed copy of an audio signal with the original signal. The delay time of the copied signal is varied over time, creating a series of peaks and troughs in the frequency spectrum of the combined signal. +The resulting sound is similar to a chorus effect, but with a more pronounced "swooshing" or "jet engine" effect, as the peaks and troughs of the frequency spectrum sweep up and down in a cyclic pattern. Flangers are often used in music production to create an "otherworldly" or psychedelic effect, particularly on guitars and keyboards. +The name "flanger" comes from the original method of creating the effect, which involved using two tape recorders to play back the same signal simultaneously, while a finger was used to slightly slow down or speed up the flange (rim) of one of the reels, causing the delayed signal to vary in time. Today, flanger effects are typically created digitally, using specialized signal processing algorithms in software or hardware devices such as guitar pedals or studio processors. +This implementation is based on 2 LFO: + | LFO | Min. freq. | Max. freq. | Phase | + |-----|------------|------------|-------| + | 1 | 0.1 Hz | 5.0 Hz | 0° | + | 2 | 0.1 Hz | 5.0 Hz | 90° | + + FX Tube Channel Strip + + * ***Enable [Off - On]:*** Enable / disable the FX unit. + * ***Rate [0 - 99]:*** modulate the LFO rate between thei minimum frequency (Rate = 0) and their maximum frequency (Rate = 99). + * ***Depth [0 - 99]:*** the level of modulation of the FX. The higher the value the more prononced the audio processing is. + * ***Feedback [0 - 99]:*** the amount of of processed signal that is re-injected at the audio effect input. + +
+
+ +* ***Orbitone:*** this is an ensemble effect that is an audio signal processing technique that creates the impression of multiple instruments or voices playing together. It is similar to a chorus effect in that it involves duplicating and modulating an audio signal, but with some differences in the way it is applied. +In an ensemble effect, the duplicated signals are modulated with a low-frequency oscillator (LFO) that varies the pitch and amplitude of the signals over time. The modulated signals are then mixed with the original signal, creating a sound that is thicker and richer, as if several instruments or voices were playing in unison. +The resulting sound can be used to add depth and character to a musical performance, particularly for string, brass, or vocal sounds. Ensemble effects are often used in music production to create a sense of warmth, depth, and movement in a mix. +This implementation is based on 4 LFO: + | LFO | Min. freq. | Max. freq. | Phase | + |-----|------------|------------|-------| + | 1 | 0.0 Hz | 1.0 Hz | 0° | + | 2 | 0.0 Hz | 1.0 Hz | 120° | + | 3 | 0.0 Hz | 1.0 Hz | 240° | + | 4 | 0.0 Hz | 8.8 Hz | 0° | + | 5 | 0.0 Hz | 8.8 Hz | 120° | + | 6 | 0.0 Hz | 8.8 Hz | 240° | + + FX Tube Channel Strip + + * ***Enable [Off - On]:*** Enable / disable the FX unit. + * ***Rate [0 - 99]:*** modulate the LFO rate between thei minimum frequency (Rate = 0) and their maximum frequency (Rate = 99). + * ***Depth [0 - 99]:*** the level of modulation of the FX. The higher the value the more prononced the audio processing is. + * ***Feedback [0 - 99]:*** the amount of of processed signal that is re-injected at the audio effect input. + +
+
+ +* ***Phaser:*** a phaser or phase shifter effect is an audio signal processing technique that creates a sweeping, "whooshing" sound by altering the phase relationship between two identical signals. This is achieved by splitting the audio signal into two parts, delaying one of them slightly, and then combining them again. The delay time is varied over time, causing certain frequencies in the audio signal to be boosted and others to be attenuated. +The resulting sound is characterized by a series of peaks and troughs in the frequency spectrum, which move up and down in a sweeping pattern. The phaser effect is often used in music production to create a sense of movement and space in a mix, and is particularly effective on guitars, keyboards, and other melodic instruments. +This implementation is based on 2 LFO: + | LFO | Min. freq. | Max. freq. | Phase | + |-----|------------|------------|-------| + | 1 | 0.0 Hz | 2.5 Hz | 0° | + | 2 | 0.0 Hz | 2.5 Hz | 90° | + + FX Tube Channel Strip + + * ***Enable [Off - On]:*** Enable / disable the FX unit. + * ***Rate [0 - 99]:*** modulate the LFO rate between thei minimum frequency (Rate = 0) and their maximum frequency (Rate = 99). + * ***Depth [0 - 99]:*** the level of modulation of the FX. The higher the value the more prononced the audio processing is. + * ***Feedback [0 - 99]:*** the amount of of processed signal that is re-injected at the audio effect input. + * ***Nb Stages [2 - 24]:*** The number of state variable filter stages that the audio signal will traverse. + +
+
+ +* **Delay:** the is an audio signal processing technique that creates a repeated, delayed version of an original sound. It does this by temporarily storing a copy of the original audio signal in a buffer, and then playing it back at a later time. +The delay time can be set to vary from a few milliseconds to 1 second, and the repeated sound can be manipulated in various ways to create a range of different effects. +Delay effects are used in a wide variety of musical genres to add texture, depth, and interest to a mix. They can be used on almost any sound source, including vocals, guitars, keyboards, drums and other melodic instruments. +The implemention of this delay accept negative values for both left and right delay. Negative values will echo sound reversed. + + FX Tube Channel Strip + + * ***Enable [Off - On]:*** Enable / disable the FX unit. + * **Left Delay [-99 - 99]:** the left delay from 0 to 2 seconds. + * **Right Delay [-99 - 99]:** the left delay from 0 to 2 seconds. + * ***Feedback [0 - 99]:*** the amount of of processed signal that is re-injected at the audio effect input. + +
+
+ +* **Plate Reverb:** A plate reverb effect is an audio signal processing technique that simulates the sound of a large, metallic plate vibrating in response to an audio signal. It is one of the most iconic and widely used types of artificial reverberation in music production. +The plate reverb effect is created by passing an audio signal through a transducer that causes a large metal plate to vibrate in response. The vibrations of the plate are then picked up by one or more microphones and mixed back with the original signal. The sound of the plate reverb is characterized by a smooth decay and a diffuse, ambient quality that can add warmth and depth to a mix. +Plate reverb effects are often used in music production to add space, depth, and character to a mix. They are particularly effective on vocals, drums, and other percussive sounds, and can be used to create a sense of space and distance in a recording. The effect can be adjusted to achieve varying degrees of intensity, decay time, and other parameters. + + FX Tube Channel Strip + + * ***Enable [Off - On]:*** Enable / disable the FX unit. + * ***Size [0 - 99]:*** the size of the simulated metallic plate hence of the room. + * ***High Damping [0 - 99]:*** the amount of high-frequency attenuation or absorption applied to the plate's vibrations. It is a key parameter that can have a significant impact on the overall sound of the plate reverb effect. + * ***Low Damping [0 - 99]:*** the amount of low-frequency attenuation or absorption applied to the plate's vibrations. It is a key parameter that can have a significant impact on the overall sound of the plate reverb effect. + * ***Low Pass [0 - 99]:*** the low pass parameter of a plate reverb refers to a filter that is applied to the reverb signal to attenuate or cut off frequencies above a certain threshold. + A low pass filter can be used to create a darker, more mellow sound by reducing or removing high-frequency content from the reverb effect. This can be useful when trying to create a more vintage or retro sound, or when trying to soften harsh or bright sounds in a mix. + * ***Diffusion [0 - 99]:*** the diffusion parameter of a plate reverb refers to the degree to which the reflections in the reverb decay are dispersed or spread out in time and space. It determines how "dense" or "sparse" the reverb effect sounds and how the individual reflections blend together. + A higher diffusion parameter means that the reflections in the reverb decay will be more widely dispersed, resulting in a more "washed out" or diffuse sound. This can be useful when trying to create a sense of space or depth in a mix, or when trying to create a more ambient or atmospheric effect. + Conversely, a lower diffusion parameter means that the reflections in the reverb decay will be more closely spaced, resulting in a more defined and focused sound. This can be useful when trying to create a more natural-sounding reverb effect, or when trying to highlight the details of a particular instrument or sound in a mix. + * ***Level [0 - 99]:*** the level parameter of a plate reverb refers to the overall level or amplitude of the reverb effect. It determines how loud the reverb signal is in relation to the dry or unprocessed signal. + +
+
+ +* **Reverberator:** the reverberator effect, commonly known as reverb, is an audio processing effect that simulates the sound reflections and acoustic environment of a physical space. +When a sound is produced in a physical space, it travels through the air and reflects off the walls, floors, and other surfaces in the environment. These reflections create a sense of space and depth, and contribute to the character and quality of the sound. +A reverberator effect works by simulating these reflections, and can be used to create a wide range of sonic environments, from small and intimate spaces like a bedroom or bathroom, to large and expansive spaces like a concert hall or cathedral. +Reverberator can be applied to individual tracks or to a mix, and can be adjusted in various ways, such as changing the decay time or "size" of the simulated space, adjusting the frequency content of the reverb, and adjusting the level or balance of the reverb effect in relation to the dry or unprocessed signal. +Reverberator is a common effect used in many genres of music, as well as in film, television, and other forms of audio production. It can be used to create a sense of realism, depth, and immersion, or to add a sense of ambiance, texture, or mood to a recording or production. +This implementation pushes the reverberation to reach almost the shimmer effect. + + FX Tube Channel Strip + + * ***Enable [Off - On]:*** Enable / disable the FX unit. + * **Gain [0 - 99]:** the gain parameter of the reverberator refers to the overall level or amplitude of the reverberator effect. It determines how loud the reverberator signal is in relation to the dry or unprocessed signal. + * **Time [0 - 99]:** the time determines the size of the simulated reverberating space. + * **Diffusion [0 - 99]:** the diffusion parameter of a reverberator refers to the degree to which the reflections in the reverb decay are dispersed or spread out in time and space. It determines how "dense" or "sparse" the reverberator effect sounds and how the individual reflections blend together. + A higher diffusion parameter means that the reflections in the reverb decay will be more widely dispersed, resulting in a more "washed out" or diffuse sound. This can be useful when trying to create a sense of space or depth in a mix, or when trying to create a more ambient or atmospheric effect. + Conversely, a lower diffusion parameter means that the reflections in the reverberator decay will be more closely spaced, resulting in a more defined and focused sound. This can be useful when trying to create a more natural-sounding reverberator effect, or when trying to highlight the details of a particular instrument or sound in a mix. + * **Low Pass [0 - 99]:** the low pass parameter of a plate reverb refers to a filter that is applied to the reverb signal to attenuate or cut off frequencies above a certain threshold. + A low pass filter can be used to create a darker, more mellow sound by reducing or removing high-frequency content from the reverb effect. This can be useful when trying to create a more vintage or retro sound, or when trying to soften harsh or bright sounds in a mix. + +## The Menu structure + +* *MiniDexed* + * *TG1* + * *Voice* + * *Bank* + * *Volume* + * *Pan* + * **FX-Send** + * **> Tub** *[0 - 99]*: the amount of the Tone Generator signal that will be send to the Tube FX Unit. + * **> ChR** *[0 - 99]*: the amount of the Tone Generator signal that will be send to the Chorus FX Unit. + * **> Flg** *[0 - 99]*: the amount of the Tone Generator signal that will be send to the Flanger FX Unit. + * **> Orb** *[0 - 99]*: the amount of the Tone Generator signal that will be send to the Orbitone FX Unit. + * **> PhR** *[0 - 99]*: the amount of the Tone Generator signal that will be send to the Phaser FX Unit. + * **> Dly** *[0 - 99]*: the amount of the Tone Generator signal that will be send to the Delay FX Unit. + * **> Plt** *[0 - 99]*: the amount of the Tone Generator signal that will be send to the Plate Reverb FX Unit. + * **> Rev** *[0 - 99]*: the amount of the Tone Generator signal that will be send to the Reverberator FX Unit. + * **> Main** *[0 - 99]*: the amount of the Tone Generator signal that will be send to the Main output hence dry. + * *Detune* + * *Cutoff* + * *Resonance* + * *Pitch Bend* + * *Portamento* + * *Poly/Mono* + * *Modulation* + * *Channel* + * *Edit Voice:* + * ... + * *TG2* + * ... *similar to TG1 sub-menu* ... + * *TG3* + * ... *similar to TG1 sub-menu* ... + * *TG4* + * ... *similar to TG1 sub-menu* ... + * *TG5* + * ... *similar to TG1 sub-menu* ... + * *TG6* + * ... *similar to TG1 sub-menu* ... + * *TG7* + * ... *similar to TG1 sub-menu* ... + * *TG8* + * ... *similar to TG1 sub-menu* ... + * **Effects** + * Compress *[on - off]*: Enable / disable the FX unit for all Tone Generators. + * **Tube** + * **Enable** *[on - off]*: Enable / disable the FX unit. + * **Overdrv** *[0 - 99]*: The overdrive amount of the FX unit. + * **Levels** + * **TG1 >** *[0 - 99]* - shortcut to [TG1] >> [FX-Send] >> [> Tub] + * **TG2 >** *[0 - 99]* - shortcut to [TG2] >> [FX-Send] >> [> Tub] + * **TG3 >** *[0 - 99]* - shortcut to [TG3] >> [FX-Send] >> [> Tub] + * **TG4 >** *[0 - 99]* - shortcut to [TG4] >> [FX-Send] >> [> Tub] + * **TG5 >** *[0 - 99]* - shortcut to [TG5] >> [FX-Send] >> [> Tub] + * **TG6 >** *[0 - 99]* - shortcut to [TG6] >> [FX-Send] >> [> Tub] + * **TG7 >** *[0 - 99]* - shortcut to [TG7] >> [FX-Send] >> [> Tub] + * **TG8 >** *[0 - 99]* - shortcut to [TG8] >> [FX-Send] >> [> Tub] + * **ChR >** *[0 - 99]* - shortcut to [Effects] >> [Chorus] >> [> Tub] + * **Flg >** *[0 - 99]* - shortcut to [Effects] >> [FlangR] >> [> Tub] + * **Orb >** *[0 - 99]* - shortcut to [Effects] >> [Orb] >> [> Tub] + * **PhR >** *[0 - 99]* - shortcut to [Effects] >> [PhasR] >> [> Tub] + * **Dly >** *[0 - 99]* - shortcut to [Effects] >> [Delay] >> [> Tub] + * **Plt >** *[0 - 99]* - shortcut to [Effects] >> [Plt Rvb] >> [> Tub] + * **Rev >** *[0 - 99]* - shortcut to [Effects] >> [Rvbrtor] >> [> Tub] + * **FX-Send** + * **> ChR** *[0 - 99]*: The amount of signal processed by the Tube FX unit that will be sent to the Chorus FX unit. + * **> Flg** *[0 - 99]*: The amount of signal processed by the Tube FX unit that will be sent to the Flanger FX unit. + * **> Orb** *[0 - 99]*: The amount of signal processed by the Tube FX unit that will be sent to the Orbitone FX unit. + * **> PhR** *[0 - 99]*: The amount of signal processed by the Tube FX unit that will be sent to the Phaser FX unit. + * **> Dly** *[0 - 99]*: The amount of signal processed by the Tube FX unit that will be sent to the Delay FX unit. + * **> Plt** *[0 - 99]*: The amount of signal processed by the Tube FX unit that will be sent to the Plate Reverb FX unit. + * **> Rev** *[0 - 99]*: The amount of signal processed by the Tube FX unit that will be sent to the Reverberator FX unit. + * **> Main** *[0 - 99]*: The amount of signal processed by the Tube FX unit that will be sent to the Main output. + * **Chorus** + * **Enable** *[on - off]*: Enable / disable the FX unit. + * **Rate** *[0 - 99]*: The speed of the LFO of the FX unit. + * **Depth** *[0 - 99]*: The amount of effect that is applied to the input signal. + * **Levels** + * **TG1 >** *[0 - 99]* - shortcut to [TG1] >> [FX-Send] >> [> ChR] + * **TG2 >** *[0 - 99]* - shortcut to [TG2] >> [FX-Send] >> [> ChR] + * **TG3 >** *[0 - 99]* - shortcut to [TG3] >> [FX-Send] >> [> ChR] + * **TG4 >** *[0 - 99]* - shortcut to [TG4] >> [FX-Send] >> [> ChR] + * **TG5 >** *[0 - 99]* - shortcut to [TG5] >> [FX-Send] >> [> ChR] + * **TG6 >** *[0 - 99]* - shortcut to [TG6] >> [FX-Send] >> [> ChR] + * **TG7 >** *[0 - 99]* - shortcut to [TG7] >> [FX-Send] >> [> ChR] + * **TG8 >** *[0 - 99]* - shortcut to [TG8] >> [FX-Send] >> [> ChR] + * **Tub >** *[0 - 99]* - shortcut to [Effects] >> [Tube] >> [> ChR] + * **Flg >** *[0 - 99]* - shortcut to [Effects] >> [FlangR] >> [> ChR] + * **Orb >** *[0 - 99]* - shortcut to [Effects] >> [Orb] >> [> ChR] + * **PhR >** *[0 - 99]* - shortcut to [Effects] >> [PhasR] >> [> ChR] + * **Dly >** *[0 - 99]* - shortcut to [Effects] >> [Delay] >> [> ChR] + * **Plt >** *[0 - 99]* - shortcut to [Effects] >> [Plt Rvb] >> [> ChR] + * **Rev >** *[0 - 99]* - shortcut to [Effects] >> [Rvbrtor] >> [> ChR] + * **FX-Send** + * **> Tub** *[0 - 99]*: The amount of signal processed by the Chorus FX unit that will be sent to the Tube FX unit. + * **> Flg** *[0 - 99]*: The amount of signal processed by the Chorus FX unit that will be sent to the Flanger FX unit. + * **> Orb** *[0 - 99]*: The amount of signal processed by the Chorus FX unit that will be sent to the Orbitone FX unit. + * **> PhR** *[0 - 99]*: The amount of signal processed by the Chorus FX unit that will be sent to the Phaser FX unit. + * **> Dly** *[0 - 99]*: The amount of signal processed by the Chorus FX unit that will be sent to the Delay FX unit. + * **> Plt** *[0 - 99]*: The amount of signal processed by the Chorus FX unit that will be sent to the Plate Reverb FX unit. + * **> Rev** *[0 - 99]*: The amount of signal processed by the Chorus FX unit that will be sent to the Reverberator FX unit. + * **> Main** *[0 - 99]*: The amount of signal processed by the Chorus FX unit that will be sent to the Main output. + * **FlangR** + * **Enable** *[on - off]*: Enable / disable the FX unit. + * **Rate** *[0 - 99]*: The speed of the LFO of the FX unit. + * **Depth** *[0 - 99]*: The amount of effect that is applied to the input signal. + * **Feedbck** *[0 - 99]*: The amount of processed signal that will be reinjected at the input. + * **Levels** + * **TG1 >** *[0 - 99]* - shortcut to [TG1] >> [FX-Send] >> [> Flg] + * **TG2 >** *[0 - 99]* - shortcut to [TG2] >> [FX-Send] >> [> Flg] + * **TG3 >** *[0 - 99]* - shortcut to [TG3] >> [FX-Send] >> [> Flg] + * **TG4 >** *[0 - 99]* - shortcut to [TG4] >> [FX-Send] >> [> Flg] + * **TG5 >** *[0 - 99]* - shortcut to [TG5] >> [FX-Send] >> [> Flg] + * **TG6 >** *[0 - 99]* - shortcut to [TG6] >> [FX-Send] >> [> Flg] + * **TG7 >** *[0 - 99]* - shortcut to [TG7] >> [FX-Send] >> [> Flg] + * **TG8 >** *[0 - 99]* - shortcut to [TG8] >> [FX-Send] >> [> Flg] + * **Tub >** *[0 - 99]* - shortcut to [Effects] >> [Tube] >> [> Flg] + * **ChR >** *[0 - 99]* - shortcut to [Effects] >> [Chorus] >> [> Flg] + * **Orb >** *[0 - 99]* - shortcut to [Effects] >> [Orb] >> [> Flg] + * **PhR >** *[0 - 99]* - shortcut to [Effects] >> [PhasR] >> [> Flg] + * **Dly >** *[0 - 99]* - shortcut to [Effects] >> [Delay] >> [> Flg] + * **Plt >** *[0 - 99]* - shortcut to [Effects] >> [Plt Rvb] >> [> Flg] + * **Rev >** *[0 - 99]* - shortcut to [Effects] >> [Rvbrtor] >> [> Flg] + * **FX-Send** + * **> Tub** *[0 - 99]*: The amount of signal processed by the Flanger FX unit that will be sent to the Tube FX unit. + * **> ChR** *[0 - 99]*: The amount of signal processed by the Flanger FX unit that will be sent to the Chorus FX unit. + * **> Orb** *[0 - 99]*: The amount of signal processed by the Flanger FX unit that will be sent to the Orbitone FX unit. + * **> PhR** *[0 - 99]*: The amount of signal processed by the Flanger FX unit that will be sent to the Phaser FX unit. + * **> Dly** *[0 - 99]*: The amount of signal processed by the Flanger FX unit that will be sent to the Delay FX unit. + * **> Plt** *[0 - 99]*: The amount of signal processed by the Flanger FX unit that will be sent to the Plate Reverb FX unit. + * **> Rev** *[0 - 99]*: The amount of signal processed by the Flanger FX unit that will be sent to the Reverberator FX unit. + * **> Main** *[0 - 99]*: The amount of signal processed by the Flanger FX unit that will be sent to the Main output. + * **Orb** + * **Enable** *[on - off]*: Enable / disable the FX unit. + * **Rate** *[0 - 99]*: The speed of the LFO of the FX unit. + * **Depth** *[0 - 99]*: The amount of effect that is applied to the input signal. + * **Levels** + * **TG1 >** *[0 - 99]* - shortcut to [TG1] >> [FX-Send] >> [> Orb] + * **TG2 >** *[0 - 99]* - shortcut to [TG2] >> [FX-Send] >> [> Orb] + * **TG3 >** *[0 - 99]* - shortcut to [TG3] >> [FX-Send] >> [> Orb] + * **TG4 >** *[0 - 99]* - shortcut to [TG4] >> [FX-Send] >> [> Orb] + * **TG5 >** *[0 - 99]* - shortcut to [TG5] >> [FX-Send] >> [> Orb] + * **TG6 >** *[0 - 99]* - shortcut to [TG6] >> [FX-Send] >> [> Orb] + * **TG7 >** *[0 - 99]* - shortcut to [TG7] >> [FX-Send] >> [> Orb] + * **TG8 >** *[0 - 99]* - shortcut to [TG8] >> [FX-Send] >> [> Orb] + * **Tub >** *[0 - 99]* - shortcut to [Effects] >> [Tube] >> [> Orb] + * **ChR >** *[0 - 99]* - shortcut to [Effects] >> [Chorus] >> [> Orb] + * **Flg >** *[0 - 99]* - shortcut to [Effects] >> [FlangR] >> [> Orb] + * **PhR >** *[0 - 99]* - shortcut to [Effects] >> [PhasR] >> [> Orb] + * **Dly >** *[0 - 99]* - shortcut to [Effects] >> [Delay] >> [> Orb] + * **Plt >** *[0 - 99]* - shortcut to [Effects] >> [Plt Rvb] >> [> Orb] + * **Rev >** *[0 - 99]* - shortcut to [Effects] >> [Rvbrtor] >> [> Orb] + * **FX-Send** + * **> Tub** *[0 - 99]*: The amount of signal processed by the Orbitone FX unit that will be sent to the Tube FX unit. + * **> ChR** *[0 - 99]*: The amount of signal processed by the Orbitone FX unit that will be sent to the Chorus FX unit. + * **> Flg** *[0 - 99]*: The amount of signal processed by the Orbitone FX unit that will be sent to the Flanger FX unit. + * **> PhR** *[0 - 99]*: The amount of signal processed by the Orbitone FX unit that will be sent to the Phaser FX unit. + * **> Dly** *[0 - 99]*: The amount of signal processed by the Orbitone FX unit that will be sent to the Delay FX unit. + * **> Plt** *[0 - 99]*: The amount of signal processed by the Orbitone FX unit that will be sent to the Plate Reverb FX unit. + * **> Rev** *[0 - 99]*: The amount of signal processed by the Orbitone FX unit that will be sent to the Reverberator FX unit. + * **> Main** *[0 - 99]*: The amount of signal processed by the Orbitone FX unit that will be sent to the Main output. + * **PhasR** + * **Enable** *[on - off]*: Enable / disable the FX unit. + * **Rate** *[0 - 99]*: The speed of the LFO of the FX unit. + * **Depth** *[0 - 99]*: The amount of effect that is applied to the input signal. + * **Feedbck** *[0 - 99]*: The amount of processed signal that will be reinjected at the input. + * **Stages** *[2 - 24]*: The number of processing phasing stages. + * **Levels** + * **TG1 >** *[0 - 99]* - shortcut to [TG1] >> [FX-Send] >> [> PhR] + * **TG2 >** *[0 - 99]* - shortcut to [TG2] >> [FX-Send] >> [> PhR] + * **TG3 >** *[0 - 99]* - shortcut to [TG3] >> [FX-Send] >> [> PhR] + * **TG4 >** *[0 - 99]* - shortcut to [TG4] >> [FX-Send] >> [> PhR] + * **TG5 >** *[0 - 99]* - shortcut to [TG5] >> [FX-Send] >> [> PhR] + * **TG6 >** *[0 - 99]* - shortcut to [TG6] >> [FX-Send] >> [> PhR] + * **TG7 >** *[0 - 99]* - shortcut to [TG7] >> [FX-Send] >> [> PhR] + * **TG8 >** *[0 - 99]* - shortcut to [TG8] >> [FX-Send] >> [> PhR] + * **Tub >** *[0 - 99]* - shortcut to [Effects] >> [Tube] >> [> PhR] + * **ChR >** *[0 - 99]* - shortcut to [Effects] >> [Chorus] >> [> PhR] + * **Flg >** *[0 - 99]* - shortcut to [Effects] >> [FlangR] >> [> PhR] + * **Orb >** *[0 - 99]* - shortcut to [Effects] >> [Orb] >> [> PhR] + * **Dly >** *[0 - 99]* - shortcut to [Effects] >> [Delay] >> [> PhR] + * **Plt >** *[0 - 99]* - shortcut to [Effects] >> [Plt Rvb] >> [> PhR] + * **Rev >** *[0 - 99]* - shortcut to [Effects] >> [Rvbrtor] >> [> PhR] + * **FX-Send** + * **> Tub** *[0 - 99]*: The amount of signal processed by the Phaser FX unit that will be sent to the Tube FX unit. + * **> ChR** *[0 - 99]*: The amount of signal processed by the Phaser FX unit that will be sent to the Chorus FX unit. + * **> Flg** *[0 - 99]*: The amount of signal processed by the Phaser FX unit that will be sent to the Flanger FX unit. + * **> Orb** *[0 - 99]*: The amount of signal processed by the Phaser FX unit that will be sent to the Orbitone FX unit. + * **> Dly** *[0 - 99]*: The amount of signal processed by the Phaser FX unit that will be sent to the Delay FX unit. + * **> Plt** *[0 - 99]*: The amount of signal processed by the Phaser FX unit that will be sent to the Plate Reverb FX unit. + * **> Rev** *[0 - 99]*: The amount of signal processed by the Phaser FX unit that will be sent to the Reverberator FX unit. + * **> Main** *[0 - 99]*: The amount of signal processed by the Phaser FX unit that will be sent to the Main output. + * **Delay** + * **Enable** *[on - off]*: Enable / disable the FX unit. + * **L Delay** *[-99 - 99]*: The delay time for the Left channel. Negtive values play the echoed part of the processed sound reversed. + * **R Delay** *[-99 - 99]*: The delay time for the Right channel. Negtive values play the echoed part of the processed sound reversed. + * **Feedbck** *[0 - 99]*: The amount of processed signal that will be reinjected at the input. + * **Levels** + * **TG1 >** *[0 - 99]* - shortcut to [TG1] >> [FX-Send] >> [> Dly] + * **TG2 >** *[0 - 99]* - shortcut to [TG2] >> [FX-Send] >> [> Dly] + * **TG3 >** *[0 - 99]* - shortcut to [TG3] >> [FX-Send] >> [> Dly] + * **TG4 >** *[0 - 99]* - shortcut to [TG4] >> [FX-Send] >> [> Dly] + * **TG5 >** *[0 - 99]* - shortcut to [TG5] >> [FX-Send] >> [> Dly] + * **TG6 >** *[0 - 99]* - shortcut to [TG6] >> [FX-Send] >> [> Dly] + * **TG7 >** *[0 - 99]* - shortcut to [TG7] >> [FX-Send] >> [> Dly] + * **TG8 >** *[0 - 99]* - shortcut to [TG8] >> [FX-Send] >> [> Dly] + * **Tub >** *[0 - 99]* - shortcut to [Effects] >> [Tube] >> [> Dly] + * **ChR >** *[0 - 99]* - shortcut to [Effects] >> [Chorus] >> [> Dly] + * **Flg >** *[0 - 99]* - shortcut to [Effects] >> [FlangR] >> [> Dly] + * **Orb >** *[0 - 99]* - shortcut to [Effects] >> [Orb] >> [> Dly] + * **PhR >** *[0 - 99]* - shortcut to [Effects] >> [PhasR] >> [> Dly] + * **Plt >** *[0 - 99]* - shortcut to [Effects] >> [Plt Rvb] >> [> Dly] + * **Rev >** *[0 - 99]* - shortcut to [Effects] >> [Rvbrtor] >> [> Dly] + * **FX-Send** + * **> Tub** *[0 - 99]*: The amount of signal processed by the Delay FX unit that will be sent to the Tube FX unit. + * **> ChR** *[0 - 99]*: The amount of signal processed by the Delay FX unit that will be sent to the Chorus FX unit. + * **> Flg** *[0 - 99]*: The amount of signal processed by the Delay FX unit that will be sent to the Flanger FX unit. + * **> Orb** *[0 - 99]*: The amount of signal processed by the Delay FX unit that will be sent to the Orbitone FX unit. + * **> PhR** *[0 - 99]*: The amount of signal processed by the Delay FX unit that will be sent to the Phaser FX unit. + * **> Plt** *[0 - 99]*: The amount of signal processed by the Delay FX unit that will be sent to the Plate Reverb FX unit. + * **> Rev** *[0 - 99]*: The amount of signal processed by the Delay FX unit that will be sent to the Reverberator FX unit. + * **> Main** *[0 - 99]*: The amount of signal processed by the Delay FX unit that will be sent to the Main output. + * **Plt Rvb** + * **Enable** *[on - off]*: Enable / disable the FX unit. + * **Size** *[0 - 99]*: The size of the plate that simulate the size of the reverberating room. + * **High damp** *[0 - 99]*: The amount of high-frequency attenuation. + * **Low damp** *[0 - 99]*: The amount of low-frequency attenuation. + * **Low pass** *[0 - 99]*: The low pass cutoff frequency. + * **Diffusion** *[0 - 99]*: The degree to which the reflections in the reverb decay are dispersed or spread out in time and space. + * **Level** *[0 - 99]*: The overall level or amplitude of the reverb effect. + * **Levels** + * **TG1 >** *[0 - 99]* - shortcut to [TG1] >> [FX-Send] >> [> Plt] + * **TG2 >** *[0 - 99]* - shortcut to [TG2] >> [FX-Send] >> [> Plt] + * **TG3 >** *[0 - 99]* - shortcut to [TG3] >> [FX-Send] >> [> Plt] + * **TG4 >** *[0 - 99]* - shortcut to [TG4] >> [FX-Send] >> [> Plt] + * **TG5 >** *[0 - 99]* - shortcut to [TG5] >> [FX-Send] >> [> Plt] + * **TG6 >** *[0 - 99]* - shortcut to [TG6] >> [FX-Send] >> [> Plt] + * **TG7 >** *[0 - 99]* - shortcut to [TG7] >> [FX-Send] >> [> Plt] + * **TG8 >** *[0 - 99]* - shortcut to [TG8] >> [FX-Send] >> [> Plt] + * **Tub >** *[0 - 99]* - shortcut to [Effects] >> [Tube] >> [> Plt] + * **ChR >** *[0 - 99]* - shortcut to [Effects] >> [Chorus] >> [> Plt] + * **Flg >** *[0 - 99]* - shortcut to [Effects] >> [FlangR] >> [> Plt] + * **Orb >** *[0 - 99]* - shortcut to [Effects] >> [Orb] >> [> Plt] + * **PhR >** *[0 - 99]* - shortcut to [Effects] >> [PhasR] >> [> Plt] + * **Dly >** *[0 - 99]* - shortcut to [Effects] >> [Delay] >> [> Plt] + * **Rev >** *[0 - 99]* - shortcut to [Effects] >> [Rvbrtor] >> [> Plt] + * **FX-Send** + * **> Tub** *[0 - 99]*: The amount of signal processed by the Plate Reverb FX unit that will be sent to the Tube FX unit. + * **> ChR** *[0 - 99]*: The amount of signal processed by the Plate Reverb FX unit that will be sent to the Chorus FX unit. + * **> Flg** *[0 - 99]*: The amount of signal processed by the Plate Reverb FX unit that will be sent to the Flanger FX unit. + * **> Orb** *[0 - 99]*: The amount of signal processed by the Plate Reverb FX unit that will be sent to the Orbitone FX unit. + * **> PhR** *[0 - 99]*: The amount of signal processed by the Plate Reverb FX unit that will be sent to the Phaser FX unit. + * **> Dly** *[0 - 99]*: The amount of signal processed by the Plate Reverb FX unit that will be sent to the Delay FX unit. + * **> Rev** *[0 - 99]*: The amount of signal processed by the Plate Reverb FX unit that will be sent to the Reverberator FX unit. + * **> Main** *[0 - 99]*: The amount of signal processed by the Plate Reverb FX unit that will be sent to the Main output. + * **Rvbrtor** + * **Enable** *[on - off]*: Enable / disable the FX unit. + * **Gain** *[0 - 99]*: The overall level or amplitude of the FX. + * **Time** *[0 - 99]*: The time determines the size of the simulated reverberating space. + * **Diffusion** *[0 - 99]*: The degree to which the reflections in the reverb decay are dispersed or spread out in time and space. + * **Low pass** *[0 - 99]*: The low pass cutoff frequency. + * **Levels** + * **TG1 >** *[0 - 99]* - shortcut to [TG1] >> [FX-Send] >> [> Rev] + * **TG2 >** *[0 - 99]* - shortcut to [TG2] >> [FX-Send] >> [> Rev] + * **TG3 >** *[0 - 99]* - shortcut to [TG3] >> [FX-Send] >> [> Rev] + * **TG4 >** *[0 - 99]* - shortcut to [TG4] >> [FX-Send] >> [> Rev] + * **TG5 >** *[0 - 99]* - shortcut to [TG5] >> [FX-Send] >> [> Rev] + * **TG6 >** *[0 - 99]* - shortcut to [TG6] >> [FX-Send] >> [> Rev] + * **TG7 >** *[0 - 99]* - shortcut to [TG7] >> [FX-Send] >> [> Rev] + * **TG8 >** *[0 - 99]* - shortcut to [TG8] >> [FX-Send] >> [> Rev] + * **Tub >** *[0 - 99]* - shortcut to [Effects] >> [Tube] >> [> Rev] + * **ChR >** *[0 - 99]* - shortcut to [Effects] >> [Chorus] >> [> Rev] + * **Flg >** *[0 - 99]* - shortcut to [Effects] >> [FlangR] >> [> Rev] + * **Orb >** *[0 - 99]* - shortcut to [Effects] >> [Orb] >> [> Rev] + * **PhR >** *[0 - 99]* - shortcut to [Effects] >> [PhasR] >> [> Rev] + * **Dly >** *[0 - 99]* - shortcut to [Effects] >> [Delay] >> [> Rev] + * **Plt >** *[0 - 99]* - shortcut to [Effects] >> [Plt Rvb] >> [> Rev] + * **FX-Send** + * **> Tub** *[0 - 99]*: The amount of signal processed by the Reverberator FX unit that will be sent to the Tube FX unit. + * **> ChR** *[0 - 99]*: The amount of signal processed by the Reverberator FX unit that will be sent to the Chorus FX unit. + * **> Flg** *[0 - 99]*: The amount of signal processed by the Reverberator FX unit that will be sent to the Flanger FX unit. + * **> Orb** *[0 - 99]*: The amount of signal processed by the Reverberator FX unit that will be sent to the Orbitone FX unit. + * **> PhR** *[0 - 99]*: The amount of signal processed by the Reverberator FX unit that will be sent to the Phaser FX unit. + * **> 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* + * ... + * *Save* + * ... + * *Delete* + * ... diff --git a/wiki-update/mixing-console--TG-Channel.png b/wiki-update/mixing-console--TG-Channel.png new file mode 100644 index 0000000000000000000000000000000000000000..e8efcc6ade97d97027507d9abac653a15daadb0d GIT binary patch literal 33310 zcmeEuc|4Twzju9A+E7Uza*RI)@X*~=2LWgTNIm7<6#YxYu7*>{>5k}d0q z?6VMN6z0ZYFqY@$9y+h*d0x-!Jm+_Q=bS%&*Q+r1ea*Gq*Yf_nKkv`|?25h?+wP;g zw`|$MrhV!BHSjlm%a&a^J6XWLF6l~zgTJ)Ci*SJH$SIB^;v7dM_w&heg6Wvz!Gj06!6c%2SoHkS zqepqbB&E+QeU zN=iyvKSbI9{P$G)8tU)A|CYV+QXWjk2?}5`Nrb^*s;a7LYHI2ZMH&vpXB^AUIF+9} zckVox+-tP8wRLrM4Gavf1jt^ycFoYx(Ae16%*^ce?c3JY)^>Jw4h{}3E-v@Ml&$6I z>FMq5jYJ~-{rw+3dK45C^z7NQ(9qBqFJ8pt65`_Gl9Q8DQc~W&ef#d+yY%$*%*@QJ ztgQU}{DOjl;^N}6va<5>@`{Rz%F4F90$4N6*ct@t{9tI+;x8x9vu_^ z{zGX+ZT+|AmiEqG(l~WtY5AnDiwyXcUH2~;du-Vv`(^F_R#6+1{w-Sq)wIu_z2Rdq zvHT1@aWOe(7ZFimOgAJTQrIS3+Sw-Fb4J