HTML5-Audio und die Web Audio API gehören zu den besten BFFs.

Eric Bidelman

Demo für Medienquellenelement
DEMO

Im Rahmen der MediaStream-Integration mit WebRTC hat die Web Audio API vor Kurzem ein Undercover-Gem namens createMediaElementSource() gelandet. Im Grunde können Sie damit ein HTML5-<audio>-Element als Eingabequelle an die API anhängen. Für Laien: Du kannst HTML5-Audio visualisieren, Soundänderungen in Echtzeit vornehmen, filtern usw.

Normalerweise lädt die Web Audio API einen Song über XHR2, eine Dateieingabe usw. – und schon bist du fertig. Stattdessen kannst du mit diesem Hook HTML5-<audio> mit der Visualisierungs-, Filter- und Prozessorleistung der Web Audio API kombinieren.

Die Einbindung in <audio> ist ideal zum Streamen ziemlich langer Audioinhalte. Angenommen, Ihre Datei ist zwei Stunden lang. Sie möchten nicht alles decodieren! Es ist auch interessant, wenn Sie eine Mediaplayer-API (und Benutzeroberfläche) für Wiedergabe/Pause/Suche erstellen, aber zusätzliche Verarbeitungs-/Analysen ausführen möchten.

Hier sehen Sie das Beispiel eines Testergebnisses:

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

Wie im Code erwähnt, gibt es einen Programmfehler, der erfordert, dass die Quelleinrichtung nach window.onload erfolgt.

Der nächste logische Schritt ist die Fehlerbehebung bei crbub.com/112367. Sobald das Welpe bereit ist, können Sie WebRTC (insbesondere die navigator.getUserMedia() API) mit Audioeingaben (z. B. Mikrofon, Mischpult, Gitarre) an ein <audio>-Tag weiterleiten und es dann mithilfe der Web Audio API visualisieren. Mega-Boom!