Paneado espacial

% Completo

Descripción

La percepción espacial del sonido es un elemento importante en el desarrollo de juegos o aplicaciones de audio. La Web Audio API nos permite a través del AudioPannerNode trabajar la espacialidad del sonido. Mediante sus métodos y atributos podemos parametrizar la posición de la fuente y conseguir un ambiente sonoro en 2D o incluso en 3D.

Posición relativa del oyente

  •  Volumen:

     x 1+0dB

  •  Zoom 

    Tamaño de la muestra de frecuencia 2*∫ + 

Si escuchas este ejemplo con tus auriculares estéreo, advertirás que mediante los 3 controles espaciales del panner, podrás variar la percepción izquierda-derecha de la fuente (L-R) la posición enaltura (eje Y) y la posición relativa frente a ti, delate o detrás (eje Z).

Profundizando en el PannerNode encontraremos atributos y métodos que incrementan la complejidad de la percepción espacial del sonido, como:

  • Constantes que definen e tipo de algoritmo o panningModel a utilizar en la espacialización, a elegir entre paneados equipotenciales o algoritmos complejos de alta calidad o HRTF.
  • Posición y orientación de las fuentes y los oyentes.
  • Atributos asociados con fuentes direccionales, especificaremos, por ejemplo un coneInnerAngle o ángulo del conos de radiación, en el cual no habrá reducción de nivel.
  • Métodos que determinan la posición, orientación relativas de las fuentes y los oyentes.
  • El método setVelocity sirve para declarar el vector de velocidad de la fuente de audio, este vector controlará tanto la dirección como la velocidad en un entorno 3D y determinará la cantida de efecto doppler a aplicar.

En el ejemplo hemos utilizado el método setPosition(x, y, z); del nodo de paneado o AudioPannerNode para conseguir espacialidad en la percepción del sonido. Podríamos haber utilizado la interfaz AudioListener que usa tambien un sistema cartesiano de coordenadas para establecer la posición relativa del oyente frente a la fuente, entre otras variables, y exteinde las posibilidades de la espacialización del sonido con la Web Audio API.

El siguiente fragmento de código muestra cómo asignamos los valores de los sliders (aquí potenciómetros) HTML al método setPosition del nodo de Paneado. Así descriiremos la posición relativa de la fuente frente al oyente. Los valores oscilarán entre 1 y -1, teniendo como centro a posición (0,0,0).


                      //creamos el panner
          panner = contextoDeAudio.createPanner();
          // Ajustamos los valores del nodo a los del potenciómetro
          // Panner
          var panX = document.querySelector('#pan').value;
          var panY = document.querySelector('#pany').value;
          var panZ = document.querySelector('#panz').value;
          panner.setPosition(panX, panY, panZ);
          // x,y,z representan las coordenadas en el espacio del oyente

			

Para graficar los valores de nuestra cadena de datos creamos una función de dibujo utilizando el elemento <canvas> que recorra este array de datos y los imprima en pantalla