用C ++获取mp3长度

时间:2014-05-21 07:00:52

标签: c++ mp3 fileinfo

所以,我有一些(大)歌曲列表的纯文本。我写了一个解析器,它创建了一个包含歌曲的艺术家,标题和长度的结构列表。我还有一个巨大的mp3文件夹,对应于我的列表,但随机命名,(例如1b942ca9231291.mp3)。 我想要的是从文件夹中创建长度和文件名列表,以便我可以根据长度等值重命名文件,在发生冲突时提示用户。 我想在不使用面向ID3的库的情况下完成所有这些,请不要建议它们。

1 个答案:

答案 0 :(得分:2)

幸运的是,解析MP3格式非常简单。您无需对其进行解码,只需查看header即可。 MP3没有像大多数文件那样的单个标题,而是将单个文件拆分为多个具有自己标题的帧(数据包),这些标题可以被发现而无需知道它们的确切位置,并且可以将它们与其他数据交错。 (有时也称为边带信息,它通常是ID3标签,但它几乎可以是任何东西)。这就是为什么MP3适合流媒体音乐,所以任何人都可以连接到流的中间并开始播放(如果你把MP3文件拆分成两半,同样的事情是有效的,第一和第二个文件都会没有问题,例如WAV或PNG格式不支持)。

您需要计算kBps中的比特率并计算帧的大小(与每个标题相关联的结构)并将它们分开。对于CBR文件,您可以通过划分整个文件大小来获得合理的估计,这要快得多。它有助于忽略ID3标签,特别是如果它们包含笨重的专辑艺术图像。

您可以查看我的旧music checker程序,该程序会解码MP3标头并检查是否有损坏。您将需要一个旧版本(不确定哪一个)framework来构建它。