Zle*_*lik 6 html javascript audio html5-audio web-audio-api
我想制作一个 Javascript 程序来处理来自麦克风的一些音频。但是当我只做一个基本的例子时,比如从麦克风获取音频并在没有任何处理的情况下播放它,就像这样
source = audioCtx.createMediaStreamSource(stream);
source.connect(audioCtx.destination);
Run Code Online (Sandbox Code Playgroud)
我在输入和输出音频之间有 200 毫秒的延迟。我在 2 台装有 Windows 7 和 Windows 10 的不同 PC 上尝试了 Google Chrome 和 Firefox,它在任何地方看起来都一样。我通过使用外部设备录制和分析音频(而不仅仅是通过我的耳朵)获得了这个数字(200 毫秒)。
在此处的官方 W3C 规范中,他们讲述了大约 3-50 毫秒的延迟。30-50 毫秒是我需要的。我真的不需要 3-5 毫秒。
我尝试使用这样的延迟参数
navigator.mediaDevices.getUserMedia({
audio: {
latency: 0.05,
echoCancellation: false,
mozNoiseSuppression: true,
mozAutoGainControl: false
}
});
Run Code Online (Sandbox Code Playgroud)
但看起来它被 Chrome 和 FireFox 忽略了。
我的完整示例可在此处获得。
https://jsfiddle.net/xfq3ykp7/71/
是浏览器/硬件限制还是我做错了什么?任何人都可以通过我的示例听到一些延迟吗?通常,通过敲击麦克风附近的桌子可以很容易地检查它。敲击声与其声音之间有 200 毫秒的明显延迟。
我不需要复杂的事情,例如游戏或在线乐器所需的预定音频事件等。我只需要在我的简单示例中将延迟从 200 毫秒减少到 50 毫秒,或者理想情况下减少到 20 毫秒。
更新1:
通过更改代码,我可以在 Firefox 中在 Windows 10 上运行 70 毫秒,在 Windows 7 上运行 100 毫秒
var p = navigator.mediaDevices.getUserMedia({
audio: {
latency: 0.02,
echoCancellation: false,
mozNoiseSuppression: false,
mozAutoGainControl: false
}
});
Run Code Online (Sandbox Code Playgroud)
感谢 Firefox 支持(https://bugzilla.mozilla.org/show_bug.cgi?id=1375466)。但他们说 30 毫秒应该是可能的。问题仍然悬而未决“如何在 Windows 上获得 30 毫秒的延迟?” 和“什么是硬件要求?”。
| 归档时间: |
|
| 查看次数: |
2641 次 |
| 最近记录: |