mirror of https://github.com/probonopd/MiniDexed
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.
116 lines
2.8 KiB
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);
|
|
}
|
|
|