08 May 2019

Entorno Sonoro

Una exploración detallada de la construcción del entorno sonoro y las posibilidades sonoras que ofrece.

El ambiente sonoro de Sinestes.IA debe ser diseñado con el propósito de ofrecer la mayor cantidad de variedad tímbrica y textural en un número reducido de parámetros. De esta manera, el modelo de inteligencia artificial no se verá limitado por las posibilidades, sino por sus capacidades de aprendizaje. Por otro lado, el entorno debe poder ser completamente representado en todo momento por los parámetros que el programa va a manipular, lo que significa que el algoritmo tendrá control absoluto de lo que está ocurriendo dentro del ambiente sonoro.

Para lograr representar este entorno, los parámetros no solo deben capturar la información de intensidad y altura de cada voz que se piense manejar, sino que además deben capturar las características tímbricas y temporales de cada sonido. Esto lo diferencia del protocolo MIDI, ya que esta solo encapsula las instrucciones de interpretación que debe manejar el instrumento escogido. Para lograr esto, se desarrolló un instrumento como un componente aislado del entorno, el cual incluye todos los requerimientos anteriores. De esta forma, se puede construir el ambiente sonoro a partir de múltiples instrumentos, cuya construcción es idéntica, reduciendo la complejidad y maximizando la variedad.

Los parámetros del instrumento deben contener información que indique la intensidad, altura, envolvente, timbre, volumen, paneo y demás agregados que afectan el sonido. De esta manera, el instrumento recibe como entrada en el siguiente orden:

  1. Velocity:
    Similar al protocolo MIDI, este es un valor de 0 a 127 que representa la intensidad interpretativa del sonido.
  2. Amplitud de ataque:
    Este es un valor de 0 a 1 que representa el porcentaje de intensidad al que llega el instrumento durante el ataque de la envolvente.
  3. Tiempo de ataque:
    Indica la duración de la etapa de ataque en milisegundos.
  4. Curva de ataque:
    Es un valor binario (0,1) que indica si la curva es lineal o logarítmica respectivamente.
  5. Amplitud de decay:
    Representa el porcentaje de intensidad en la etapa de decay. Esta será la misma amplitud usada para el sustain.
  6. Tiempo de decay:
    Indica la duración de la etapa de decay en milisegundos.
  7. Curva de decay:
    Valor binario que indica el tipo de curva de la etapa de decay.
  8. Tiempo de sustain:
    Indica la duración de la etapa de sustain.
  9. Note-off trigger:
    Indica si el tiempo de sustain dependerá de un mensaje de note-off, que en este caso sería un Velocity de cero. De ser así, el tiempo de sustain es ignorado, para depender del velocity.
  10. Tiempo de release:
    Indica el tiempo que se demora el sonido en silenciarse desde que termina la etapa de sustain.
  11. Curva de release:
    Indica si la curva de la etapa de release es lineal o logarítmica.
  12. Velocity-dependent:
    Valor binario que señala si la intensidad de la envolvente depende del velocity, o si se usará el velocity como trigger únicamente. Esta es más una herramienta para el intérprete que para el modelo.
  13. Reverse:
    Valor binario que indica si se desea reproducir la envolvente en retrógrado. Esto permite generar sonidos reproducidos en reversa.
  14. Frecuencia:
    Representa la altura del sonido en términos de frecuencia. Puede variar entre 20Hz y 20kHz.
  15. Tipo de oscilador:
    es un número del 0 al 4, que permite variar de manera continua entre múltiples tipos de forma de onda. 0 es sinusoidal, 1 es triangular, 2 es diente de sierra, 3 es cuadrada y 4 es ruido blanco. Si el valor es intermedio a los previamente indicados, entonces es una mezcla de las dos formas de onda más cercana. Por ejemplo 0.5 es la combinación de sinusoidal y triangular en magnitudes iguales.
  16. Tiempo de glissando:
    Representa el tiempo que se demora el instrumento en pasar de una altura a otra. Si es 0 significa que no hay glissando.
  17. Tasa de FM:
    Valor que representa la relación entre la frecuencia portadora y moduladora en la etapa de FM.
  18. Profundidad de FM:
    Valor que representa la cantidad de modulación en la etapa de FM. 0 representa sin FM.
  19. Tipo de oscilador FM:
    Este valor define la forma de onda a usar como moduladora del FM, y se comporta como el parámetro “Tipo de oscilador”.
  20. Compresor:
    Valor de 0 a 5 que representa una cantidad específica de compresión. Esto se logra haciendo uso del objeto compressor de Pure Data, que lamentablemente no específica lo que representa exáctamente cada valor.
  21. Filtro pasa altos:
    Representa la frecuencia de corte del filtro pasa altos. 0 significa sin filtro.
  22. Filtro pasa bajos:
    Representa la frecuencia de corte del filtro pasa bajos. 20000 es equivalente a sin filtro.
  23. Tiempo de delay:
    El tiempo en milisegundos entre cada repetición del delay.
  24. Cantidad de delay:
    Valor que representa el porcentaje de nivel de salida del delay en comparación al nivel de entrada. 100% representa mismo nivel de entrada.
  25. Damping de reverberación:
    Valor que representa el porcentaje de amortiguación de sonido en la etapa de reverberación.
  26. Tamaño de cuarto:
    Valor de 0 a 1 que representa el tamaño de cuarto en la reverberación.
  27. Dry/Wet:
    Relación entre sonido reverberado y sonido limpio.
  28. Volumen:
    Valor de 0 a 1 que representa el nivel de volumen a la salida del instrumento.
  29. Paneo:
    Valor de -1 a 1 que representa la posición estéreo del instrumento.

Con esto podemos representar todo el estado de un instrumento en 29 valores individuales. Es importante destacar que esta definición fue realizada previamente a las composiciones, y algunos de estos parámetros no fueron manipulados en las bases de datos. Esto significa que se podría definir un número de parámetros menor a este, pero con la intención de mantener una consistencia con la idea de ofrecer la mayor variedad posible se mantendrán dentro de la definición del instrumento.

Habiendo desarrollado, y encapsulado toda la idea de un instrumento bajo estos parámetros, se puede especificar el tipo de sonido a producir asignando valores a cada parámetro. Como ejemplo:

Bombo

Este ejemplo demuestra qué parámetros usar para generar sonidos percutivos bajos como el bombo de una batería.

Flauta

Acá podemos ver la versatilidad del instrumento, ya que sin haber modificado la arquitectura pudimos obtener un sonido contrastante al bombo modificando los parámetros. En este caso, hacemos uso del FM con una tasa tan baja que actúa como un LFO, generando un efecto de vibrato en la nota.

Sonido dinámico

Se pueden encadenar mensajes para generar sonoridades más interesantes. En este caso, hacemos uso del glissando para cambiar de altura de manera gradual, y haciendo uso de la síntesis FM, del compresor y de los filtros se obtiene un timbre interesante.

Arpegio

El encadenamiento de mensajes también permite generar secuencias, lo cual abre la posibilidad a construir melodías en un solo instrumento. Acá se hace uso del delay para mantener el arpeggio por más tiempo.

La única limitante del instrumento es que es una única fuente sonora, lo que significa que por diseño es monofónico. Para poder aumentar la textura del entorno sonoro, es por lo tanto necesario usar más de un instrumento. Priorizando la variedad sonora, se ha decidido manejar 6 instrumentos independientes, lo que puede ser usado como 4 voces para armonía y melodía, y dos para percusión o efectos. De esta forma se diseñó el entorno sonoro, el cual es usado tanto por la inteligencia artificial como para la construcción de las composiciones.