参考博客:https://blog.csdn.net/u010650845/article/details/53520426
1.熟悉Mp3格式
Mp3是什么:是一种高效的音频编码方案,用高压缩比将音频编码为较小的文件,基本上保持音质。
对比Mp1、Mp2、Mp3不同技术,作为以后可能的研究的方向。
Mpeg1采用的技术:1~2个声道,采样率32KHz、44.1KHZ、48KHZ;
mp1码率从32kbps ~ 448kbps,mp2码率从32kbps ~ 384 kbps,mp3码率从32kbps ~ 320kbps;后续又出现了mp3pro对应的格式,对应也采用了1~2个声道,采样率为1半,比特率也变成了原来的一般为32kbps ~256kbps
1.1mp3数据组织形式
MP3文件大体上分为三个部分:ID3V2+音频数据+ID3V1
MPEG音频标签分为两种,一种是ID3v1,存在文件尾部,长度128字节,另一种是ID3v2,是对ID3v1的扩展,存在文件头部,长度不定。
ID3v1标签用来描述MPEG音频文件。包含艺术家,标题,唱片集,发布年代和流派。另外还有额外的注释空间。位于音频文件的最后固定为128字节。可以读取该文件的最后这128字节获得标签。
结构如下
1.1.1id3v2头格式
目前来说比较常见的id3v2头格式一般为idv3v2.3头格式,可以表现为,是由一个标签头和若干个标签帧组成,或者由一个扩展的标签头+至少一个标签帧组成。
标签头为10个字节,分别表示为
字节 | 表示 |
---|---|
3 | header(49 44 33) |
1 | 版本号 |
1 | 副版本号 |
1 | 标志(最高3bit) |
4 | 标签大小 |
标签大小共四个字节,每个字节只使用低7位,最高位不使用恒为0,计算时将最高位去掉,得到28bit的数据,计算公式如下:
Size=(Size[0]&0x7F)*0x200000+(Size[1]&0x7F)*0x400+(Size[2]&0x7F)*0x80+(Size[3]&0x7F)
int label_frame_size;
label_frame_size=((Size[0]&0x7F)<<21)
+ ((Size[1]&0x7F)<<14))
+ ((Size[2]&0x7F)<<7)
+ (Size[3]&0x7F);
1.1.1id3v1头格式
2数据帧的帧头
3.mp3音频参数的计算
采样率决定了每一秒音频的采样点数,直接决定了pcm对应数据的raw大小。MP3为音频压缩格式,下面举一个例子来分析如何计算各参数:
- mpge1.3layer对应的帧的采样个数是1152个采样点,那么每一帧的采样时间为 = (1152)/采样率(32、44.1、48KHz)。通过计算得到的每一帧的采样时间为
采样频率 | 每一帧的时间 |
---|---|
44.1KHz | 1152/44.1*1000 = 26ms |
48KHz | 1152/48*1000 = 24ms |
- 比特率是根据表格来确定的,上面已经说出了范围,具体的取值根据数据帧头的前四个字节获取。
- frame对应的大小计算 = (bitrate1152)/采样率(32、44.1、48KHz)/ 8得出字节数。例如对应128kbps的frame大小
= ((1152/8128K)/44.1K+0=417字节 - frame对应的pcm数据大小 = (1152 * 16)/8*2 = 4K字节
- 说明了mp3确实有11倍的压缩音质效果