我正在编写一个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
我只是检查你现有的wave和flac测试中的签名。
一个mp3文件should have this in hex:
0x49, 0x44, 0x33
它适用于我的一些文件。我不确定它是否适用于所有情况,因此可能需要更复杂的解决方案,如Oak Bytes的答案。