Se puede acceder a la cámara y al micrófono del usuario en la plataforma web con la API de Media Capture and Streams. El método getUserMedia()
le solicita al usuario que acceda a una cámara o un micrófono para capturar como una transmisión de medios. Luego, este flujo se puede procesar en un subproceso Web Audio independiente con un AudioWorklet que proporciona un procesamiento de audio de latencia muy baja.
En el siguiente ejemplo, se muestra cómo procesar el audio del micrófono del usuario de manera eficiente.
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);
Navegadores compatibles
MediaDevices.getUserMedia()
Web Audio
AudioWorklet
Lecturas adicionales
- Especificación de Media Capture and Streams de W3C
- Especificación de Web Audio del W3C
- Cómo ingresar a AudioWorklet