将实时音频流式传输到浏览器 - Web 音频 API 的替代方案



我正在尝试将实时音频从iOS设备流式传输到Web浏览器。iOS 设备通过 Web 套接字发送小型单声道 wav 文件(录制时)。客户端收到 wav 文件后,我会让 Web 音频 API 解码并相应地安排它们。

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

我已经尝试了我能找到的关于这个问题的所有东西(脚本处理器节点,调整时间,创建新的缓冲区,甚至手动上采样),但没有一个奏效。在这一点上,我即将放弃 Web 音频 API。

Web 音频 API 是否适合此?对于我想要完成的任务,有没有更好的选择?任何帮助/建议不胜感激,谢谢!

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

注意:音频馈送器会自动将采样上采样到音频上下文采样率。从4k到44.1k确实在高端引入了一些非常粗糙的音损,但是2khz的48db低通滤波器(4 x 12db)摆脱了它们。我之所以选择2khz,是因为多亏了Harry Nyquist,我知道4k的采样率不可能在原始文件中产生超过2khz的频率。

所有欢呼布里昂·维伯斯

最新更新