为解码音频数据(WebAudio API)定义“有效的mp3块”

Define 'valid mp3 chunk' for decodeAudioData (WebAudio API)

本文关键字:有效 有效的 mp3 定义 音频 解码 数据 API WebAudio      更新时间:2023-09-26

我正在尝试使用decodeAudioData在javascript中解码和播放较大mp3文件的初始部分。我的第一个粗略方法是从mp3的开头切下一些字节,并将它们提供给解码AudioData。毫不奇怪,这失败了。

经过一番挖掘,decodeAudioData似乎只能处理Fair Dinkum Thinkum记录的"有效mp3块"。

但是,没有澄清有效mp3块的结构(上述的作者没有对此进行讨论(。我知道那里存在各种 mp3 拆分器,但我想以编程方式解决这个问题。(我正在尝试在服务器端使用 nodejs 实现一种"穷人的流媒体"(。

那么,在 mp3 帧标题上拆分就足够了还是我需要做更多?(也许通过在末尾附加一些数据来"关闭"每个块?"字节库"怎么样?这会导致问题吗?作为记录,我目前正在使用128kbps cbr mp3。这会以任何方式简化流程吗?

任何关于解码音频数据期望作为有效数据的信息将不胜感激。

谢谢。

PS:我意识到这可能是对Fair Dinkum Thinkum帖子的澄清请求,但我的低声誉使我无法发表评论。所以我看不出还能怎么做,只能提出一个新问题。再次感谢。

经过更多 decodeAudioData 实验(在 Chrome 上(,这是我发现的:

    只要在 mp3
  • 帧边界上拆分任何初始 mp3 块,它就会成功解码。发现边界可能并不总是微不足道的(例如,涉及解析 mp3 标头(,因为即使是恒定比特率 mp3 也并不总是包含恒定大小的帧。例如,128kbps mp3 文件包含 417 字节帧和 418 字节帧。(某些帧包含一个额外的字节作为填充(。
  • 任意 mp3 块不能保证是可解码的,即使在"两侧"的精确帧边界上拆分也是如此。可以解码某些此类块,但其他块会导致解码音频数据引发错误。我猜这与 mp3 位存储库有关,它在 mp3 帧之间创建了依赖关系。

如果您将文件拆分为以有效的 MP3 标头开头的片段(在字节边界上对齐的 12 位"1":FF Fx(,您很可能会没事。