1.3. API Web Audio
1.3.3. Ejemplos
Ahora vamos a ver un primer ejemplo muy simple en el que definiremos un oscilador y lo enviaremos a la salida para detener el sonido a los 2 segundos.
var context = new (window.AudioContext || window.webkitAudioContext)(); // creating oscillator node var oscillator = context.createOscillator(); // configuration oscillator oscillator.type = ' sawtooth'; oscillator.frequency.value = 440; // connecting to the destination oscillator.connect(context.destination); oscillator.start(); // stop oscillator after 2 seconds setTimeout(() => { oscillator.stop(); }, 2000) }
Creamos un contexto de audio con:
var context = new (window.AudioContext || window.webkitAudioContext)();
Definimos el contexto con el prefijo webkit
porque Safari lo requiere y de esta manera la haremos compatible con todos los navegadores.
Después hemos creado el nodo oscilador con el método createOscillator()
.
Se le ha asignado con la propiedad type
el tipo ' sawtooth'
que corresponde a una onda en forma de diente de sierra. Con frecuency.value
se le asigna una frecuencia de 440 Hz.
Finalmente conectamos con el método connect()
el oscilador con el destino final que habitualmente es la salida de audio del dispositivo donde se ejecuta. Después con el método start()
haremos que se reproduzca el sonido que detendremos con el método stop()
2 segundos después.
En el segundo ejemplo vamos a introducir un nodo de procesamiento entre el oscilador y la salida. El nodo gain
sirve para cambiar el volumen del audio.
var context = new (window.AudioContext || window.webkitAudioContext)(); // creating oscillator and gain nodes var oscillator = context.createOscillator(); var gain = context.createGain(); // connecting oscillator to gain oscillator.connect(gain); // configuration oscillator oscillator.type = 'sawtooth'; oscillator.frequency.value = 440; // setting volume to 20% gain.gain.setValueAtTime(0.2, 0); // connecting to the destination gain.connect(context.destination); oscillator.start(); setTimeout(() => { oscillator.stop(); }, 2000); }
Primero se creará el nodo de forma similar a la creación del nodo del oscilador con createGain()
. Después se conecta el oscilador al nodo gain
con connect()
.
Con gain.gain.setValueAtTime(0.2, 0)
determinamos que el volumen resultante sea del 20% y que se ejecute inmediatamente.
Finalmente, conectamos el nodo gain
con la salida.
Tan solo han sido dos breves y sencillas pinceladas a la API Web Audio, las posibilidades de desarrollo son muchas y requerirían un capítulo o libro para su estudio completo. Esta API ha sido fundamental para la creación de experiencias auditivas inmersivas en la web, desde juegos en línea y aplicaciones interactivas hasta secuenciadores de música y obras de arte sonoras.
Su capacidad para manipular el audio en tiempo real y ofrecer un control preciso sobre cada aspecto del sonido ha permitido a los desarrolladores explorar nuevas fronteras en la integración del audio en línea.
Encontraréis información actualizada de la API Web Audio en: https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API