Javascript Web Audio API延迟

时间:2017-06-12 11:49:51

标签: javascript html5 audio html5-audio web-audio-api

我想制作一个Javascript程序来处理来自麦克风的一些音频。但是当我做一个基本的例子时,比如从麦克风获取音频并在没有任何处理的情况下播放它,就像这样

source = audioCtx.createMediaStreamSource(stream);
source.connect(audioCtx.destination);

输入和输出音频之间的延迟时间为200毫秒。我尝试使用Windows 7和Windows 10在2台不同的PC上使用谷歌浏览器和Firefox,它在各处看起来都一样。我通过使用外部设备录制和分析音频得到了这个数字(200ms),而不仅仅是我的耳朵。

在官方W3C规范here中,它们讲述了大约3-50毫秒的延迟。我需要30-50毫秒。我真的不需要3-5毫秒。

我尝试使用像这样的延迟参数

navigator.mediaDevices.getUserMedia({
  audio: {
    latency: 0.05,
    echoCancellation: false,
    mozNoiseSuppression: true,
    mozAutoGainControl: false
  }
});

但看起来Chrome和FireFox会忽略它。

我的完整示例可在此处找到。

https://jsfiddle.net/xfq3ykp7/71/

是浏览器/硬件限制还是我做错了什么?我的例子可以听到一些延迟吗?通常,通过敲击麦克风附近的桌子很容易检查。在200毫秒内,命中和声音之间会有明显的延迟。

我不需要复杂的东西,如游戏或在线乐器所需的预定音频事件等。我只需要将简单示例中的延迟从200毫秒减少到50毫秒,或理想情况下减少到20毫秒。

UPDATE1:

我可以在Windows 10上创建70毫秒,在Firefox上使用该代码更改在Windows 7上创建100毫秒

var p = navigator.mediaDevices.getUserMedia({
  audio: {
    latency: 0.02,
    echoCancellation: false,
    mozNoiseSuppression: false,
    mozAutoGainControl: false
  }
});

感谢firefox支持(https://bugzilla.mozilla.org/show_bug.cgi?id=1375466)。但他们告诉我们应该有30毫秒。问题仍然是“如何在Windows上获得30毫秒的延迟?”和“什么是硬件要求?”。

0 个答案:

没有答案