mp3参数解析

MP3 文件类型Id3V1,Id3V2;

ID3V1:位于文件尾部,不支持封面,不支持特殊字符了;

ID3V2: 位于文件头,支持任意长度,支持封面和特殊字符;

MP3:CBR 固定码率。和 VBR可变码率。

解析ID3V2:

第一针数据的位置在标签头和标签帧的后边;

解析标签头:

1、标签头

在文件的首部顺序记录 10 个字节的 ID3V2.3 的头部。数据结构如下:

 char Header[3];     /*必须为"ID3"否则认为标签不存在*/

 char Ver;     /*版本号 ID3V2.3 就记录 3*/

 char Revision;     /*副版本号此版本记录为 0*/

 char Flag;     /*存放标志的字节,这个版本只定义了三位,稍后详细解说*/

 char Size[4];     /*标签大小,包括标签头的 10 个字节和所有的标签帧的大小*/

 

2 计算标签帧大小,注意每个字节只取7位,然后向右移动也是移动7位:

例如:257 : 0000000100000001;那标签的那四个字节就是这个样子的:

0000000 00000000 00000010 00000001;

 

(Uint)(size(0)&0x7f <<21)+(Uint)(size(1)&0x7f <<14)+(Uint)(size(2)&0x7f <<7)+(Uint)(size(3)&0x7f );得到的就是257;所以标签头和标签帧的总大小257字节;

真正的数据,在第258字节;

 

3 每个标签帧都有一个 10 个字节的帧头和至少一个字节的不固定长度的内容组成;每个标签帧里也同样都有一个标签头和帧内容;内部标注了标题,歌手,专辑等信息;

 

4解析帧参数

frameID 4个字节;每个不同的位有不同的含义;

读这四个字节的某些位,拿到上边的结构体中的信息,然后去查表,每一段字段代表的是什么意思;譬如版本信息拿到 version = 0 ,代表MPEG2.5; layer字段的

根据得到的位率值与layer和mpeg值得对应关系,建立一个表,查表获取比特率

 

 

根据MPEG 的type类型获取对应的采样率;

 

5  mp3 文件的编码一帧所用字节长度在标准文档(某些网络文档)里是有一个说明的;可以根据这个计算出编码一帧的所用的PCM长度;

MP3文件有一个标准的格式,这个格式就是包括384576、或者1152个采样点(随MPEG的版本和层不同而不同)的帧;(图片来源百度文库)

 

 

 

6帧头格式:

 

 

 


 

posted on 2022-05-25 17:04  邗影  阅读(441)  评论(0编辑  收藏  举报

导航