30/6/10

Reverb Effect

My first contact with the digital audio, a work done during my academic studies. Basically it was to implement the audio processing illustrated below.



If we study this scheme can be seen that the stereo input signal is converted to mono and that there isn't any output branch. That's because the output is a linear combination of the different nodes of the scheme, each of them delayed a number of samples.

Left channel output
float outputL = null;
outputL = scale_factor * NODE1[266];
outputL += scale_factor * NODE1[2974];
outputL -= scale_factor * NODE2[1913];
outputL += scale_factor * NODE3[1996];
outputL -= scale_factor * NODE4[1990];
outputL -= scale_factor * NODE4[187];
outputL -=
scale_factor * NODE5[1066];

Right channel output
float outputR = null;
outputR = scale_factor * NODE6[353];
outputR += scale_factor * NODE6[3627];
outputR -= scale_factor * NODE4[1228];
outputR += scale_factor * NODE5[2673];
outputR -= scale_factor * NODE1[2111];
outputR -= scale_factor * NODE2[335];
outputR -= scale_factor * NODE3[121];


Listening the code


All this stuff has no sense without any actual implementation in reality.

Here you can listen a piece of an original composition, without the effect applied.


And finally here is the same piece of song with the reverb applied. Sometimes you hear a very annoying background noise, but to be my first effect (about year 2003) I am satisfied.


You can download source code an read more about here.





4 comentarios:

  1. Hola, se entiende todo sin problema pero tengo algunas dudillas tontas. Para empezar, ¿por qué sumas unos nodos y restas otros? ¿Es un ajuste de fase de algún tipo?
    También veo que hay muchos retardos de un número grande de muestras (Z^-3720 por ejemplo). Comprendo que estos valores han salido de algún cálculo y sospecho que este cálculo sólo funcionará para una frecuencia de muestreo determinada. Estos valores cambiarían al cambiar esta frecuencia de muestreo. ¿No?

    PD: Un saludo y ánimo con el blog.

    ResponderEliminar
  2. Hola Gadelan, antes de nada gracias por el comentario y el apoyo.

    Tienes toda la razón con respecto a la frecuencia de muestreo y los retardos. Releyendo el artículo original en que me basé (gracias por el enlace), la frecuencia de muestreo óptima para dicho esquema es de 29,7 KHz con lo cuál debería ser posible reajustar los retardos para otras frecuencias de muestreo.

    Ahora que tengo acceso al artículo original me gustaría revisar el efecto en su totalidad e integrarlo con otro proyecto que tengo entre manos.

    PD: Muy interesante el manantial de bits.

    ResponderEliminar
  3. Vaya. Estuve leyendo el artículo y no me enteré de lo de 29,7 kHz. Supongo que cada día estoy más tonto. Gracias por la aclaración.

    PD: Este blog también promete. Te voy a enlazar desde el mío si no te importa, claro.

    ResponderEliminar
  4. Por supuesto que no me importa, al contrario. Yo hare lo propio con el manantial de bits.

    ResponderEliminar