fixing delay: parameters + code optimization

pull/495/head
Vincent GAUCHE 2 years ago
parent 8437803790
commit 1fe0559f43
  1. 17
      src/fx_delay.cpp
  2. 1
      src/fx_delay.h
  3. 99
      src/minidexed.cpp
  4. 74
      src/test/test_fx_mixing_console.cpp
  5. 4
      src/test/test_fx_mixing_console_unitary.cpp
  6. BIN
      wiki-update/mixing-console-overview.png

@ -2,8 +2,9 @@
#include <cmath> #include <cmath>
#define MAX_DELAY_TIME 2.0f #define MAX_DELAY_TIME 1.0f
#define MAX_FLUTTER_DELAY_TIME 0.001f #define MAX_FLUTTER_DELAY_TIME 0.2f
#define MAX_FLUTTER_DELAY_AMOUNT 0.01f
#define LPF_CUTOFF_REF 12000.0f #define LPF_CUTOFF_REF 12000.0f
#define HPF_CUTOFF_REF 80.0f #define HPF_CUTOFF_REF 80.0f
@ -87,21 +88,21 @@ void Delay::reset()
void Delay::processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) 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; float32_t jitter_delay_time = 0.0f;
if(this->jitter_amount_ != 0.0f) if(this->jitter_amount_ != 0.0f)
{ {
float32_t jitter_ratio = this->jitter_generator_.process(); float32_t jitter_ratio = this->jitter_generator_.process();
if(jitter_ratio != 0.0f) if(jitter_ratio != 0.0f)
{ {
jitter_ratio *= this->jitter_amount_; jitter_ratio *= this->jitter_amount_ * MAX_FLUTTER_DELAY_AMOUNT;
jitter_delay_time = MAX_FLUTTER_DELAY_TIME * jitter_ratio * this->getSamplingRate(); jitter_delay_time = MAX_FLUTTER_DELAY_TIME * jitter_ratio;
this->filter_.setCutoffChangeRatio(jitter_ratio);
} }
} }
// this->filter_.setCutoffChangeRatio(jitter_ratio); // const float32_t max_delay_time = MAX_DELAY_TIME * this->getSamplingRate();
float32_t delay_time_L = jitter_delay_time + max_delay_time * this->getLeftDelayTime(); float32_t delay_time_L = (MAX_DELAY_TIME * this->getLeftDelayTime() + jitter_delay_time) * this->getSamplingRate();
float32_t delay_time_R = jitter_delay_time + max_delay_time * this->getRightDelayTime(); float32_t delay_time_R = (MAX_DELAY_TIME * this->getRightDelayTime() + jitter_delay_time) * this->getSamplingRate();
// Calculate write positions // Calculate write positions
unsigned write_pos_L = static_cast<unsigned>(this->MaxSampleDelayTime + this->read_pos_L_ + delay_time_L) % this->MaxSampleDelayTime; unsigned write_pos_L = static_cast<unsigned>(this->MaxSampleDelayTime + this->read_pos_L_ + delay_time_L) % this->MaxSampleDelayTime;

@ -140,7 +140,6 @@ private:
SS__TEXT(ss, ' ', space, std::left, '|', "delay_time_R_"); SS__TEXT(ss, ' ', space, std::left, '|', "delay_time_R_");
SS__TEXT(ss, ' ', space, std::left, '|', "feedback_"); SS__TEXT(ss, ' ', space, std::left, '|', "feedback_");
SS__TEXT(ss, ' ', space, std::left, '|', "jitter_amount_"); SS__TEXT(ss, ' ', space, std::left, '|', "jitter_amount_");
SS__TEXT(ss, ' ', space, std::left, '|', "filter_");
out << "\t" << ss.str() << std::endl; out << "\t" << ss.str() << std::endl;
SS_RESET(ss, precision, std::left); SS_RESET(ss, precision, std::left);

@ -815,7 +815,7 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue)
switch (Parameter) switch (Parameter)
{ {
case TParameter::ParameterCompressorEnable: case TParameter::ParameterCompressorEnable:
for (unsigned nTG = 0; nTG < CConfig::ToneGenerators; nTG++) for (unsigned nTG = 0; nTG < CConfig::ToneGenerators; ++nTG)
{ {
assert(m_pTG[nTG]); assert(m_pTG[nTG]);
m_pTG[nTG]->setCompressor (!!nValue); m_pTG[nTG]->setCompressor (!!nValue);
@ -955,6 +955,18 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue)
this->mixing_console_->getDelay()->setFeedback(nValue / 99.0f); this->mixing_console_->getDelay()->setFeedback(nValue / 99.0f);
this->m_FXSpinLock.Release(); this->m_FXSpinLock.Release();
break; break;
case TParameter::ParameterFXDelayFlutterRate:
nValue = constrain((int)nValue, 0, 99);
this->m_FXSpinLock.Acquire();
this->mixing_console_->getDelay()->setFlutterRate(nValue / 99.0f);
this->m_FXSpinLock.Release();
break;
case TParameter::ParameterFXDelayFlutterAmount:
nValue = constrain((int)nValue, 0, 99);
this->m_FXSpinLock.Acquire();
this->mixing_console_->getDelay()->setFlutterAmount(nValue / 99.0f);
this->m_FXSpinLock.Release();
break;
// AudioEffectPlateReverb parameters // AudioEffectPlateReverb parameters
case TParameter::ParameterReverbEnable: case TParameter::ParameterReverbEnable:
@ -1950,48 +1962,48 @@ bool CMiniDexed::DoSavePerformance (void)
#endif #endif
} }
m_PerformanceConfig.SetCompressorEnable (!!m_nParameter[ParameterCompressorEnable]); m_PerformanceConfig.SetCompressorEnable (!!m_nParameter[TParameter::ParameterCompressorEnable]);
m_PerformanceConfig.SetReverbEnable (!!m_nParameter[ParameterReverbEnable]); m_PerformanceConfig.SetReverbEnable (!!m_nParameter[TParameter::ParameterReverbEnable]);
m_PerformanceConfig.SetReverbSize (m_nParameter[ParameterReverbSize]); m_PerformanceConfig.SetReverbSize (m_nParameter[TParameter::ParameterReverbSize]);
m_PerformanceConfig.SetReverbHighDamp (m_nParameter[ParameterReverbHighDamp]); m_PerformanceConfig.SetReverbHighDamp (m_nParameter[TParameter::ParameterReverbHighDamp]);
m_PerformanceConfig.SetReverbLowDamp (m_nParameter[ParameterReverbLowDamp]); m_PerformanceConfig.SetReverbLowDamp (m_nParameter[TParameter::ParameterReverbLowDamp]);
m_PerformanceConfig.SetReverbLowPass (m_nParameter[ParameterReverbLowPass]); m_PerformanceConfig.SetReverbLowPass (m_nParameter[TParameter::ParameterReverbLowPass]);
m_PerformanceConfig.SetReverbDiffusion (m_nParameter[ParameterReverbDiffusion]); m_PerformanceConfig.SetReverbDiffusion (m_nParameter[TParameter::ParameterReverbDiffusion]);
m_PerformanceConfig.SetReverbLevel (m_nParameter[ParameterReverbLevel]); m_PerformanceConfig.SetReverbLevel (m_nParameter[TParameter::ParameterReverbLevel]);
#ifdef MIXING_CONSOLE_ENABLE #ifdef MIXING_CONSOLE_ENABLE
this->m_PerformanceConfig.SetFXTubeEnable(!!this->m_nParameter[ParameterFXTubeEnable]); this->m_PerformanceConfig.SetFXTubeEnable(!!this->m_nParameter[TParameter::ParameterFXTubeEnable]);
this->m_PerformanceConfig.SetFXTubeOverdrive(this->m_nParameter[ParameterFXTubeOverdrive]); this->m_PerformanceConfig.SetFXTubeOverdrive(this->m_nParameter[TParameter::ParameterFXTubeOverdrive]);
this->m_PerformanceConfig.SetFXChorusEnable(!!this->m_nParameter[ParameterFXChorusEnable]); this->m_PerformanceConfig.SetFXChorusEnable(!!this->m_nParameter[TParameter::ParameterFXChorusEnable]);
this->m_PerformanceConfig.SetFXChorusRate(this->m_nParameter[ParameterFXChorusRate]); this->m_PerformanceConfig.SetFXChorusRate(this->m_nParameter[TParameter::ParameterFXChorusRate]);
this->m_PerformanceConfig.SetFXChorusDepth(this->m_nParameter[ParameterFXChorusDepth]); this->m_PerformanceConfig.SetFXChorusDepth(this->m_nParameter[TParameter::ParameterFXChorusDepth]);
this->m_PerformanceConfig.SetFXFlangerEnable(!!this->m_nParameter[ParameterFXFlangerEnable]); this->m_PerformanceConfig.SetFXFlangerEnable(!!this->m_nParameter[TParameter::ParameterFXFlangerEnable]);
this->m_PerformanceConfig.SetFXFlangerRate(this->m_nParameter[ParameterFXFlangerRate]); this->m_PerformanceConfig.SetFXFlangerRate(this->m_nParameter[TParameter::ParameterFXFlangerRate]);
this->m_PerformanceConfig.SetFXFlangerDepth(this->m_nParameter[ParameterFXFlangerDepth]); this->m_PerformanceConfig.SetFXFlangerDepth(this->m_nParameter[TParameter::ParameterFXFlangerDepth]);
this->m_PerformanceConfig.SetFXFlangerFeedback(this->m_nParameter[ParameterFXFlangerFeedback]); this->m_PerformanceConfig.SetFXFlangerFeedback(this->m_nParameter[TParameter::ParameterFXFlangerFeedback]);
this->m_PerformanceConfig.SetFXOrbitoneEnable(!!this->m_nParameter[ParameterFXOrbitoneEnable]); this->m_PerformanceConfig.SetFXOrbitoneEnable(!!this->m_nParameter[TParameter::ParameterFXOrbitoneEnable]);
this->m_PerformanceConfig.SetFXOrbitoneRate(this->m_nParameter[ParameterFXOrbitoneRate]); this->m_PerformanceConfig.SetFXOrbitoneRate(this->m_nParameter[TParameter::ParameterFXOrbitoneRate]);
this->m_PerformanceConfig.SetFXOrbitoneDepth(this->m_nParameter[ParameterFXOrbitoneDepth]); this->m_PerformanceConfig.SetFXOrbitoneDepth(this->m_nParameter[TParameter::ParameterFXOrbitoneDepth]);
this->m_PerformanceConfig.SetFXPhaserEnable(!!this->m_nParameter[ParameterFXPhaserEnable]); this->m_PerformanceConfig.SetFXPhaserEnable(!!this->m_nParameter[TParameter::ParameterFXPhaserEnable]);
this->m_PerformanceConfig.SetFXPhaserRate(this->m_nParameter[ParameterFXPhaserRate]); this->m_PerformanceConfig.SetFXPhaserRate(this->m_nParameter[TParameter::ParameterFXPhaserRate]);
this->m_PerformanceConfig.SetFXPhaserDepth(this->m_nParameter[ParameterFXPhaserDepth]); this->m_PerformanceConfig.SetFXPhaserDepth(this->m_nParameter[TParameter::ParameterFXPhaserDepth]);
this->m_PerformanceConfig.SetFXPhaserFeedback(this->m_nParameter[ParameterFXPhaserFeedback]); this->m_PerformanceConfig.SetFXPhaserFeedback(this->m_nParameter[TParameter::ParameterFXPhaserFeedback]);
this->m_PerformanceConfig.SetFXPhaserNbStages(this->m_nParameter[ParameterFXPhaserNbStages]); this->m_PerformanceConfig.SetFXPhaserNbStages(this->m_nParameter[TParameter::ParameterFXPhaserNbStages]);
this->m_PerformanceConfig.SetFXDelayEnable(!!this->m_nParameter[ParameterFXDelayEnable]); this->m_PerformanceConfig.SetFXDelayEnable(!!this->m_nParameter[TParameter::ParameterFXDelayEnable]);
this->m_PerformanceConfig.SetFXDelayLeftDelayTime(this->m_nParameter[ParameterFXDelayLeftDelayTime]); this->m_PerformanceConfig.SetFXDelayLeftDelayTime(this->m_nParameter[TParameter::ParameterFXDelayLeftDelayTime]);
this->m_PerformanceConfig.SetFXDelayRightDelayTime(this->m_nParameter[ParameterFXDelayRightDelayTime]); this->m_PerformanceConfig.SetFXDelayRightDelayTime(this->m_nParameter[TParameter::ParameterFXDelayRightDelayTime]);
this->m_PerformanceConfig.SetFXDelayFeedback(this->m_nParameter[ParameterFXDelayFeedback]); this->m_PerformanceConfig.SetFXDelayFeedback(this->m_nParameter[TParameter::ParameterFXDelayFeedback]);
this->m_PerformanceConfig.SetFXReverberatorEnable(!!this->m_nParameter[ParameterFXReverberatorEnable]); this->m_PerformanceConfig.SetFXReverberatorEnable(!!this->m_nParameter[TParameter::ParameterFXReverberatorEnable]);
this->m_PerformanceConfig.SetFXReverberatorInputGain(this->m_nParameter[ParameterFXReverberatorInputGain]); this->m_PerformanceConfig.SetFXReverberatorInputGain(this->m_nParameter[TParameter::ParameterFXReverberatorInputGain]);
this->m_PerformanceConfig.SetFXReverberatorTime(this->m_nParameter[ParameterFXReverberatorTime]); this->m_PerformanceConfig.SetFXReverberatorTime(this->m_nParameter[TParameter::ParameterFXReverberatorTime]);
this->m_PerformanceConfig.SetFXReverberatorDiffusion(this->m_nParameter[ParameterFXReverberatorDiffusion]); this->m_PerformanceConfig.SetFXReverberatorDiffusion(this->m_nParameter[TParameter::ParameterFXReverberatorDiffusion]);
this->m_PerformanceConfig.SetFXReverberatorLP(this->m_nParameter[ParameterFXReverberatorLP]); 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_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_Flanger, this->m_nParameter[TParameter::ParameterFXTube_FlangerSend]);
@ -2429,12 +2441,13 @@ void CMiniDexed::LoadPerformanceParameters(void)
} }
setMonoMode(m_PerformanceConfig.GetMonoMode(nTG) ? 1 : 0, nTG); setMonoMode(m_PerformanceConfig.GetMonoMode(nTG) ? 1 : 0, nTG);
#ifdef MIXING_CONSOLE_ENABLE this->SetParameter(TParameter::ParameterCompressorEnable, this->m_PerformanceConfig.GetCompressorEnable());
#if defined(MIXING_CONSOLE_ENABLE)
for(size_t fx = 0; fx < MixerOutput::kFXCount; ++fx) for(size_t fx = 0; fx < MixerOutput::kFXCount; ++fx)
{ {
this->setMixingConsoleSendLevel(nTG, static_cast<MixerOutput>(fx), this->m_PerformanceConfig.GetTGSendLevel(nTG, static_cast<MixerOutput>(fx))); this->setMixingConsoleSendLevel(nTG, static_cast<MixerOutput>(fx), this->m_PerformanceConfig.GetTGSendLevel(nTG, static_cast<MixerOutput>(fx)));
} }
#else #elif defined(PLATE_REVERB_ENABLE)
SetReverbSend (m_PerformanceConfig.GetReverbSend (nTG), nTG); SetReverbSend (m_PerformanceConfig.GetReverbSend (nTG), nTG);
#endif #endif

@ -56,8 +56,8 @@ void setupMixingConsoleFX(Mixer* mixer)
mixer->getDelay()->setLeftDelayTime(0.15f); mixer->getDelay()->setLeftDelayTime(0.15f);
mixer->getDelay()->setLeftDelayTime(0.20f); mixer->getDelay()->setLeftDelayTime(0.20f);
mixer->getDelay()->setFeedback(0.7f); mixer->getDelay()->setFeedback(0.7f);
mixer->getDelay()->setFlutterRate(0.2f); mixer->getDelay()->setFlutterRate(0.35f);
mixer->getDelay()->setFlutterAmount(0.5f); mixer->getDelay()->setFlutterAmount(0.75f);
mixer->getPlateReverb()->setMute(false); mixer->getPlateReverb()->setMute(false);
mixer->getPlateReverb()->set_bypass(false); mixer->getPlateReverb()->set_bypass(false);
@ -106,7 +106,7 @@ void setupMixingConsoleFX(Mixer* mixer, int scenarioId, size_t channel)
} }
else else
{ {
mixer->setReturnLevel(previousActivatedFX, static_cast<MixerOutput>(i), 1.0f); mixer->setFXSendLevel(previousActivatedFX, static_cast<MixerOutput>(i), 1.0f);
} }
previousActivatedFX = static_cast<MixerOutput>(i); previousActivatedFX = static_cast<MixerOutput>(i);
} }
@ -119,7 +119,7 @@ void setupMixingConsoleFX(Mixer* mixer, int scenarioId, size_t channel)
else else
{ {
mixer->setSendLevel(channel, MixerOutput::MainOutput, 0.25f); mixer->setSendLevel(channel, MixerOutput::MainOutput, 0.25f);
mixer->setReturnLevel(previousActivatedFX, MixerOutput::MainOutput, 0.75f); mixer->setFXSendLevel(previousActivatedFX, MixerOutput::MainOutput, 0.75f);
} }
} }
@ -159,11 +159,11 @@ TEST(MixingConsole, ZeroSamplesTest)
mixer.setSendLevel(0, MixerOutput::FX_Delay, 1.0f); mixer.setSendLevel(0, MixerOutput::FX_Delay, 1.0f);
mixer.setSendLevel(0, MixerOutput::FX_PlateReverb, 1.0f); mixer.setSendLevel(0, MixerOutput::FX_PlateReverb, 1.0f);
mixer.setReturnLevel(MixerOutput::FX_Tube, MixerOutput::FX_Orbitone, 1.0f); mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Orbitone, 1.0f);
mixer.setReturnLevel(MixerOutput::FX_Orbitone, MixerOutput::MainOutput, 0.5f); mixer.setFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::MainOutput, 0.5f);
mixer.setReturnLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_PlateReverb, 1.0f); mixer.setFXSendLevel(MixerOutput::FX_Orbitone, MixerOutput::FX_PlateReverb, 1.0f);
mixer.setReturnLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput, 0.5f); mixer.setFXSendLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput, 0.5f);
mixer.setReturnLevel(MixerOutput::FX_PlateReverb, MixerOutput::MainOutput, 0.5f); mixer.setFXSendLevel(MixerOutput::FX_PlateReverb, MixerOutput::MainOutput, 0.5f);
ASSERT_EQ(0, FULL_INSPECT((&mixer), true)); ASSERT_EQ(0, FULL_INSPECT((&mixer), true));
} }
@ -188,7 +188,7 @@ TEST(MixingConsole, DryProcessing)
for(size_t i = MixerOutput::OutputStart; i < (MixerOutput::kFXCount - 1); ++i) for(size_t i = MixerOutput::OutputStart; i < (MixerOutput::kFXCount - 1); ++i)
{ {
mixer.setReturnLevel(static_cast<MixerOutput>(i), MixerOutput::MainOutput, 0.0f); mixer.setFXSendLevel(static_cast<MixerOutput>(i), MixerOutput::MainOutput, 0.0f);
} }
mixer.setSendLevel(0, MixerOutput::MainOutput, 1.0f); mixer.setSendLevel(0, MixerOutput::MainOutput, 1.0f);
@ -226,7 +226,7 @@ TEST(MixingConsole, ReverberatorProcessing)
mixer.setSendLevel(0, MixerOutput::MainOutput, 0.0f); mixer.setSendLevel(0, MixerOutput::MainOutput, 0.0f);
mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f); mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f);
mixer.setReturnLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 1.0f); mixer.setFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 1.0f);
ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); ASSERT_EQ(0, INSPECT((&mixer), fullInspector));
float32_t in[length] = {0.1, 0.2}; float32_t in[length] = {0.1, 0.2};
@ -272,7 +272,7 @@ TEST(MixingConsole, ReverberatorNoiseProcessing)
mixer.setSendLevel(0, MixerOutput::MainOutput, 0.0f); mixer.setSendLevel(0, MixerOutput::MainOutput, 0.0f);
mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f); mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f);
mixer.setReturnLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 1.0f); mixer.setFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 1.0f);
ASSERT_EQ(0, INSPECT((&mixer), fullInspector)); ASSERT_EQ(0, INSPECT((&mixer), fullInspector));
float32_t in[length]; float32_t in[length];
@ -302,18 +302,18 @@ TEST(MixingConsole, StandardUsageProcessingByInjection)
mixer.setSendLevel(0, MixerOutput::FX_Tube, 1.0f); mixer.setSendLevel(0, MixerOutput::FX_Tube, 1.0f);
mixer.setSendLevel(0, MixerOutput::FX_Phaser, 1.0f); mixer.setSendLevel(0, MixerOutput::FX_Phaser, 1.0f);
// mixer.setReturnLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 1.0f); // mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 1.0f);
// mixer.setSendLevel(0, MixerOutput::FX_Chorus, 1.0f); // mixer.setSendLevel(0, MixerOutput::FX_Chorus, 1.0f);
// mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f); // mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f);
mixer.setReturnLevel(MixerOutput::FX_Tube, MixerOutput::FX_Chorus, 1.0f); mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Chorus, 1.0f);
mixer.setReturnLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Reverberator, 1.0f); mixer.setFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Reverberator, 1.0f);
mixer.setReturnLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Delay, 1.0f); mixer.setFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Delay, 1.0f);
mixer.setSendLevel(0, MixerOutput::MainOutput, 0.25f); mixer.setSendLevel(0, MixerOutput::MainOutput, 0.25f);
mixer.setReturnLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 0.1f); mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 0.1f);
mixer.setReturnLevel(MixerOutput::FX_Chorus, MixerOutput::MainOutput, 0.15f); mixer.setFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::MainOutput, 0.15f);
mixer.setReturnLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.3f); mixer.setFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.3f);
mixer.setReturnLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput, 0.3f); mixer.setFXSendLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput, 0.3f);
mixer.injectInputSamples(0, inSamples[StereoChannels::Left], inSamples[StereoChannels::Right], size); mixer.injectInputSamples(0, inSamples[StereoChannels::Left], inSamples[StereoChannels::Right], size);
mixer.process(outSamples[0], outSamples[1]); mixer.process(outSamples[0], outSamples[1]);
@ -342,18 +342,18 @@ TEST(MixingConsole, StandardUsageProcessing)
mixer.setSendLevel(0, MixerOutput::FX_Tube, 1.0f); mixer.setSendLevel(0, MixerOutput::FX_Tube, 1.0f);
mixer.setSendLevel(0, MixerOutput::FX_Phaser, 1.0f); mixer.setSendLevel(0, MixerOutput::FX_Phaser, 1.0f);
// mixer.setReturnLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 1.0f); // mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 1.0f);
// mixer.setSendLevel(0, MixerOutput::FX_Chorus, 1.0f); // mixer.setSendLevel(0, MixerOutput::FX_Chorus, 1.0f);
// mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f); // mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f);
mixer.setReturnLevel(MixerOutput::FX_Tube, MixerOutput::FX_Chorus, 1.0f); mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Chorus, 1.0f);
mixer.setReturnLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Reverberator, 1.0f); mixer.setFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Reverberator, 1.0f);
mixer.setReturnLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Delay, 1.0f); mixer.setFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Delay, 1.0f);
mixer.setSendLevel(0, MixerOutput::MainOutput, 0.25f); mixer.setSendLevel(0, MixerOutput::MainOutput, 0.25f);
mixer.setReturnLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 0.1f); mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 0.1f);
mixer.setReturnLevel(MixerOutput::FX_Chorus, MixerOutput::MainOutput, 0.15f); mixer.setFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::MainOutput, 0.15f);
mixer.setReturnLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.3f); mixer.setFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.3f);
mixer.setReturnLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput, 0.3f); mixer.setFXSendLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput, 0.3f);
float32_t* inS = inSamples[StereoChannels::Left]; float32_t* inS = inSamples[StereoChannels::Left];
float32_t* outS[StereoChannels::kNumChannels]; float32_t* outS[StereoChannels::kNumChannels];
@ -404,18 +404,18 @@ TEST(MixingConsole, StandardUsageProcessingAllMixerChannels)
mixer.setSendLevel(0, MixerOutput::FX_Tube, 1.0f); mixer.setSendLevel(0, MixerOutput::FX_Tube, 1.0f);
mixer.setSendLevel(0, MixerOutput::FX_Phaser, 1.0f); mixer.setSendLevel(0, MixerOutput::FX_Phaser, 1.0f);
// mixer.setReturnLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 1.0f); // mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 1.0f);
// mixer.setSendLevel(0, MixerOutput::FX_Chorus, 1.0f); // mixer.setSendLevel(0, MixerOutput::FX_Chorus, 1.0f);
// mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f); // mixer.setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f);
mixer.setReturnLevel(MixerOutput::FX_Tube, MixerOutput::FX_Chorus, 1.0f); mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::FX_Chorus, 1.0f);
mixer.setReturnLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Reverberator, 1.0f); mixer.setFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::FX_Reverberator, 1.0f);
mixer.setReturnLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Delay, 1.0f); mixer.setFXSendLevel(MixerOutput::FX_Phaser, MixerOutput::FX_Delay, 1.0f);
mixer.setSendLevel(0, MixerOutput::MainOutput, 0.25f); mixer.setSendLevel(0, MixerOutput::MainOutput, 0.25f);
mixer.setReturnLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 0.1f); mixer.setFXSendLevel(MixerOutput::FX_Tube, MixerOutput::MainOutput, 0.1f);
mixer.setReturnLevel(MixerOutput::FX_Chorus, MixerOutput::MainOutput, 0.15f); mixer.setFXSendLevel(MixerOutput::FX_Chorus, MixerOutput::MainOutput, 0.15f);
mixer.setReturnLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.3f); mixer.setFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.3f);
mixer.setReturnLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput, 0.3f); mixer.setFXSendLevel(MixerOutput::FX_Delay, MixerOutput::MainOutput, 0.3f);
float32_t* inS = inSamples[StereoChannels::Left]; float32_t* inS = inSamples[StereoChannels::Left];
float32_t* outS[StereoChannels::kNumChannels]; float32_t* outS[StereoChannels::kNumChannels];
@ -467,7 +467,7 @@ TEST(MixingConsole, StandardUsageProcessingAllMixerChannels2)
for(size_t i = 0; i < NB_MIXER_CHANNELS; ++i) for(size_t i = 0; i < NB_MIXER_CHANNELS; ++i)
{ {
mixer.setSendLevel(i, static_cast<MixerOutput>(i), 1.0f); mixer.setSendLevel(i, static_cast<MixerOutput>(i), 1.0f);
mixer.setReturnLevel(static_cast<MixerOutput>(i), MixerOutput::MainOutput, 0.5f); mixer.setFXSendLevel(static_cast<MixerOutput>(i), MixerOutput::MainOutput, 0.5f);
mixer.setSendLevel(i, MixerOutput::MainOutput, 0.5f); mixer.setSendLevel(i, MixerOutput::MainOutput, 0.5f);
} }

@ -63,7 +63,7 @@ TEST(MixingConsole, ReverberatorShortBuffer)
mixer->setSendLevel(0, MixerOutput::MainOutput, 0.4f); mixer->setSendLevel(0, MixerOutput::MainOutput, 0.4f);
mixer->setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f); mixer->setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f);
mixer->setReturnLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.6f); mixer->setFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.6f);
float32_t inSamples[size]; float32_t inSamples[size];
for(size_t s = 0; s < size; ++s) inSamples[s] = getRandomValue(); for(size_t s = 0; s < size; ++s) inSamples[s] = getRandomValue();
@ -152,7 +152,7 @@ TEST(MixingConsole, ReverberatorSamplesBoundariesTest)
mixer->setSendLevel(0, MixerOutput::MainOutput, 0.4f); mixer->setSendLevel(0, MixerOutput::MainOutput, 0.4f);
mixer->setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f); mixer->setSendLevel(0, MixerOutput::FX_Reverberator, 1.0f);
mixer->setReturnLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.6f); mixer->setFXSendLevel(MixerOutput::FX_Reverberator, MixerOutput::MainOutput, 0.6f);
mixer->getReverberator()->setMute(false); mixer->getReverberator()->setMute(false);
mixer->getReverberator()->setInputGain(0.35); mixer->getReverberator()->setInputGain(0.35);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 791 KiB

After

Width:  |  Height:  |  Size: 760 KiB

Loading…
Cancel
Save