【问题标题】:Streaming Live audio to the browser - Alternatives to the Web Audio API?将实时音频流式传输到浏览器 - Web 音频 API 的替代方案?
【发布时间】:2016-07-03 01:20:56
【问题描述】:

我正在尝试将实时音频从 iOS 设备流式传输到网络浏览器。 iOS 设备通过 Web 套接字发送小的单声道 wav 文件(因为它们是录制的)。一旦客户端收到 wav 文件,我就会对 Web Audio API 进行解码并相应地安排它们。

这让我完成了大约 99% 的路程,除了我能听到每个音频块之间的咔嗒声。经过一番阅读,我意识到问题的可能根源:音频正在以仅 4k 的采样率录制,这是无法更改的。似乎 Web Audio API 的 decodeAudioData() 函数不能以精确的精度处理除 44.1k 以外的采样率,从而导致块之间的间隙。

我已经尝试了字面上的所有我能找到的关于这个问题的一切(scriptProcessorNodes、调整时间、创建新的缓冲区,甚至手动上采样),但都没有奏效。此时我即将放弃 Web Audio API。

网络音频 API 是否适用于此? 对于我想要完成的事情,是否有更好的选择? 感谢您提供任何帮助/建议,谢谢!

【问题讨论】:

  • 按照目前的规定,decodeAudioData() 总是将编码音频重新采样为context.sampleRate 指定的采样率。除非您可以更改输出设备的采样率,否则必须在某处进行重新采样。有人建议decodeAudioData() 不重新采样或AudioContext() 采用所需的采样率,以便所有重新采样都在内部进行。我认为,这可以解决您的点击问题。
  • 也许您可以使用 FileAPI 将文件放在一起,然后使用普通音频对象播放?

标签: streaming web-audio-api live-streaming


【解决方案1】:

唉! AudioFeeder.js 创造奇迹。我只是指定 4k 的采样率,输入原始的 32 位 pcm 数据,它会输出一致的无缝音频流! Even 内置了缓冲区处理事件,因此无需设置任何循环或超时来安排块播放。不过,我确实需要对其进行一些调整,以将其连接到我的其他网络音频节点,而不仅仅是 context.destination。

注意:AudioFeeder 会自动上采样到音频上下文采样率。从 4k 到 44.1k 确实在高端引入了一些听起来很粗糙的伪影,但是 2khz 的 48db 低通滤波器(4 x 12db)摆脱了它们。我之所以选择 2khz,是因为感谢 Harry Nyquist,我知道 4k 的采样率不可能在原始文件中产生高于 2khz 的频率。

Brion Vibbers 万岁

【讨论】:

    猜你喜欢
    • 2014-05-29
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2017-02-10
    • 1970-01-01
    • 2012-11-20
    相关资源
    最近更新 更多