Escribí una grabadora que graba el micrófono de getUsermedia y el audio que es local usando Howler JS. Creé un destino de flujo de medios y conecté cada fuente (micrófono, audio) al destino. el audio parece estar bien, pero el micrófono se retrasa unos 2 segundos. No puedo resolver el problema. ¿podrían ayudarme chicos?
var recorder; const stop = document.getElementsByClassName("stop"); const record = document.getElementsByClassName("record"); let mediaDest = Howler.ctx.createMediaStreamDestination(); Howler.masterGain.connect(mediaDest); function onRecordingReady(e) { // 'e' has 'blob event' //var audio = document.getElementById("audio"); audioBlob = e.data; // e.data has blob. //audio.src = URL.createObjectURL(e.data); } let audioBlob; let audioURL = ""; navigator.mediaDevices.getUserMedia({ audio: true }).then(function (stream) { let userMic = Howler.ctx.createMediaStreamSource(stream); userMic.connect(mediaDest); Howler.masterGain.connect(mediaDest); recorder = new MediaRecorder(mediaDest.stream); recorder.addEventListener("dataavailable", onRecordingReady); recorder.addEventListener("stop", function () { W3Module.convertWebmToMP3(audioBlob).then((mp3blob) => { const downloadLink = document.createElement("a"); downloadLink.href = URL.createObjectURL(mp3blob); downloadLink.setAttribute("download", "audio"); //downloadLink.click(); var audio = document.getElementById("audio"); audio.src = URL.createObjectURL(mp3blob); console.log(mp3blob); }); }); }); record[0].addEventListener("click", function () { recorder.start(); }); stop[0].addEventListener("click", function () { recorder.stop(); });Descubrí la solución. No sabía que podía conectar MediaStreamAudioSourceNode a GainNode. Si alguien sufre este problema, simplemente conecte un nodo a otro nodo en lugar de conectar cada nodo al destino.
Conecté el sourceNode al GainNode y conecté el GainNode al destino.
========================= No era la solución... Reproducción de GainNode en tiempo real cada vez que hay entrada... así que, incluso si puedo elimine la latencia, se produce una reproducción molesta.