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!

Roberto Aramburu
EL AUTOR

Roberto es una criatura que siente curiosidad sobre todo aquello a lo que la gente llama sonido, audio, programación, electrónica DIY y hacking.

¿Te gustó este artículo?
31
Comentarios
  • #1 por flutisto el 08/09/2014
    Fantástico, muchas gracias.
  • #2 por rvperez el 08/09/2014
    Gracias
  • #3 por RMartin el 08/09/2014
    Muy interesante! Gracias Roberto!
  • #4 por angelmus el 08/09/2014
    Hola Roberto, te cuento que entré curioso por el tema y al leer las primeras líneas, me preocupé mas por que te repongas de ese vacío emocional.
    No es cierto que tus pesares no sean de nuestro interés [-X

    Trabaja, distráete y deja al paso del tiempo y a la potencial llegada de nuevos/as compañeros/as de Viaje la superación de ello.

    La Vida, el Universo, continúan su expansión y nuevas realizaciones se sumarán a tu experiencia.

    Lo mejor para ti !!!
    Abrazo y Adelante. :birras:
    4
  • avatar
    #5 por --117771-- el 08/09/2014
    Hola angelmus, muchas gracias por tus palabras pero realmente fue un chiste malo y en realidad las cosas comienzan a fluir ;)
    Saludos a todos y gracias por tomarse el tiempo de leer.
    1
  • #6 por the_can_opener el 08/09/2014
    ya me parecía que eso de estar soltero no podía deprimir a nadie...
    2
  • avatar
    #7 por --117771-- el 08/09/2014
    jajajajaja :D
  • #8 por Nico Auvieux el 09/09/2014
    Muy bueno, gracias Roberto!!!
    Una sola consultita, como se llama el objeto que te muestra la onda en PD, es de alguna librería especial?

    Desde ya muchas gracias y a esperar el próximo!

    Saludos
  • avatar
    #9 por --117771-- el 09/09/2014
    Hola Nico, el objeto que muestra la onda en Pd se llama [scope~]. Yo estoy usando Pd-extended por lo tanto ya viene instalado en las librerías.
    1
  • avatar
    #10 por --430038-- el 09/09/2014
    gracias por el aporte, siempre he querido aprender a manejar el max, a ver si poco a poco nos vamos soltando.
  • #11 por the_can_opener el 09/09/2014
    Al final por hacer el chiste tonto se me olvidó agradecer el aporte y el hilo. Muy bueno!
  • avatar
    #12 por --117771-- el 09/09/2014
    No te preocupes the_can_opener, igual me hizo reír bastante. Gracias!
  • #13 por trotz el 09/09/2014
    Hola,

    Para síntesis aditiva en Reaktor con control de freq/amp y fase para cada parcial, lo mejor es usar el módulo Sine Bank, aunque tiene el inconveniente de ser un poco complejo de implementar ya que requiere el uso de Iterator y una Tabla de Eventos.
    Hay un tutorial aquí: http://youtu.be/FDCuzRJkYj4

    Saludos,
  • #14 por gutik el 11/09/2014
    hola esta bueno tu articulo, solamente te faltaba utilizar el Audulus :-P
  • #15 por gutik el 11/09/2014
    Aqui esta mi ejemplo en Audulus de una Onda Cuadrada
    thump_9069680sintesis-aditiva-aud.jpg
  • avatar
    #16 por --117771-- el 11/09/2014
    Bueno también me faltó ChucK y Csound, tal vez hubiera sido buena idea meter Csound pero no se si existan Hispasonicos que lo quieran usar...
    Esta es la primera vez que escucho hablar sobre Audulus.
  • #17 por Optimuff Prime el 20/09/2014
    No he utilizado jamás ninguno de esos programas, ni he programado nada parecido (me sacas de los rudimentos de MS2 y ya no sé ni mi nombre... :desdentado: ). Sin embargo, he encontrado el artículo super interesante y didáctico, y un comienzo cojonudo para meter el gusanillo en el cuerpo para invitar a profundizar en el tema.
    Muchas gracias por el currele! (Y me alegro que haya quedado atrás ese tropezón. :birras: )