在c++中获取mp3的长度
Get mp3 length in C++
那么,我有一些纯文本的(大)歌曲列表。我编写了一个解析器,用于创建包含艺术家、歌曲标题和长度的结构列表。我也有一个巨大的mp3文件夹,与我的列表相对应,但随机命名,(例如1b942ca9231291.mp3)。我想要的是从文件夹中创建一个长度和文件名的列表,这样我就可以根据长度等效性重命名文件,并在发生冲突时提示用户。我希望在不使用面向id3的库的情况下完成所有这些工作,请不要建议他们。
幸运的是,解析MP3格式非常简单。你不需要解码它,只看标题。MP3不像大多数文件一样只有一个头,相反,一个文件被分成许多帧(包),它们有自己的头,不需要知道它们的确切位置,就可以发现它们,并且可以将它们与其他一些数据(有时称为边带信息,通常是ID3标签,但它几乎可以是任何东西)交织在一起。这就是为什么MP3很适合流媒体音乐,所以任何人都可以连接到流的中间并开始播放(同样的事情如果你把MP3文件分成两半,第一个和第二个文件都可以播放没有问题,例如WAV或PNG格式将不支持)。
你需要计算出kBps
中的比特率,并计算帧的大小(与每个报头相关的结构),然后将它们分开。对于CBR文件,只需除以整个文件大小就可以得到一个合理的估计,这要快得多。它有助于忽略ID3标签,特别是如果它们包含大量的专辑封面图像。
你可以看看我的旧音乐检查程序,它可以解码MP3头并检查损坏情况。您将需要该框架的旧版本(不确定是哪个)来构建它。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- Boost Spirit,获取迭代器内部语义动作
- 从MP3获取无元数据(ID3)的数据的方法
- 获取 mp3 的专辑封面图片的地址
- 如何获取 mp3 音频数据包以在 C/C++ 中流式传输
- 在c++中获取mp3的长度