L'audio HTML5 e l'API Web Audio sono migliori

Eric Bidelman

Demo dell'elemento di origine multimediale
DEMO

Nell'ambito dell'integrazione di MediaStream con WebRTC, l'API Web Audio ha recentemente aggiunto una perla sotto copertura nota come createMediaElementSource(). Essenzialmente, ti consente di collegare un elemento <audio> HTML5 come origine di input all'API. Puoi visualizzare l'audio HTML5, apportare mutazioni del suono in tempo reale, applicare filtri e così via!

Normalmente, l'API Web Audio carica un brano tramite XHR2, l'input di file o qualsiasi altra cosa... e il gioco è fatto. Invece, questo hook ti consente di combinare <audio> HTML5 con la visualizzazione, il filtro e la potenza di elaborazione dell'API Web Audio.

L'integrazione con <audio> è ideale per lo streaming di asset audio abbastanza lunghi. Supponiamo che il tuo file abbia una durata di due ore. Non si vuole decodificare tutto questo! È interessante anche se vuoi creare un'API (e una UI) per il media player di alto livello per riproduzione/pausa/ricerca, ma vuoi applicare ulteriori elaborazioni/analisi.

Ecco che aspetto ha:

// 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);

Come indicato nel codice, esiste un bug che richiede che la configurazione del codice sorgente venga eseguita dopo il giorno window.onload.

Il passaggio logico successivo è la correzione del problema crbub.com/112367. Quando il cucciolo sarà pronto, potrai collegare WebRTC (in particolare l'API navigator.getUserMedia()) per reindirizzare l'input audio (ad esempio microfono, mixer, chitarra) a un tag <audio> e visualizzarlo utilizzando l'API Web Audio. Grande boom!