Informática musical

Síntesis aditiva aplicada a lenguajes de programación

¡Qué tal, mis queridos hispasonicos!

Una disculpa por la demora, pero he estado encerrado en la vida universitaria y tratando de evitar la depresión —por aquello de estar soltero después de lo que fue la mejor relación que he tenido—. Pero como sé que eso a ustedes realmente no les interesa, vamos a lo que nos concierne.

He estado leyendo sus comentarios y veo que me han pedido no utilizar Max. Antes que nada les aviso que sí voy a usar Max, pero trataré de darle un giro a estos tutoriales para reforzar lo que escribí en mi primer artículo, que trata sobre el concepto de programación, y les voy a dar gusto (o hacer enojar, dependiendo del caso) a los usuarios de Pd (en su versión extended), SuperCollider y Reaktor también. La razón de esto es que además de agregarle un plus a estos tutoriales, quiero poner fin a la pregunta "¿qué suena mejor?" y explorar si es que se trata del programa o del programador.

Como dije anteriormente, habrá técnicas que son más fáciles de implementar en un lenguaje de programación que otro debido al diseño. La responsabilidad, según mi teoría, debe de caer sobre quien está detrás de la pantalla y no en el cerebro dentro de la máquina. Finalmente quisiera recalcar que yo estoy acostumbrado a programar en Max y Pd, por lo cual siempre verán maneras de optimizar el código en los otros dos lenguajes, así que si lo notan, por favor haganmelo saber en los comentarios.

Comencemos por repasar unos conceptos que son esenciales para seguir adelante. El sonido cuenta con propiedades cuantificables que en la juerga ingenieril llamamos amplitud, frecuencia, timbre y fase, y todos los que no son ingenieros conocen como volumen, altura y color o textura. La fase es imperceptible a menos que esté en relación con otro sonido y se identifica en muchos casos como fluctuaciones en amplitud (volumen).

  • Amplitud: Responde a qué tan fuerte o tan suave suena algo. En términos más específicos es la medida de desplazamiento máximo de una señal entre su punto de equilibrio y el punto más alejado en el eje Y (rango de la función), hablando de señales periódicas.
  • Frecuencia: Responde a qué tan grave o agudo suena algo, o que tan rápido o tan lento se mueve la membrana de una bocina. En términos más específicos es la medida de la cantidad de ciclos por segundo (Hz). Un ciclo se refiere a la trayectoria completa que abarca una compresión y una rarefracción de una señal.
  • Fase: podemos decir (gracias Wikipedia) que es la situación instantanea en el ciclo, o que se trata del lugar en el que empieza a fluctuar la onda, medida en el eje de las X en grados o radianes. Para una explicación un poco más detallada, pueden ir a este enlace también escrito por su servidor.
  • Timbre: se refiere al contenido de componentes frecuenciales de un sonido. Esto se remonta a nuestro amigo Fourier quien, a muy grandes rasgos, decía que un sonido podía ser dividido en componentes senoidales con diferente frecuencia, fase y amplitud.

Para el proposito de este tutorial vamos a enfocarnos a sonidos simples, sumando sinusoides para la reconstrucción de formas de onda típicas con la finalidad de enfocarnos en el impacto que tiene la frecuencia y la amplitud en la textura de un sonido.

Antes de pasar a esto hay dos conceptos más que hay que saber.

  • Frecuencia fundamental: Es por lo general, la frecuencia más baja y con mayor amplitud en un sonido periódico, existen otros casos pero por el momento solo veremos este.
  • Armónicos: son componentes frecuenciales que se derivan de la fundamental. La relación entre estos y la frecuencia fundamental van a determinar la textura resultante. Si la frecuencia de los armónicos es un múltiplo entero, el sonido tiende a ser estable. De lo contrario, si los armónicos son un número flotante, el sonido tiende a ser "ruidoso" o metálico como veremos más adelante. Al decir "estable" me refiero unicamente en términos físicos que no tienen nada que ver con el gusto personal del artista, creador, diseñador sonoro, dj, etc.

IMPORTANTE: Dado que yo hago el esfuerzo de programar en diferentes lenguajes, les pido de favor que no me crean y verifiquen si estoy en lo correcto. El sonido debe de ser idéntico en cualquiera de estos lenguajes de programación. Otra cosa que tengo que recalcar es que, al momento de visualizar las formas de onda cuadradas, triangulares y diente de sierra, no se ven geométricamente perfectas debido a que estoy usando un número limitado de armónicos y sus fases en algunos casos. Si gustan hacer la prueba y añadir un mayor número de armónicos, la representación en el osciloscopio se acercará cada vez más a una representación geometricamente perfecta de la forma de onda que estamos tratando de construir.

Comencemos.

Existen cuatro formas de onda:

Onda senoidal: Es un sonido puro, por lo tanto carece de armónicos.

En Max, una senoidal a 440 Hz:

Max, senoidal a 440 Hz

En Pd, una senoidal a 440 Hz:

Senoidal 440 hz Pd

En SuperCollider:

Senoidal

En Reaktor 5:

Senoidal Reaktor

Dentro de Max y Pd, los objetos que supuestamente son senoidales, en realidad son cosenos. Esto no afecta el sonido ya que las dos son formas de onda puras y periódicas identicas, solo que su fase es diferente. Los senos comienzan en 0 grados y los cosenos en 90 grados.

Es por esto que si van a sus calculadoras y teclean coseno de cero les dará el valor 1, y si ponen seno de cero, les dara el valor 0.

Onda cuadrada: La onda cuadrada se compone por su fundamental (F) más todos los armónicos enteros impares posibles, es decir 3*F, 5*F, 7*F, 9*F, 11*F... n*F y su amplitud (A) que decrece inversamente proporcional a la frecuencia de los armónicos impares, es decir A/3, A/5, A/7, A/9, A/11,... A/n por lo tanto:

Onda cuadrada = (F, A) + (F3, A/3) + (F5, A/5) + (F7, A/7) + (F9, A/9) + ... (Fn, A/n)

En Max: (nota: como el objeto cycle~ es una función coseno y su fase comienza en 90º, hay que moverle la fase a 0.25. Si no se hace esto la forma de onda no se verá correctamente en el osciloscopio o plotter, aunque la textura sea la misma de una onda cuadrada.)

onda cuadrada

En Pd (igual, mover fase a 0.25)

En SuperCollider:

En Reaktor debo decir que batallé hasta dar con el oscilador Sine 4x que más o menos me dejó visualizar una onda cuadrada, ya que no encontré osciladores en donde pudiera mover la fase. Aún así, el sonido debe de ser el mismo dado que los componentes frecuenciales y las amplitudes tienen los mismos valores:

Onda triangular: Al igual que la onda cuadrada, ésta cuenta con componentes frecuenciales enteros impares multiplos de la Fundamental (F). La diferencia es que sus amplitudes (A) decrecen más rapido ya que el divisor se eleva al cuadrado. Por lo tanto:

Onda triangular = (F, A) + (F2, A/2^2) + (F3, A/3^2) + (F4, A/4^2) + (F5, A/5^2) + ... (Fn, A/n^2)

Ahora, al momento de "plottear" o verlo en el osciloscopio es necesario usar senos y cosenos, las amplitudes de los armónicos 3, 7, 11, 15 y así de 4 en 4 se ponen negativas, extrañamente en Max y Pd no fue el caso, solo en SuperCollider y Reaktor, aún así si se respeta la relación de frecuencias y amplitudes sin hacer esto debería de sonar "triangular".

En Max:

Onda triangular

En Pd:

En SuperCollider:

En Reaktor:

Onda diente de sierra: Al contrario de la senoidal, la onda diente de sierra se compone de su Frecuencia fundamental (F) todos los armónicos enteros posibles, es decir 2*F, 3*F, 4*F, 5*F,... nF y su amplitud (A) que decrece inversamente proporcional a la frecuencia de los armónicos es decir A/2, A/3, A/4, A/5,... A/n es decir:

Diente de Sierra = (F, A) + (F2, A/2) + (F3, A/3) + (F4, A/4) + (F5, A/5) + ... (Fn, A/n)

En Max:

En Pd:

En SuperCollider:

En Reaktor:

El propósito de todo esto, como dije anteriormente, no es ponernos a construir osciladores que ya existen, sino ver cuánto impacta a la textura de un sonido la relación de sus armónicos con la fundamental, y teniendo en cuenta esto podemos pasar a experimentar, a hacer sonidos que nos parezcan interesantes, e incluso romper las reglas precisamente modulando estos parámetros. Pero eso lo veremos en la parte 2.

Quejas, dudas y comentarios serán bien recibidos para el futuro de estos tutoriales.

¡Experimenten!

¿Te gustó este artículo?
31
Comentarios

Regístrate o para poder comentar