Dźwięk HTML5 i interfejs Web Audio API to najlepsze funkcje

Demo elementu źródła multimediów
DEMO

W ramach integracji MediaStream z WebRTC interfejs Web Audio API otrzymał niedawno ukrytą perełkę o nazwie createMediaElementSource(). Umożliwia ono połączenie elementu HTML5 <audio> jako źródła danych wejściowych interfejsu API. W uproszczeniu: możesz wizualizować dźwięk w formacie HTML5, dokonywać w czasie rzeczywistym mutacji dźwięku, filtrować itp.

Zazwyczaj interfejs Web Audio API działa, wczytując utwór za pomocą XHR2, wejścia pliku itp., ale w tym przypadku nie musisz tego robić. Ten element spowoduje połączenie HTML5 <audio> z wizualizacją, filtrem i mocą obliczeniową interfejsu Web Audio API.

Integracja z <audio> jest idealna do strumieniowego przesyłania dość długich zasobów audio. Załóżmy, że plik trwa 2 godziny. Nie chcesz tego dekodować. Jest to też przydatne, jeśli chcesz utworzyć zaawansowane API (i interfejs użytkownika) odtwarzacza multimediów do uruchamiania, wstrzymywania i przewijania, ale chcesz zastosować dodatkowe przetwarzanie lub analizę.

Jak to wygląda:

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

Jak widać w kodzie, występuje błąd, który wymaga skonfigurowania źródła po window.onload.

Kolejnym logicznym krokiem jest naprawienie adresu crbub.com/112367. Gdy to będzie gotowe, możesz połączyć WebRTC (w szczególności interfejs API navigator.getUserMedia()) z wejściowym sygnałem audio (np.mikrofonem, mikserem, gitarą) i przesłać go do tagu <audio>, a potem zwizualizować za pomocą interfejsu Web Audio API. Mega huk!