El audio HTML5 y la API de Web Audio son mejores amigos

Demostración del elemento de fuente de medios
DEMO

Como parte de la integración de MediaStream con WebRTC, la API de Web Audio recientemente obtuvo una joya encubierta conocida como createMediaElementSource(). Básicamente, te permite conectar un elemento <audio> HTML5 como fuente de entrada a la API. En términos simples, puedes visualizar audio HTML5, hacer mutaciones de sonido en tiempo real, filtrar, etc.

Por lo general, la API de Web Audio funciona cargando una canción a través de XHR2, entrada de archivos, lo que sea, y listo. En cambio, este hook te permite combinar <audio> de HTML5 con la visualización, el filtro y el poder de procesamiento de la API de Web Audio.

La integración con<audio> es ideal para transmitir recursos de audio bastante largos. Supongamos que tu archivo dura 2 horas. No querrás decodificar todo eso. También es interesante si quieres compilar una API (y una IU) de reproductor multimedia de alto nivel para reproducir, pausar o buscar contenido, pero deseas aplicar algún procesamiento o análisis adicional.

A continuación, le mostramos cómo se ve:

// Create an <audio> element dynamically.
var audio = new Audio();
audio.src = 'myfile.mp3';
audio.controls = true;
audio.autoplay = true;
document.body.appendChild(audio);

var context = new webkitAudioContext();
var analyser = context.createAnalyser();

// Wait for window.onload to fire. See crbug.com/112368
window.addEventListener('load', function(e) {
    // Our <audio> element will be the audio source.
    var source = context.createMediaElementSource(audio);
    source.connect(analyser);
    analyser.connect(context.destination);

    // ...call requestAnimationFrame() and render the analyser's output to canvas.
}, false);

Como se indica en el código, hay un error que requiere que la configuración de la fuente se realice después de window.onload.

El siguiente paso lógico es corregir crbub.com/112367. Una vez que esté listo, podrás conectar WebRTC (la API de navigator.getUserMedia() en particular) para canalizar la entrada de audio (p. ej., micrófono, mezclador, guitarra) a una etiqueta <audio> y, luego, visualizarla con la API de Web Audio. ¡Megaboom!