一、MP3文件格式解析
1、MP3文件及MPEG概述
MP3文件是由帧(frame)构成的,帧是MP3 文件最小的组成单位。MP3的全称应为MPEG1 Layer-3 音频文件。
MPEG(MovingPictureExperts Group),MPGE音频层指MPGE文件中的声音部分,根据编码质量和复杂程度分为3层,即Layer-1、Layer2、Layer3,对应MP1、MP2、MP3三种格式文件。
2、MP3文件结构
MP3文件分为TAG_V2(ID3V2),Frame, TAG_V1(ID3V1)共3部分。
(1)Frame格式
帧头为4个字节,其结构如下
typedef FrameHeader
{
unsigned intsync:11; //同步信息
unsigned intversion:2; //版本
unsigned intlayer:2; //层
unsigned intprotection:1; // CRC校验
unsigned intbitrate:4; //位率
unsigned intfrequency:2; //采样频率
unsigned intpadding:1; //帧长调节
unsigned intprivate:1; //保留字
unsigned intmode:2; //声道模式
unsigned int mode extension:2; //扩充模式
unsigned intcopyright:1; // 版权
unsigned intoriginal:1; //原版标志
unsigned intemphasis:2; //强调模式
}
HEADER, *LPHEADER;
无论帧多长,每帧播放时间为26ms。MAIN_DATA长度为
Length(MAIN_DATA)=((version==MPEG1)?144:72)*bitrate / frequency + padding;
(2)ID3V1格式
ID3V1存放在MP3文件结尾,共128Bytes,各项信息都顺序存放,不足部分使用’\0’补足,可使用UltraEdit打开查看。
typedef struct tagID3V1
{
char Header[3]; /*标签头必须是"TAG"否则认为没有标签*/
char Title[30]; /*标题*/
char Artist[30]; /*作者*/
char Album[30]; /*专集*/
char Year[4]; /*出品年代*/
char Comment[28]; /*备注*/
char reserve; /*保留*/
char track;; /*音轨*/
char Genre; /*类型*/
}
ID3V1,*pID3V1;
(3)ID3V2格式
ID3V2存放在MP3文件的首部,由1个标签头和若干标签帧组成。
标签头为10个字节,
char Header[3]; /*必须为"ID3"否则认为标签不存在*/
char Ver; /*版本号