gpt4 book ai didi

header - 检测文件是否为 MP3 文件?

转载 作者:行者123 更新时间:2023-12-03 23:23:28 24 4
gpt4 key购买 nike

我正在编写一个 C++ 库,用于在不同格式/编解码器之间解码和编码音频。在加载所需的编解码器库之前,我有一个快速检测格式的例程。

对于 WAV 文件,可以简单地在文件开头查找 ASCII 值“RIFF”和“WAVE”。这同样适用于 FLAC,我们可以简单地读取前 4 个字节,即“fLaC”。

但是如何快速检测文件是否为 MP3?我不能依赖文件扩展名。我也无法尝试解码第一个 MP3 帧,因为文件开头可能有其他数据(例如:ID3、封面图像等)。

最佳答案

检测文件是否为 MP3 比在文件中搜索固定模式更复杂。
Some concepts
(详见http://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header)

  • MP3 文件由一系列帧组成,每个帧的开头都有一个标题。
  • header 从一个字节边界开始,带有一个 11 位同步字,全为 1。因此同步字是 0xFFE 或 0XFFF。
  • 每一帧的长度是根据头参数计算的。
  • Algorithm to determine if a file is MP3 or not
  • 在文件中搜索同步字(0xFFF 或 0xFFE)。
  • 解析头部参数。
  • 使用 header 参数确定帧长度。
  • 使用帧长度寻找下一帧。
  • 如果查找后发现另一个同步字,则该文件多为 MP3 文件。
  • 可以肯定的是,重复这个过程找到N个连续的MP3帧。可以增加 N 以获得更好的命中率。
  • 关于header - 检测文件是否为 MP3 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11360286/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com