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_talreverb3.cpp

124 lines
3.9 KiB

/*
* Tal Reverb 3 Port
* Ported from https://github.com/DISTRHO/DISTRHO-Ports/tree/master/ports-juce5/tal-reverb-3
*
* Javier Nonis (https://github.com/jnonis) - 2024
*/
#include <circle/logger.h>
#include "effect_talreverb3.h"
LOGMODULE ("fx talreverb3");
AudioEffectTalReverb3::AudioEffectTalReverb3(float32_t samplerate) : AudioEffect(samplerate)
{
this->engine = new ReverbEngine(samplerate);
this->params = this->engine->param;
this->setParameter(AudioEffectTalReverb3::Param::DRY, 50);
this->setParameter(AudioEffectTalReverb3::Param::WET, 23);
this->setParameter(AudioEffectTalReverb3::Param::DECAYTIME, 42);
this->setParameter(AudioEffectTalReverb3::Param::PREDELAY, 0);
this->setParameter(AudioEffectTalReverb3::Param::LOWSHELFGAIN, 89);
this->setParameter(AudioEffectTalReverb3::Param::HIGHSHELFGAIN, 33);
this->setParameter(AudioEffectTalReverb3::Param::STEREO, 100);
this->setParameter(AudioEffectTalReverb3::Param::REALSTEREOMODE, 1);
this->setParameter(AudioEffectTalReverb3::Param::POWER, 1);
}
AudioEffectTalReverb3::~AudioEffectTalReverb3()
{
delete this->engine;
}
void AudioEffectTalReverb3::initializeSendFX()
{
this->setParameter(AudioEffectTalReverb3::Param::DRY, 0);
this->setParameter(AudioEffectTalReverb3::Param::WET, 50);
}
void AudioEffectTalReverb3::setParameter(unsigned param, unsigned value)
{
this->params[param] = value;
switch (param)
{
case AudioEffectTalReverb3::Param::BYPASS:
this->setBypass(value == 1);
break;
case AudioEffectTalReverb3::Param::WET:
this->engine->setWet((float) value / 100.0f);
break;
case AudioEffectTalReverb3::Param::DRY:
this->engine->setDry((float) value / 100.0f);
break;
case AudioEffectTalReverb3::Param::DECAYTIME:
this->engine->setDecayTime((float) value / 100.0f);
break;
case AudioEffectTalReverb3::Param::PREDELAY:
this->engine->setPreDelay((float) value / 100.0f);
break;
case AudioEffectTalReverb3::Param::LOWSHELFGAIN:
this->engine->setLowShelfGain((float) value / 100.0f);
break;
case AudioEffectTalReverb3::Param::HIGHSHELFGAIN:
this->engine->setHighShelfGain((float) value / 100.0f);
break;
case AudioEffectTalReverb3::Param::STEREO:
this->engine->setStereoWidth((float) value / 100.0f);
break;
case AudioEffectTalReverb3::Param::REALSTEREOMODE:
this->engine->setStereoMode((float) value);
break;
case AudioEffectTalReverb3::Param::POWER:
this->engine->setPower((float) value);
break;
default:
break;
}
}
unsigned AudioEffectTalReverb3::getParameter(unsigned param)
{
switch (param)
{
case AudioEffectTalReverb3::Param::BYPASS:
return this->getBypass() ? 1 : 0;
case AudioEffectTalReverb3::Param::WET:
case AudioEffectTalReverb3::Param::DRY:
case AudioEffectTalReverb3::Param::DECAYTIME:
case AudioEffectTalReverb3::Param::PREDELAY:
case AudioEffectTalReverb3::Param::LOWSHELFGAIN:
case AudioEffectTalReverb3::Param::HIGHSHELFGAIN:
case AudioEffectTalReverb3::Param::STEREO:
case AudioEffectTalReverb3::Param::REALSTEREOMODE:
case AudioEffectTalReverb3::Param::POWER:
return params[param];
default:
return 0;
}
}
void AudioEffectTalReverb3::doProcess(const float32_t* inblockL, const float32_t* inblockR, float32_t* outblockL, float32_t* outblockR, uint16_t len)
{
int numberOfChannels = 2;
if (inblockL == inblockR) {
numberOfChannels = 1;
}
for (size_t i = 0; i < len; i++)
{
if (numberOfChannels == 2)
{
outblockL[i] = inblockL[i];
outblockR[i] = inblockR[i];
}
else
{
outblockL[i] = inblockL[i];
outblockR[i] = inblockL[i];
}
engine->process(&outblockL[i], &outblockR[i]);
}
}