Dostęp do kamery i mikrofonu użytkownika jest możliwy na platformie internetowej dzięki interfejsowi Media Capture and Streams API. Metoda getUserMedia()
prosi użytkownika o dostęp do aparatu lub mikrofonu w celu przechwycenia strumienia multimediów. Ten strumień może być następnie przetwarzany w osobnym wątku Web Audio za pomocą AudioWorklet, który zapewnia przetwarzanie dźwięku o bardzo małym opóźnieniu.
Poniższy przykład pokazuje, jak wydajnie przetwarzać dźwięk z mikrofonu użytkownika.
let stream;
startMicrophoneButton.addEventListener("click", async () => {
// Prompt the user to use their microphone.
stream = await navigator.mediaDevices.getUserMedia({
audio: true,
});
const context = new AudioContext();
const source = context.createMediaStreamSource(stream);
// Load and execute the module script.
await context.audioWorklet.addModule("processor.js");
// Create an AudioWorkletNode. The name of the processor is the
// one passed to registerProcessor() in the module script.
const processor = new AudioWorkletNode(context, "processor");
source.connect(processor).connect(context.destination);
log("Your microphone audio is being used.");
});
stopMicrophoneButton.addEventListener("click", () => {
// Stop the stream.
stream.getTracks().forEach(track => track.stop());
log("Your microphone audio is not used anymore.");
});
// processor.js
// This file is evaluated in the audio rendering thread
// upon context.audioWorklet.addModule() call.
class Processor extends AudioWorkletProcessor {
process([input], [output]) {
// Copy inputs to outputs.
output[0].set(input[0]);
return true;
}
}
registerProcessor("processor", Processor);
Obsługa przeglądarek
MediaDevices.getUserMedia()
Web Audio
AudioWorklet