1 文件格式

MP3文件格式四部分,按顺序排列如下:

ID3V2 
包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量

Frame 
音频帧序列

APEV2 
包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量

ID3V1 
包含了作者,作曲,专辑等信息,长度为128BYTE

1.1 ID3 V1

ID3 V1内容按顺序排列如下:

名称 
位置(byte)

标签标志'TAG' 
0~2

标题 
3~32

艺术家 
33~62

专辑 
63~92

年代 
93~96

注释 
97~126

流派 
127

//note:因ID3 V1未规定填充内容的格式,在某些情况下会引起问题。如台湾常常采用big5编码,如果当成ASCII码处理就会出错。

1.2 ID3 V2

Tag Header 
10 bytes

Tag Frame 序列 
长度不定

1.2.1 Tag Header格式

标识 
3 bytes 
必须为“ID3”

Version 
1 byte 
ID3V2.3 就记录3

Revision 
1 byte 
记录为0

Flag 
1 byte 
标志是否存在extended Header等

Size 
4 bytes 
标签大小,包括标签头的10 个字节

1.2.2 Tag Frame格式

Frame ID对照表如下:

AENC Audio encryption 
APIC Attached picture 
COMM Comments 
COMR Commercial frame 
ENCR Encryption method registration 
EQUA Equalization 
ETCO Event timing codes 
GEOB General encapsulated object 
GRID Group identification registration 
IPLS Involved people list 
LINK Linked information 
MCDI Music CD identifier 
MLLT MPEG location lookup table 
OWNE Ownership frame 
PRIV Private frame 
PCNT Play counter 
POPM Popularimeter 
POSS Position synchronisation frame 
RBUF Recommended buffer size 
RVAD Relative volume adjustment 
RVRB Reverb 
SYLT Synchronized lyric/text 
SYTC Synchronized tempo codes 
TALB Album/Movie/Show title 
TBPM BPM (beats per minute) 
TCOM Composer 
TCON Content type 
TCOP Copyright message 
TDAT Date 
TDLY Playlist delay 
TENC Encoded by 
TEXT Lyricist/Text writer 
TFLT File type 
TIME Time 
TIT1 Content group description 
TIT2 Title/songname/content description 
TIT3 Subtitle/Description refinement 
TKEY Initial key 
TLAN Language(s) 
TLEN Length 
TMED Media type 
TOAL Original album/movie/show title 
TOFN Original filename 
TOLY Original lyricist(s)/text writer(s) 
TOPE Original artist(s)/performer(s) 
TORY Original release year 
TOWN File owner/licensee 
TPE1 Lead performer(s)/Soloist(s) 
TPE2 Band/orchestra/accompaniment 
TPE3 Conductor/performer refinement 
TPE4 Interpreted, remixed, or otherwise modified by 
TPOS Part of a set 
TPUB Publisher 
TRCK Track number/Position in set 
TRDA Recording dates 
TRSN Internet radio station name 
TRSO Internet radio station owner 
TSIZ Size 
TSRC ISRC (international standard recording code) 
TSSE Software/Hardware and settings used for encoding 
TYER Year 
TXXX User defined text information frame 
UFID Unique file identifier 
USER Terms of use 
USLT Unsychronized lyric/text transcription 
WCOM Commercial information 
WCOP Copyright/Legal information 
WOAF Official audio file webpage 
WOAR Official artist/performer webpage 
WOAS Official audio source webpage 
WORS Official internet radio station homepage 
WPAY Payment 
WPUB Publishers official webpage 
WXXX User defined URL link frame

1.3 APE V2

APE Tags Header 
32 bytes

APE Tag Item 1 
10 bytes

APE Tag Item 2 
10 bytes

… 
10 bytes

APE Tag Item n-1 
10 bytes

APE Tag Item n 
10 bytes

APE Tags Footer 
32 bytes

APE tag items should be sorted ascending by size. When streaming, parts of the APE tags can be dropped to reduce danger of drop outs between titles. This is not a must , but strongly recommended. Actually the items should be sorted by importance/byte, but this is not feasible. Only break this rule if you add less important small items and you don't want to rewrite the whole tag. An APE tag at the end of a file (strongly recommended) must have at least a footer, an APE tag in the beginning of a file (strongly unrecommended) must have at least a header. When located at the end of an MP3 file, an APE tag should be placed after the the last frame, just before the ID3v1 tag (if any).

1.4 Frame

Frame Header 
4 bytes

Side Information 
单声道17bytes,双声道32bytes

Frame Data 
不定长

1.4.1 Frame Header

AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM

1.4.2 Side information

main_data_begin: 表示一帧数据main_data开始的位置。表示main data相对于该帧同步头的负偏移。这里涉及到bit reservior技术:即把当前帧未使用完的bit数,留给后面需要的帧使用,这就导致每一帧的main data开始的位置,可能在它的Header和side information之前。

Private_bits:留作私用。

Scfsi:表明两个granule是否使用相同的缩放因子。

scalefac_compress:被编码的缩放因子所占的比特数。

Part_2_3_length:表示main data中scalefactor和Huffman数据所占的比特数。

Global_gain:全局量化步长。

window_switching_flag、 block_bype和mixed_block_type:当window_switching_flag未置位时,block_type为0;当其置位时, block_type由mixed_block_type[gr][ch]指定,如下图所示:

当block_type为0、1、3时,为长块;为2时,为短块。mixed_block_flag[gr][ch]为1时,为混合块。

Table_select、Big_value、count1_table_select、Region0_count和region1_count:参考Huffman码表选择。

subblock_gain:短窗量化时所用的增益偏移量。

preflag和scalefac_scale:反量化时用到的变量。

2 编码原理及流程

以单声道而言,MP3一帧包含1152个声音取样,一帧分为2节(granule)。mp3编码时,首先将原始的PCM数据送入滤波器组,分成32个等频宽的子频带,然后再通过MDCT(modified discrete coding transform),将每个子带,转换成18个次频带。然后根据第二声学模型提供的SMR(signal-to-mask ratio),对每一个子频带信号,做位元分配和编码。

Step 1:prediction

根据第二声学模型做预测,预测结果得到的SMR会作为位元分配的依据。第二声学模型中几个重要依据如下:

静音阈值曲线、时域掩蔽效应、频域掩蔽效应、临界频带。

Step 2:子带分离(Analysis Subband Filter)

首先将原始的PCM数据送入滤波器组,分成32个等频宽的子频带。

 Step 3:MDCT

MDCT滤波器将32个子带中每一个子带的的信号在频域上进一步划分,长块进行18点(18个频域采样点)的MDCT变换,短块进行6点(6个频域采样点)的MDCT变换,以窗为单位分3次进行。MDCT包括三部分:MDCT窗框、MDCT、长窗假象处理。

(a)MDCT加窗

4种窗及使用情形如下:

窗框的选择依据第二声学模型,规则通常如下:子频带音频讯号稳定时,采用长窗来提供最细的频谱解析度;子频带变动较大时,采用短窗提供较大的时域解析度。决定好窗框以后,就可以以窗框为单位进行MDCT运算。如果是长窗,需要针对混跌做假象处理。

(b)MDCT

作用:将时域信号转换成频域信号

In the case of long blocks ( block_type 0,1,3 ) there are 36 coefficents in the time domain and 18 in the frequency domain.

In the case of short blocks (block_type 2 ) there are 3 transformations with short length. This leads to 12 coefficents in the time and 6 in the frequency domain.

(c)长窗假象处理(混叠消除)

什么是长窗假象:使用长窗时,频谱上可见邻近的子频带间有明显的重叠现象,处于重叠区间的讯号将会同时影响两个子频带。

假象处理的方式:将处在相对应位置的频线之能量做一定比例的增减,蝶形运算。

附:Step2和Step3的综合图为:

Step 4: Joint Stereo(联合立体声)

编码依据:2个声道存在相干性,方法有:

Intensity Stereo(IS):Human hearing is predominantly less acute at perceiving the direction of certain audio frequencies

Mid/Side (M/S) stereo :The mid channel is L + R. The side channel is L − R

Step 5:位元分配(bit allocation)

根据第二声学模型的预测结果,进行位元分配;位元分配是一个反复调整的过程。

Step 6:量化

以缩放因子频带为单位,进行量化。缩放因子频带内使用相同的缩放因子。

mp3中一帧数据含有1152个PCM数据,分成2节(granual)。每节含有576个PCM数据,这576个值在不同的节类型有不同的定义。如下所述:

(a)该节为长块:这576个值代表576条频率线上的值,是时域上的576个pcm值经过时频变换的结果。这576条频率线从低到高分成32个子带,每个子带含18条频率线。同时,也将这576个数据分成若干个缩放因子带,每个缩放因子带共用一个缩放因子。长块的缩放因子带在44kHz按如下表格划分,其中,418-575不属于任何一个缩放因子带,使用系统提供的默认缩放因子:

(b)该节为短块:这576个值代表192条频率线的值,192条频率线分32个子带,每条子带包括6条频率线。每条频率线有3个值,分别属于3个窗 (windows_0,windows_1,windows_2)。192条频率线也被分成若干缩放因子带,在44.1kHz时划分如下图,其中,136-191使用默认缩放因子。

这576个值得排列顺序为,先是按缩放因子带从低到高排列;缩放因子带内,按windows_0,windows_2,windows_3排列;每一个window中,频率线从低到高排列。

(c)该节为混合块: 解出来的值分2个部分,第一部分(前36个值)是长块,代表36条频率线;第二部分(后540个值)为短块,代表180个频率线。2部分的排列方式分别于长块和短块相同。

综上,有:

附: 缩放因子

缩放因子带在逆量化时共用的缩放因子,缩放因子被编码于main_data中,欲解码缩放因子,首先得知道缩放因子所占的比特数,在side information的scale_compress[gr][ch]提供这样的信息,所用的bit数通过查如下表才能得到。slen 1和slen 2针对那些缩放因子带,由块类型决定。

Step 7:Huffman编码

(a)Huffman码表选择

当从一个缩放因子频带过渡到另一个缩放因子频带时,Huffman码表可能发生改变;需要进行编码的576个值分为大值区、小值区、零值区:

不同的区域使用不同的Huffman表编码,大值区每2个值一起编码,小值区每4个值一起编码,零值区无需编码,大值区以缩放因子频带为单位,分为3个region。每个region使用不同的Huffman表。一共有32个Huffman表供选择。

(b)huffman编码(略)

注:大值区的Huffman表有一个参数linbits,用来指定Huffman表是否能用来编码大于15的数。

Step 8:生成帧

加上Frame Header和Side Information,生成帧。

3 解码流程

preprocessing:主要完成Header和side information的解码。

Huffman decoding:选择Huffman table,进行解码。

Requantization:逆量化,短块和长块使用不同的公式。公式如下:

Reodering:由于编码时对短块和混合块中的短块进行了重排,具体见编码部分,故解码时需要重新排序

Stero decoding:立体声解码。

Alias reduction:长块间需要消除混跌。

IMDCT:每做一次MDCT产生36个输出。昨晚IMDCT后,需再做加窗运算。IMDCT做完后,再无长块、短块概念,得到的结果是从低到高的32个子带,每个子带18个值。

子带合成滤波:先是把32个子带中,每个子带取一个数据,组成的32个值送入一个1024的FIFO中;接着把这1024个值中取出一半,对其做加窗运算,加窗系数由MP3官方协议的表格提供;最后对加窗结果进行叠加得到32个时域PCM输出。

4 附录

ID3 V2官网:http://www.id3.org/id3v2.3.0

APE V2官网:http://wiki.hydrogenaudio.org/index.php?title=APEv2_specification

ISO/IEC 11172-3、ISO/IEC 13818-3:

MP3文件格式与编码原理解码流程详解相关推荐

  1. FFmpeg音频解码流程详解及简单demo参考

    本文主要讲解FFmpeg的音频解码具体流程,API使用.最后再以一个非常简单的demo演示将一个mp3格式的音频文件解码为原始数据pcm文件. 本文主要基于FFmpeg音频解码新接口. 一.FFmpe ...

  2. 【H.264/AVC视频编解码技术详解】八、 熵编码算法(2):H.264中的熵编码基本方法、指数哥伦布编码

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  3. 负载均衡原理与实践详解 第五篇 负载均衡时数据包流程详解

    负载均衡原理与实践详解 第五篇 负载均衡时数据包流程详解 系列文章: 负载均衡详解第一篇:负载均衡的需求 负载均衡详解第二篇:服务器负载均衡的基本概念-网络基础 负载均衡详解第三篇:服务器负载均衡的基 ...

  4. 【H.264/AVC视频编解码技术详解】二. 主流视频编码标准的发展

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  5. 各种音视频编解码学习详解之 编解码学习笔记(四):Mpeg系列——Mpeg 4

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...

  6. 【H.264/AVC视频编解码技术详解】二十三、帧间预测编码(1):帧间预测编码的基本原理

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  7. 【H.264/AVC视频编解码技术详解】四. 常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  8. Cookie的工作原理和应用详解

    Cookie的工作原理和应用详解 1. Cookie 原理 1.1 Cookie 背景信息 1.2 Cookie 工作原理 1.3 Cookie 创建.获取.修改 1.4 Cookie 共享范围 1. ...

  9. 各种音视频编解码学习详解之 编解码学习笔记(十三):容器

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...

最新文章

  1. 优化 Web 服务器计算机和特定应用程序的配置文件以符合您的特定需要
  2. [NOI2014]魔法森林题解
  3. 应该了解的Openstack命令
  4. 扩展系统功能--装饰模式
  5. mahout推荐10-尝试GroupLens数据集
  6. 【采用】无监督核心聚类算法
  7. mysql5.7.25数据库安装
  8. 360安全卫士 导致MySQL 5.0.24 自动关闭
  9. 从零开始山寨Caffe·叁:全局线程管理器
  10. UVA12015 Google is Feeling Lucky【最值+排序】
  11. python基础入门第0天
  12. (转)java中使用memcache
  13. 一起写框架-控制反转(Ioc)概述(二)
  14. java生成pdf表格_java生成pdf文件 --- Table
  15. 基于Java毕业设计中国古诗词学习平台源码+系统+mysql+lw文档+部署软件
  16. 解决AD13不能复制原理图的问题
  17. Android进程保活、拉活方案
  18. CCNA WAN 帧中继
  19. 一师一优课计算机课程,教育部一师一优课在线会客室在南京成功直播
  20. React 常见面试题

热门文章

  1. java中常见的线程安全集合类
  2. 超频基础技术教程学习
  3. 大模型中的「罗翔老师」!北大兔展联合团队搞出ChatLaw,发布即登顶热榜,可提供法律咨询...
  4. verilog实现十字路口交通灯(含课设报告)
  5. 小学信息科技编程题C语言,小学信息技术试题.doc
  6. 2021-07-17,CocosCreator的快捷键与基本操作
  7. 计算机高校应用现状的参考文献,学期计算机论文,关于高校专业应用为导向的小学期计算机课程改革方案相关参考文献资料-免费论文范文...
  8. 小红书笔记下沉怎么做?小红书笔记屏蔽怎么做?
  9. vue中的富文本框的使用(vue-quill-editor)
  10. MATLAB绘图笔记——画圆的几种方法