You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
MiniDexed/src/effect_chorus.cpp

116 lines
2.8 KiB

#include <circle/logger.h>
#include "effect_chorus.h"
LOGMODULE ("fx chorus");
AudioEffectChorus::AudioEffectChorus(float32_t samplerate) : AudioEffect(samplerate)
{
engine = new ChorusEngine(samplerate);
engine->setEnablesChorus(true, true);
engine->setChorus1LfoRate(5.0f / 10.0f);
engine->setChorus2LfoRate(8.3f / 10.0f);
}
AudioEffectChorus::~AudioEffectChorus()
{
delete engine;
}
unsigned AudioEffectChorus::getId()
{
return EFFECT_CHORUS;
}
void AudioEffectChorus::setParameter(unsigned param, unsigned value)
{
switch (param)
{
case AudioEffectChorus::Param::BYPASS:
this->setBypass(value == 1);
break;
case AudioEffectChorus::Param::CHORUS_I_ENABLE:
this->setChorusI(value);
break;
case AudioEffectChorus::Param::CHORUS_II_ENABLE:
this->setChorusII(value);
break;
case AudioEffectChorus::Param::CHORUS_I_RATE:
this->setChorusIRate(value);
break;
case AudioEffectChorus::Param::CHORUS_II_RATE:
this->setChorusIIRate(value);
break;
default:
break;
}
}
unsigned AudioEffectChorus::getParameter(unsigned param)
{
switch (param)
{
case AudioEffectChorus::Param::BYPASS:
return this->getBypass() ? 1 : 0;
case AudioEffectChorus::Param::CHORUS_I_ENABLE:
return this->getChorusI();
case AudioEffectChorus::Param::CHORUS_II_ENABLE:
return this->getChorusII();
case AudioEffectChorus::Param::CHORUS_I_RATE:
return this->getChorusIRate();
case AudioEffectChorus::Param::CHORUS_II_RATE:
return this->getChorusIIRate();
default:
return 0;
}
}
void AudioEffectChorus::doProcess(const float32_t* inblockL, const float32_t* inblockR, float32_t* outblockL, float32_t* outblockR, uint16_t len)
{
for (uint16_t i=0; i < len; i++)
{
outblockL[i] = inblockL[i];
outblockR[i] = inblockR[i];
engine->process(&outblockL[i], &outblockR[i]);
}
}
unsigned AudioEffectChorus::getChorusI()
{
return engine->isChorus1Enabled;
}
void AudioEffectChorus::setChorusI(unsigned enable)
{
engine->setEnablesChorus(enable == 1, engine->isChorus2Enabled);
}
unsigned AudioEffectChorus::getChorusII()
{
return engine->isChorus2Enabled;
}
void AudioEffectChorus::setChorusII(unsigned enable)
{
engine->setEnablesChorus(engine->isChorus1Enabled, enable == 1);
}
unsigned AudioEffectChorus::getChorusIRate()
{
return (int) roundf(engine->chorus1L->rate * 100);
}
void AudioEffectChorus::setChorusIRate(unsigned int rate)
{
engine->setChorus1LfoRate(((float) rate) / 100.0f);
}
unsigned AudioEffectChorus::getChorusIIRate()
{
return (int) roundf(engine->chorus2L->rate * 100);
}
void AudioEffectChorus::setChorusIIRate(unsigned int rate)
{
engine->setChorus2LfoRate(((float) rate) / 100.0f);
}