Desarrollo de plugins de audio: Gain

0 de 3 lecciones completas (0%)

Aumentando el volumen del audio

Aunque más adelante, veremos la mejor manera de ir programando nuestro puglin de audio, generalmente, al principio, lo que nos interesa es ver como podemos modificar directamente la señal de audio.

En esta lección vamos a hacer precisamente eso. Nos saltaremos por ahora el proceso estandar, y vamos a hacer que nuestro plugin aumente el volumen del audio directamente (sin interfaz visual ni nada), simplemente vamos a hacer que al insertar nuestro plugin, cambie el volumen del audio directamente.

Bueno, vamos a abrir el proyecto y para eso vamos a la carpeta donde tenemos nuestro Projucer, en mi caso

Al abrirlo, normalmente, nos abre el último proyecto usado, en nuestro caso de Gain, y lo podemos ver aqui:

Si no es ese el proyecto que está abierto, lo abrimos desde:

Y buscamos donde tengamos el proyecto guardado.

En fin, una vez lo tengamos cargado, abrimos el editor de código Visual Studio Community

Con el proyecto abierto vamos al archivo:

Como una explicación rápida que luego veremos con más detalle en los dos archivos que se llaman PluginEditor, será donde pongamos toda la parte visual de nuestro plugin, y en los dos archivos que se llaman PluginProcessor, vamos a modificar la señal de audio de nuestro plugin.

Como lo que en principio vamos a modificar es solo el sonido, entonces abrimos el archivo PluginProcessor.cpp (el PluginProcessor.h veremos más adelante para que sirve)

Dentro del archivo buscamos donde aparezca processBlock

Dentro de este método nuestra señal de audio la encontramos donde pone channelData. A partir de aquí vamos a empezar a modificar la señal de audio

Primero vamos a definir la cantidad de «volumen» que vamos a aumentar. Luego iremos introduciendo términos más correctos, pero lo digo así para que nos entendamos todos.

Como ejemplo vamos a multiplicar la señal de audio por dos. Esto se traduce en que cuando activemos el plugin en el DAW, la señal aumentará 6dB. No os preocupéis, más adelante veremos por que ocurre esto (id estudiando los logaritmos xD).

Hablando en código, primero vamos a definir el parámetro donde pondremos el número por el cual multiplicaremos la señal, en este caso 2 y le llamaremos inGain

Como vemos en el código anterior, float define el tipo de parámetro en este caso un número decimal, inGain define el nombre del parámetro para usarlo luego, y 2.0f, es la cantidad por la cual multiplicaremos la señal que sería 2.

Ahora necesitamos obtener el numero de canales de nuestro audio, generalmente son 1 (mono) o 2 (estéreo), aunque podrían ser más, ya lo explicaremos más adelante. Como veremos en el código siguiente lo llamaremos numSamples:

Y ahora lo que nos queda es iterar sobre numSamples, y multiplicar la señal de audio channelData de cada canal por el valor que hemos definido en inGain (en este caso inGain = 2)

Bien!.

Ahora vamos a generar nuestro plugin y lo abrimos en Reaper a ver que pasa.

Simplemente como recordatorio:

Vamos a las propiedades del VST3:

Luego

Ahora, vamos compilarlo

Una vez lo hemos compilado, ya nos queda abrir Reaper. Creamos una pista, añadimos un generador de tono y luego nuestro plugin. Al añadir nuestro plugin, nos damos que cuenta que el volumen del audio aumenta 6dB, eso significa que está todo ok.

Como podemos ver, sin añadir nuestro plugin el nivel de señal es de -12 dB

Y cuando añadimos nuestro plugin sube a -6dB

Esto funciona!!. Pero…

Realmente lo que hemos programado es que la señal original se multiplicase por 2, pero ahora mismo solo está subiendo 6 dB. Precisamente eso es lo que tiene que hacer, recuerda que el nivel se señal se mide en dB que es una magnitud logarítmica y relativa, pero no te preocupes más adelante veremos matemáticamente por qué ocurre esto.

Bueno, por hoy lo dejamos aquí, parece una tontería pero ya hemos podido modificar la señal original al insertar nuestro plugin. En la próxima clase vamos a añadir un control en nuestro plugin para poder escoger el nivel de señal que queremos aumentar.

Nos vemos!!