为decodeAudioData定义'有效的mp3块'(WebAudio API)

bir*_*ril 13 javascript mp3 web-audio-api

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

一些挖后似乎decodeAudioData仅能够与由记录"有效的MP3块"工作公平鼎恳Thinkum,在这里.

然而,没有关于有效mp3块的结构的澄清(前面提到的作者没有涉及到这一点).我知道存在的各种mp3分离器,但我想以编程方式处理它.(我正试图在服务器端使用nodejs实现一种"穷人的流媒体").

那么,拆分mp3帧头是否足够或者我需要做更多?(或许通过在末尾添加一些数据来"关闭"每个块?)'字节库'怎么样?这会引起问题吗?为了记录,我目前正在使用128kbps cbr mp3.这会以任何方式简化流程吗?

任何有关decodeAudioData期望作为虚拟数据的信息都将受到赞赏.

谢谢.

PS:我意识到这可能是对Fair Dinkum Thinkum的帖子的澄清请求,但我的低声誉让我不发表评论.所以我不知道如何做到这一点,但有一个新的问题.再次感谢.

bir*_*ril 7

在使用decodeAudioData(在Chrome上)进行更多实验之后,这就是我发现的:

  • 只要在mp3帧边界上分割,任何初始 mp3块都将被成功解码.找到边界可能并不总是微不足道(例如涉及解析mp3标头),因为即使是恒定比特率的mp3也不总是包含恒定大小的帧.例如,128kbps mp3文件包含417字节帧以及418字节帧.(某些帧包含一个额外的字节作为填充).
  • 即使在"双方"的精确帧边界上分割,也不能保证任意mp3块可解码.这种类型的一些块可以被解码,但是其他块会导致decodeAudioData抛出错误.我猜这与mp3位库有关,这会在mp3帧之间产生依赖关系.