问题描述
美好的一天
我被要求做一个由STM32和VS1003(一个fat32 USB主机MP3播放器)组成的项目。 所有的部分都做完了,但是现在,我需要获取一首歌曲的持续时间。
不幸的是,并非所有歌曲都提供TLEN,所以我不能指望它。 我的理解是mp3是由帧组成的,每个帧为0.026秒,每个帧以0XFF 0xFX(X可以是任意值)开头,因此我需要在2个单独的字节中搜索0xFFFx并将其计数,然后乘以0.026并得到持续时间,
由于微控制器的局限性,需要从USB读取2048字节乘以2048字节的SRAM文件,因此我决定通过Python在计算机中测试该理论,然后在微控制器上将其更改为C(以便于测试算法),但是我得到的数字比预期的要多得多。
例如,一个mp3给我25300的0XFF 0XFX,相当于657.5秒,但我知道它实际上是187秒
似乎0XFF 0xFx也位于歌曲的中间
有没有可靠的方法来计算标题?或者还有其他方法可以不计算标题就获得长度吗? 任何注释或基本代码(在python或c或js中)都应预先感谢
解决方法
帧同步标记不是0xFFFx,其中x是任意四个位,它是0xFFFx 或 0xFFEx。由于相同的模式可能会出现在音频数据中,因此无法用蛮力搜索这些模式-您必须找到同步标记的第一个实例,然后从中计算出每个帧的字节长度帧头中的比特率。已经有关于该计算的帖子,在这里: