Este post también esta disponible en: Inglés

Ayer estuve mostrando un poco de como usar el framework CLAM para prototipar aplicaciones de procesamiento en tiempo real de audio de forma rápida y sencilla.
Empezamos con una red de ejemplo para mostrar un poco el NetworkEditor: karaoke.clamnetwork

Luego seguimos con el plugin “distorsión de diodo”.
Especificamos y generamos el código base asi:

Escribimos este código:
bool Do()
{
bool result = Do( mEntrada.GetAudio(), mSalida.GetAudio() );
mEntrada.Consume();
mSalida.Produce();
return result;
}
bool Do(const Audio& in, Audio& out)
{
int size = in.GetSize();
const DataArray& inb = in.GetBuffer();
DataArray& outb = out.GetBuffer();
for (int i=0;i<size ;i++)
{
if ( fabs(inb[i])>0.8 )
outb[i] = inb[i]<0.? -0.8:0.8;
else
outb[i] = inb[i];
}
return true;
}
</size>
{
bool result = Do( mEntrada.GetAudio(), mSalida.GetAudio() );
mEntrada.Consume();
mSalida.Produce();
return result;
}
bool Do(const Audio& in, Audio& out)
{
int size = in.GetSize();
const DataArray& inb = in.GetBuffer();
DataArray& outb = out.GetBuffer();
for (int i=0;i<size ;i++)
{
if ( fabs(inb[i])>0.8 )
outb[i] = inb[i]<0.? -0.8:0.8;
else
outb[i] = inb[i];
}
return true;
}
</size>
Y armamos una red para probarlo:

El código del plugin listo para compilar esta aca: pluginDistorsiónDiodo_ClubAudioFiuba.tar.gz
Como extra, en pluginDistorsiónDiodoConControlDeClipping_ClubAudioFiuba.tar.gz dejo la misma distorsión de diodo pero con un control para poder manejar el umbral de clipping mientras se reproduce.
English
Español