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

113 lines
2.6 KiB

/*
* Base AudioEffect interface
* Javier Nonis (https://github.com/jnonis) - 2024
*/
#include <circle/logger.h>
#include "effect_base.h"
LOGMODULE ("AudioEffect");
AudioEffect::AudioEffect(float32_t samplerate)
{
this->samplerate = samplerate;
}
AudioEffect::~AudioEffect()
{
}
void AudioEffect::setBypass(bool bypass)
{
this->bypass = bypass;
}
bool AudioEffect::getBypass()
{
return bypass;
}
unsigned AudioEffect::getId()
{
return EFFECT_NONE;
}
void AudioEffect::setParameters(std::vector<unsigned> params)
{
for (size_t i = 0; i < params.size(); i++)
{
this->setParameter(i, params[i]);
}
}
std::vector<unsigned> AudioEffect::getParameters()
{
size_t len = getParametersSize();
std::vector<unsigned> params;
for (size_t i = 0; i < len; i++)
{
params.push_back(getParameter(i));
}
return params;
}
void AudioEffect::process(const float32_t* inblock, float32_t* outblock, uint16_t len)
{
// Mono process
// Dummy buffer for right channel
float32_t dummyBuffer[len];
memset(dummyBuffer, 0, len * sizeof(float32_t));
process(inblock, dummyBuffer, outblock, dummyBuffer, len);
}
void AudioEffect::process(const float32_t* inblockL, const float32_t* inblockR, float32_t* outblockL, float32_t* outblockR, uint16_t len)
{
if (bypass) {
if (inblockL != outblockL)
{
memcpy(outblockL, inblockL, len * sizeof(float32_t));
}
if (inblockR != outblockR) {
memcpy(outblockR, inblockR, len * sizeof(float32_t));
}
/*
if (inblockL != outblockL || inblockR != outblockR) {
// if input and output buffers are different we should copy the content
for (uint16_t i=0; i < len; i++)
{
outblockL[i] = inblockL[i];
if (inblockL == inblockR) {
outblockR[i] = inblockL[i];
}
else
{
outblockR[i] = inblockR[i];
}
}
}
*/
return;
}
doProcess(inblockL, inblockR, outblockL, outblockR, len);
}
void AudioEffect::doProcess(const float32_t* inblockL, const float32_t* inblockR, float32_t* outblockL, float32_t* outblockR, uint16_t len) {
}
AudioEffectNone::AudioEffectNone(float32_t samplerate) : AudioEffect(samplerate)
{
setBypass(true);
}
AudioEffectNone::~AudioEffectNone()
{
}
void AudioEffectNone::doProcess(const float32_t* inblockL, const float32_t* inblockR, float32_t* outblockL, float32_t* outblockR, uint16_t len)
{
}
unsigned AudioEffectNone::getId()
{
return EFFECT_NONE;
}