【问题标题】:Reduce audio playback latency from microphone input in javascript?减少javascript中麦克风输入的音频播放延迟?
【发布时间】:2019-09-25 22:08:59
【问题描述】:

我需要在 javascript(来自浏览器)中从麦克风捕获一些输入并实时播放音频。但是我得到的延迟真的很难看(大约 200 毫秒)。

我怎样才能减少这种情况? javascript 是预期延迟为 20 毫秒的好选择吗?

我只是尝试使用来自Web Audio APIgetUserMedia()AudioContext utils 捕获音频并播放它:

const constraints = {
  video: false,
  audio: {
    echoCancellation: false,
    noiseSuppression: false,
    autoGainControl: false
  }
}

var context = new AudioContext({
  latencyHint: 'interactive',
  sampleRate: 44100,
});

navigator.mediaDevices.getUserMedia(constraints)
  .then((stream) => {
    var source = context.createMediaStreamSource(stream);
    source.connect(context.destination);
  });

欢迎提出任何建议以尽量减少延迟。 谢谢

【问题讨论】:

    标签: javascript audio stream web-audio-api playback


    【解决方案1】:

    不知道这是否有帮助,但如果您要将音频发送到 WebAudio,则绝对应该关闭回声消除和其他输入处理。有关详细信息,请参阅echoCancellation constraint。您可能还想关闭增益控制和噪声抑制。

    【讨论】:

    • 感谢您的建议。我不知道这些限制。不幸的是,延迟仍然非常糟糕(有点低但仍然不可接受)。我更新了我的问题中的代码。
    • 最后一件事是尝试new AudioContext({latencyHint: 0}) 以获取使用较低延迟的上下文。如果这还不够帮助,那么您可能应该使用浏览器提交错误。如果可能的话,拥有一个真实的用例将帮助他们弄清楚如何让它变得更好。
    • 也许您可以通过不将 sampleRate 设置为 44100Hz 来减少延迟。如果您的音频输出设备的 sampleRate 不是 44100Hz,那么将 AudioContext 的 sampleRate 设置为该值将导致浏览器进行重新采样,从而增加一些延迟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2023-01-10
    • 2018-06-18
    • 2014-10-21
    • 2018-02-14
    • 2019-03-09
    相关资源
    最近更新 更多