在日常生活中,MP3格式使用的非常频繁。
那么到底什么是MP3呢
MP3是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III),简称为MP3。它被设计用来大幅度地降低音频数据量。利用 MPEG Audio Layer 3 的技术,将音乐以1:10 甚至 1:12 的压缩率,压缩成容量较小的文件,而对于大多数用户来说重放的音质与最初的不压缩音频相比没有明显的下降。它是在1991年由位于德国埃尔朗根的研究组织Fraunhofer-Gesellschaft的一组工程师发明和标准化的。用MP3形式存储的音乐就叫作MP3音乐,能播放MP3音乐的机器就叫作MP3播放器。
在详细研究了参考的3篇文章,我大概总结了MP3的格式结构
1. Tag
Tag包含的信息有,整个Tag的长度信息,以及对MP3的一些描述信息。
下图中的,作者,标题等信息都在这个Tag里面,只要我们解析了Tag就可以获取到这些信息。
2. Stream
Stream就是一个个流,是压缩后的。
也包括StreamHeader + StreamData,我们可以根据这个StreamHeader来解析StreamData,然后将StreamData交给声卡,让其来播放。
3. Tail
Tail其实就是
ID3V1 | 包含了作者,作曲,专辑等信息,长度为128BYTE。 |
但不是所有的MP3文件都是标注格式,有的MP3格式没有这个ID3V1,所以当碰到了,也无需惊讶。。
4.开源库libmad
一个MP3文件,我想要解析它。得到所有的信息,每一个块的内容具体是什么,我想要知道。
所以我研究了libmad开源库,在windows编译后,再加上网上的一些开源代码。做了一个MP3格式侦探的工具。
这里记录一下libmad的使用的大体过程:
libmad不断寻找“FF E0”,作为一个Stream的头标识,他会跳过Tag字段。
参考:
1. http://blog.csdn.net/fulinwsuafcie/article/details/8972346
2. http://blog.csdn.net/sunshine1314/article/details/2514322
3. http://blog.csdn.net/wwv386646959/article/details/40868035