Según su especificación, esta interfaz representa la capacidad de memoria de audio a utilizar para procesar la señal. El formato de codificación que utiliza es una PCM lineal de 32 Bits normalizada a +-1, y puede contener uno o más canales.
length
.La interfaz representa una fuente de audio de la memoria del Buffer de Audio. Es útil para reproducir fragmentos de audio cortos en un entorno que requiera flexibilidad. Iniciaremos los sonidos con el método start()
y la salida representará el flujo de datos de audio. Cuando El buffer de datos haya sido reproducido por completo, se cortará la reproducción.
playBackrate
, para definir la velocidad con que se renderiza la cadena de audio.loopStart
y loopEnd
. Un valor opcional en segundos.when,
en segundos, en la coordenada de tiempo actual del contexto de audio, la que podemos extraer con AudioContext.currentTime
. También podremos especificar un retraso con el parámetro offset
y una duración, con duration.start()
La Web Audio API utiliza un AudioBuffer
para los sonidos de corta y media longitud. El enfoque básico de carga es el uso de XMLHttpRequest, una petición vía http al servidor, para buscar los archivos de sonido.
En nuestro contexto de audio, podemos utilizar archivos de datos de audio en varios formatos, como WAV, MP3, AAC, OGG y otros. La compatibilidad con navegadores para diferentes formatos de audio varía según esta tabla.
El siguiente código muestra la carga de un archivo de sonido:
// Damos la instrucción de ejeuctar inciar(); más adelante
windiow.onload= iniciar();
var mibuffer;
var contextoDeAudio;
// Declaramos la función cargarSonido(), que requerirá el archivo por petición asíncorna XMLHTTP
function cargarSonido(url) {
var peticion = new XMLHttpRequest();
peticion.open('GET', url, true);
// Especificamos el tipo de respuesta:
peticion.responseType = 'arraybuffer';
//cuando cargue decodificamos los datos de audio y los introducimos como una PCM en la variable mi buffer
peticion.onload = function(){
contextoDeAudio.decodeAudioData(peticion.response, function(elbuffer){
mibuffer=elbuffer;
});
}
peticion.send();
}
Los datos de audio del archivo son binarios (no de texto), por lo que establecemos el tipo de respuesta responseType de la solicitud como 'arraybuffer'
, para almacenarlos temporalmente y poder trabajar con ellos. Para obtener más información acerca de ArrayBuffers, puedes leer la especificación sobre las peticiones XMLHttpRequest.
Una vez que los datos del archivo de audio (no decodificado) han sido recibidos, que pueden conservarse para una decodificación posterior, o puede ser decodificado de forma inmediata utilizando el método AudioContext decodeAudioData()
. Este método toma del ArrayBuffer los datos del archivo de audio almacenados en peticion.response
, la respuesta de nuestra petición, y decodifica de forma asíncrona (no bloquea el proceso principal de JavaScript en ejecución).
Cuando decodeAudioData()
ha terminado, se llama a una función de devolución que proporciona los datos de audio PCM decodificado como AudioBuffer.
El siguiente fragmento de código muestra el proceso general para reproducir un sonido:
createBufferSource
.contextoDeAudio.destination
que representa el final de la cadena de audio y será lo que escuchemos en los altavoces del dispositivo.
// Damos la instrucción de ejeuctar inciar(); más adelante
function iniciar(){
//Cramos el contexto de audio
contextoDeAudio = new webkitAudioContext;
//Llamamos a la función cargar sonido con la ruta de nuestro archivo de audio
cargarSonido(/nuestroaudio.mp3);
//creamos la fuente
var fuente = contextoDeAudio.createBufferSource();
fuente.connect(contextoDeAudio.destination);
//Reproducimos la fuente desde el segundo 0
fuente.start(0);
}