我正在编写一个 C++ 库,用于在不同格式/编解码器之间解码和编码音频。在加载所需的编解码器库之前,我有一个快速检测格式的例程。
对于 WAV 文件,可以简单地在文件开头查找 ASCII 值“RIFF”和“WAVE”。这同样适用于 FLAC,我们可以简单地读取前 4 个字节,即“fLaC”。
但是如何快速检测文件是否为 MP3?我不能依赖文件扩展名。我也无法尝试解码第一个 MP3 帧,因为文件开头可能有其他数据(例如:ID3、封面图像等)。
检测文件是否为 MP3 比在文件中搜索固定模式更复杂。
Some concepts
(详见http://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header)
Algorithm to determine if a file is MP3 or not