在微控制器中获取 MP3 的持续时间

get the duration of an MP3 in Microcontroller

美好的一天

我被要求做一个由一个STM32和VS1003组成的项目,一个FAT32 USB主机MP3播放器。 所有部分都已完成,但现在,我需要获取歌曲的持续时间。

不幸的是,TLEN 不适用于所有歌曲,所以我不能指望它。 我的理解是 mp3 是由帧组成的,每帧是 0.026 秒,每帧以 0XFF 0xFX 开头(X 可以是任何)所以我需要在 2 个单独的字节中搜索 0xFFFx 并计算它们,然后乘以 0.026 得到持续时间,

由于微控制器有限制 SRAM 文件需要从 USB 读取 2048 字节 x 2048 字节,我决定先通过 Python 在计算机上测试这个理论,然后在微控制器上将其更改为 C(为了便于测试算法),但我得到的数字比预期的多很多。

例如 mp3 给我 25300 of 0XFF 0XFX 转换为 657.5 秒,但我知道它实际上是 187 秒

好像0XFF 0xFx也在这首歌的中间

有什么可靠的方法来计算 header 的数量吗?或者有没有其他方法可以在不计算 header 的情况下获得长度? 任何注释或基本代码(在python或c或js中)提前表示赞赏

帧同步标记不是 0xFFFx,其中 x 是任意四位,它是 0xFFFx 0xFFEx。因为相同的模式可以出现在音频数据中,brute-force 搜索模式是行不通的——您必须找到同步标记的第一个实例,然后计算每个帧的字节长度来自帧头中的比特率。该计算已经有 post,此处: