防止 javascript mediarecorder 在同步缓冲播放期间音量波动

Preventing javascript mediarecorder from fluctuating volume during simultaneous buffer playback

我错过了在大流行期间在合唱团唱歌的机会,所以我正在研究多轨录音机,您可以在录音的同时收听其他曲目。一次录制和播放一个就可以了。但是,当我尝试同时执行这两项操作时,生成的录音在正常和非常安静之间切入和切出。

这可能是由于 运行 在 Javascript 中同时对它们进行了处理?或者更有可能是我自己电脑的音频设置有问题?我使用的是带 Windows 10 的老化 XPS 13,使用便宜的耳塞和笔记本电脑的麦克风。我不太了解它的作用,但我尝试在 Windows 设置中将麦克风采样率从 16 位 48000Hz 更改为 24 位 48000Hz 。不过,似乎什么都没有改变。虽然我可以找到关于麦克风完全无法正常工作的人的链接,但一个小时的搜索并没有让我更接近任何关于这个问题的答案。

目前的设置是,如果我按下录音,以下是运行:

play(mergedTrackBuffer)
setTimeout(function(){mediaRecorder.start();}, 100);

其中 mergedTrackBuffer 是单个音频缓冲区,mediaRecorder 从麦克风获取音频。如果 mergedTrackBuffer 为空,则新的录音听起来很好。

我认为在您的设置中禁用麦克风信号的所有预处理是有益的。这可以通过在调用 getUserMedia().

时指定一些 constraints 来完成
navigator.mediaDevices.getUserMedia({
    audio: {
        autoGainControl: false,
        echoCancellation: false,
        noiseSuppression: false
    }
});

但是有些设备(到目前为止我只在手机上看到过)确实在硬件上应用了一些无法从浏览器中禁用的预处理。如果上述方法不起作用,可能值得在不同的设备上检查代码。