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

2024-09-24 06:23:54 发布

您现在位置:Python中文网/ 问答频道 /正文

你好

我被要求做一个项目,其中包括一个STM32和VS1003,FAT32 USB主机MP3播放器。 所有的部分都完成了,但是现在,我需要知道一首歌的持续时间

不幸的是,TLEN并不是所有的歌曲都有,所以我不能指望它。 我的理解是mp3是由帧组成的,每帧为0.026秒,每帧以0XFF 0xFX开始(X可以是任意的),因此我需要在2个单独的字节中搜索0xFFFx并对其进行计数,然后乘以0.026并获得持续时间

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

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

<0>似乎0xff0xfx也在歌曲的中间

有没有可靠的方法来计算标题?或者有没有其他方法可以在不计算页眉的情况下获得长度? 任何注释或基本代码(python、c或js)都会提前收到


Tags: 项目方法字节播放器歌曲mp3usb计数
1条回答
网友
1楼 · 发布于 2024-09-24 06:23:54

帧同步标记不是0xFFFx,其中x是任意四位,它是0xFFFx0xFFEx。由于音频数据中可能会出现相同的模式,因此对这些模式的强制搜索将不起作用。您必须找到同步标记的第一个实例,然后根据帧头中的比特率计算每个帧的字节长度。关于这个计算已经有帖子了,这里:

Formula from mp3 Frame Length

相关问题 更多 >