Intenta hacerte con el "Digital Signal Processing" de Oppeheim... la Biblia!!! (aunque requiere "algunos" conocimientos previos)
Matlab lleva unas toolboxes de miedo. ¿Quizás sirva?
El Oppenheim muy bueno si señor. Aunque quizás sea demasiado profundo para lo que aquí se plantea. Es un libro de tratamiento digital de señales en general. Seguro que hay cosas mas sencillas para escribir DSP's de audio basados en VST.
No crees ?
Hombre, si lo que realmente quieres es sobrevivir en el mundo del procesado, apréndete de memoria lo que es una convolución y ya sólo tienes que descargarte coeficientes de filtros y convolucionarlos con las señales. Así no es necesario saber qué hace cada filtro, pierde el 90% de su gracia, pero cuando escuchas un sonido filtrado por tí mismo... no hay palabras. Y si te abuerres de procesado, recurre a la realidad que es mucho más directa: condesador en paralelo con potenciómetro y filtro paso bajo al canto!!! Y nada de digitalización XDDDD
Lo mejor para empezar es dejar de lado filtros y demás y centrarte en hacer un simple amplificador:
y[n]=g·x[n]
Ya está. Parece poca cosa, no? Pero el asunto empieza a tener sus problemas. Por ejemplo, qué hacer cuando se amplifica por encima de la saturación? Se emplea recorte digital o algún tipo de emulación de semiconductores o válvulas? Y qué pasa cuando en vez de amplificar se atenúa? Y si se atenúa por un factor no múltiplo de 2, qué tipo de redondeo introduces para minimizar el ruido? Y cuando se amplifica por un factor con decimales?
Una vez que hayas resuelto estos problemas el paso siguiente puede ser convertir tu amplificador en un lfo de amplitud. Modula la amplitud de la señal de entrada con otra señal simple (sinusoide, cuadrada, etc...):
y[n]=g[n]·x[n]
donde g[n] es la señal moduladora. Puedes permitir que se manipulen algunos parámetros como la frecuencia de la señal, la profundida de modulación, etc...
Partiendo de esto, puedes intentar que ahora la moduladora sólo comience a funcionar cuando la señal supere un determinado umbral de amplitud o nivel y que sólo se module durante un ciclo de la moduladora. Sería un Lfo disparado por amplitud.
El siguiente paso es convertir tu lfo en una puerta de ruido. Ahora, en vez de ser una señal simple la que se dispara al superar un determinado nivel, lo que se dispara es una envolvente. Puedes distinguir varias etapas, aunque lo más sencillo es comenzar con un puerta pura y dura. Cuando se supera un nivel se amplifica (o se mantiene el nivel) pero cuando se cae por debajo de ese nivel, no sale nada.
y[n]=g·x[n] si el nivel es superior al umbral y
y[n]=0 si el nivel es inferior.
La cuestión ahora es, qué es el nivel de una señal? Pues en vez de trabajar directamente con el valor de la forma de onda x[n] que oscila mucho, podemos intentar obtener otro valor que también sea representativo de la señal pero que se mantenga estable en un determinado intervalo. A ese intervalo se le llama tiempo de integración y suele variar según el tipo de aplicación a que se destine. El nivel se obtiene del cuadrado del valor eficaz de la señal: xef^2=1/k·(x[n]^2+x[n+1]^2+x[n+2]^2+...+x[n+k-1]^2), que es la suma de k muestras de x[n] elevadas al cuadrado. Una vez obtenido el valor eficaz se pasa de magnitud lineal a logarítmica (dB) haciendo: L=10log(xef^2/xref^2) donde xref es un valor de referencia que en digital se considera como la ampltid de corte, saturación o clipping, que es lo mismo, y que vale 2^(B-1), donde B es el número de bits que ocupa cada muestra de audio. El -1 es porque respresentamos muestras positivas y negativas. Ahora ya puedes expresar el nivel de la señal, e includo hacer un picómetro.
Los siguientes refinamientos que pordías hacerle a la puerta es que se abriese con suavidad, emplenado algún tipo de envolvente simple, como un ASR (ataque, sostenimiento y desvanecimiento), lo que evitará que oigas clicks cuando tu puerta se abra y se cierre.
Y con esto creo que puedes empezar a meterte en el procesado de la dinámica. El siguiente paso serían los compresores y limitadores, que puedes realizar modificando esa puerta de ruido. Otro paso inportante es dispararlos no con la propia señal sino con otra, que puede ser la misma pero filtrada o, incluso, otra señal distinta.
Si te pones a hacer algo de esto, ya tienes para rato, y creo que he sido un poco más simple que Oppenheim, por lo menos para empezar.
El SDK (Software Development Kit o Plataforma de desarrollo en "castellano") de VST son un par de ZIPs con fuentes para cada uno de los sistemas operativos en que están disponibles hosts VST: Windows, MacOS, BeOS y IRIX. Que yo sepa Cubase sólo sale para los dos primeros, pero supongo que habrá alguna empresa que se dedique sobre todo al sector SGI, aunque BeOS no lo encuentro muy práctico.
En qué consiste en SDK? Pues en todo y a la vez en nada. Es decir. Tienes documentación, las librerías fundamentales y las definiciones de estructuras y objetos básicos (a fin de cuentas un plugin VST es un código ejecutable que se manipula a través de un objeto, dinámicamente). También viene ejemplos, entre ellos AGain.dll que es precisamente un módulo que funciona como un amplificador digital. Por eso planteaba esa progresión. Empezar con un ampli e irle añadiendo "cosillas", luego ya se puede uno empezar a complicar. Realmente hacer un efecto es "relativmente" fácil en VST pues la ventaja de esta arquitectura de plugins es que te permite olvidarte del interfaz gráfico, pues los host VST tienen la obligación de cargar un interfaz estándar si no existe GUI propio en el plougin. De hecho muchos VSTs tienen dos editores, el estándar y el propio.
Geizer, no estoy muy de acuerdo contigo en que lo primero sea meterse con transformadas. Creo que es importante manejar bien conceptos como la función en el tiempo y demás. Incluso te diría que es posible olvidarse de las transformadas y trabajr en el tiempo con convoluciones. Trabajar con números complejos no es nada fácil y requiere una buena dosis de abstracción. Y meterse en el mundo de la síntesis también tiene lo suyo. En cuanto trabajas con filtros tienes que empezar a calcular posibles retardos, esperar a que se llenen los bufferes de entrada que te va proporcionando el host y devolverlos justo en el momento adecuado, y también la sincronía MIDI entre la aplicación y el VST tiene lo suyo.
En cuanto a herramientas, pues un compilador es lo único imprescindible. En Windows se puede usar Visual C++. Yo intenté hacerlo con Bloodshed que es gratuito y me encontré con tal cantidad de errores que pasé de investigar. Los ficheros de muestra están para Visual C++. Luego te puede venir bien algún tipo de software de simulación y tratamiento matemático, para diseñar filtros y algoritmos, porque esperar a compilar y luego a cargar el plugin pra ver si está bien diseñado, es un auténtico infierno. Y por último, si decides hacerte tu propio GUI, cosa que tiene su miga, pues alguna aplicación tipo Photoshop, o específicas para diseñar botones rotatorios.