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