语音基础知识:/editor/html/111210192
音频封装格式
无损压缩
无损压缩指的是在无损格式之间的压缩(转换),无论压缩(转换)成什么格式,音质都是相同的,并且都能还原成最初同样的文件。平时所说的无损均是指无损压缩,没有无损码率的说法。对于各种格式的压缩都是对应着一种算法(或者说编码),播放的时候需要有解码器进行译码,而且不同的解码器也可能会影响解压出来的文件完整性。常见的无损格式有:
wav:微软公司的一种声音文件格式,是无压缩的最接近真实声音的格式(其次是midi),支持多采样率多量化精度。所有的无损格式本质都是wav的压缩,在播放时会转回wav。
flac:Free Lossless Audio Coded,是国际通用格式,特点是压缩比高,编码算法也相当成熟,当flac文件受损时依然能正常播放。另外,该格式也是最先得到广泛硬件支持的无损格式。
ape:使用Monkey‘s Audio软件对CD抓轨而转换成的文件格式,但优势并不突出,解码较慢。
wma-lossless:也是微软公司出品,特点是压缩比高,但未成为主流。
aiff:苹果公司出品,是Apple苹果电脑上面的标准音频格式。
DSD:Sony大法的,不是很了解,欣赏不来辣种文化,但就说单纯的冲,还是要冲的。
有损压缩
有损压缩指的是声音信息在压缩过程中发生了丢失,且所丢失的声音无法用采样率和位数表示出来。但特点就是压缩后的文件变的很小,常在流媒体中使用。常见的有损格式有:
mp3:模拟人耳听觉研究出的一种复杂算法,被称为“心理声学模型”。它通过抽取音频中的一些频段来达到提高压缩比,降低码率,减少所占空间,但同时声音的细节如人声的情感、后期的混响等等都已经发生变形。盲听的话也很难较快地分辨出wav和mp3,需要借助设备。mp3目前是最为普及的声频压缩格式,可以最大程度地保留压缩前的音质。
wma:微软公司力作,不开放,哟版权。特点是在较低比特率下(如64kbps),wma可以在与mp3相同的音质条件下获得更小的体积。并且在超低比特率(如16kbps),wma音质比mp3要好得多。
aac:苹果电脑上的声音文件储存格式。
ogg:完全免费、开放和没有专利限制,但普及性较差。
m4a:M4A是MPEG-4 音频标准的文件的扩展名,最常用的.m4a文件是使用AAC格式的(文件),不过其他的格式,比如Apple Lossless甚至mp3也可以被放在.m4a容器里(TC注:这个container的概念类似于.mkv文件)。可以安全地把只包含音频的.mp4 文件的扩展名改成.m4a。
*************aac***********
我们采用的是脉冲代码调制编码,即PCM编码。它是一种将模拟语音信号转换为数字信号的编码方式,是无损非压缩编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码(最后输出一组二进制数据,就是PCM格式的数据,该文件没有附加的文件头和文件结束标志)。PCM又称为脉冲调制数据,是计算机可以播放的最原始数据。
ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。且这两种的header的格式也是不同的,目前一般编码后的和抽取出的都是ADTS格式的音频流。
AAC原始流能让ffmpeg软解或系统硬解码,需要在ES流前面加上ADTS头,打包成ADTS的格式,一般是在AAC ES流前添加7个字节的ADTS header。
AAC音频文件的每一帧由ADTS Header和AAC Audio Data组成。/zhangxuan/p/8809245.html
一般情况下ADTS的头信息是7个字节,分为2部分:
抽样:对模拟信号进行周期性扫描,把时间上连续的信号变成时间上离散的信号;量化:用一组规定的电平,把瞬时抽样值用最接近的电平值来表示,通常是用二进制表示;编码:用一组二进制码组来表示每一个有固定电平的量化值;
采样后的数据大小 = 采样率值×采样大小值×声道数 bps。
一个采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的WAV文件,它的数据速率=44.1K×16×2 bps=1411.2 Kbps= 176.4 KB/s。
AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术。由Fraunhofer IIS、Dolby Laboratories、AT&T、Sony等公司共同开发,目的是取代MP3格式。2000年,MPEG-4标准出台,AAC重新集成了其它技术(PS,SBR),为区别于传统的MPEG-2 AAC,故含有SBR或PS特性的AAC又称为MPEG-4 AAC。
AAC是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如PS,SBR等),衍生出了LC-AAC,HE-AAC,HE-AACv2三种主要的编码,LC-AAC就是比较传统的AAC,相对而言,主要用于中高码率(>=80Kbps),HE-AAC(相当于AAC+SBR)主要用于中低码(<=80Kbps),而新近推出的HE-AACv2(相当于AAC+SBR+PS)主要用于低码率(<=48Kbps),事实上大部分编码器设成<=48Kbps自动启用PS技术,而>48Kbps就不加PS,就相当于普通的HE-AAC。
AAC共有9种规格,以适应不同的场合的需要:
MPEG-2 AAC LC 低复杂度规格(Low Complexity)--比较简单,没有增益控制,但提高了
编码效率,在中等码率的编码效率以及音质方面,都能找到平衡点
MPEG-2 AAC Main 主规格
MPEG-2 AAC SSR 可变采样率规格(Scaleable Sample Rate)
MPEG-4 AAC LC 低复杂度规格(Low Complexity)------现在的手机比较常见的MP4文件中的音频部份就包括了该规格音频文件
MPEG-4 AAC Main 主规格 ------包含了除增益控制之外的全部功能,其音质最好
MPEG-4 AAC SSR 可变采样率规格(Scaleable Sample Rate)
MPEG-4 AAC LTP 长时期预测规格(Long Term Predicition)
MPEG-4 AAC LD 低延迟规格(Low Delay)
MPEG-4 AAC HE 高效率规格(High Efficiency)-----这种规格适合用于低码率编码,有Nero ACC 编码器支持
目前使用最多的是LC和HE(适合低码率)。流行的Nero AAC编码程序只支持LC,HE,HEv2这三种规格,编码后的AAC音频,规格显示都是LC。HE其实就是AAC(LC)+SBR技术,HEv2就是AAC(LC)+SBR+PS技术;
AAC音频文件(传输流)格式有ADIF和ADTS:ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。
adts_fixed_header();固定的头部
adts_variable_header();可变的头部
syncword:同步头 总是0xFFF, all bits must be 1,代表着一个ADTS帧的开始
ID:MPEG标识符,0标识MPEG-4,1标识MPEG-2
Layer:always: '00'
protection_absent:表示是否误码校验。Warning, set to 1 if there is no CRC and 0 if there is CRC
profile:表示使用哪个级别的AAC,如01 Low Complexity(LC)--- AAC LC。有些芯片只支持AAC LC 。
在MPEG-2 AAC中定义了3种:
sampling_frequency_index:表示使用的采样率下标,通过这个下标在Sampling Frequencies[ ]数组中查找得知采样率的值。
channel_configuration:表示声道数
frame_length: 一个ADTS帧的长度包括ADTS头和AAC原始流.
adts_buffer_fullness:0x7FF 说明是码率可变的码流
在AAC中,原始数据块的组成可能有六种不同的元素:
SCE: Single Channel Element单通道元素。单通道元素基本上只由一个ICS组成。一个
原始数据块最可能由16个SCE组成。
CPE: Channel Pair Element 双通道元素,由两个可能共享边信息的ICS和一些联合立体
声编码信息组成。一个原始数据块最多可能由16个SCE组成。
CCE: Coupling Channel Element 藕合通道元素。代表一个块的多通道联合立体声信息
或者多语种程序的对话信息。
LFE: Low Frequency Element 低频元素。包含了一个加强低采样频率的通道。
DSE: Data Stream Element 数据流元素,包含了一些并不属于音频的附加信息。
PCE: Program Config Element 程序配置元素。包含了声道的配置信息。它可能出现在
ADIF 头部信息中。
FIL: Fill Element 填充元素。包含了一些扩展信息。如SBR,动态范围控制信息等。
术语说明:
AAC: Advanced Audio Coding 高级音频编码
AAC LC: AAC with Low Complexity AAC的低复杂度配置
AAC plus: 也叫HE-AAC, AAC+,MPEG4 AAC LC加入SBR模块后形成的一个AAC版本
MPEG:Motion Picture Expert Group
IMDCT:反离散余弦变换
ADIF:Audio Data Interchange Format 音频数据交换格式
ADTS:Audio Data Transport Stream 音频数据传输流
SCE: Single Channel Element单通道元素
CPE: Channel Pair Element 双通道元素
CCE: Coupling Channel Element 藕合通道元素
DSE: Data Stream Element 数据流元素
PCE: Program Config Element 程序配置元素
FIL: Fill Element 填充元素
ICS: Individual Channel Stream 独立通道流
PNS: Perceptual Noise Substitution 知觉噪声替换
SBR: Spectral Band Replication 频段复制
TNS: Temporal Noise Shaping 瞬时噪声整形
ch:channel 通道
PS:parametric stereo 参数立体声
SBR:Spectral Band Replication 频段复制
********MP3*********
Layer-3音频文件,MPEG(Moving Picture Experts Group) 在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG音频文件是MPEG1 标准中的声音部分,也叫MPEG 音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3 这三种声音文件,并根据不同的用途,使用不同层次的编码。MPEG 音频编码的层次越高,编码器越复杂,压缩率也越高,MP1 和MP2 的压缩率分别为4:1 和6:1-8:1,而MP3 的压缩率则高达10:1-12:1,也就是说,一分钟CD 音质的音乐,未经压缩需要10MB的存储空间,而经过MP3 压缩编码后只有1MB 左右。不过MP3 对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3采取了“感官编码技术”,即编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3 文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。
ID3V2.
每个ID3V2.3 都一个标签头和若干个标签帧或一个扩展标签头组成。关于曲目的信息如标题、作者等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。标签头和标签帧一起顺序存放在MP3 文件的首部。
标签头:位于文件开始处,长度为10字节,结构如下:
标签帧:每个标签帧都有10个字节的帧头(和标签头不是一个东西,虽然他们刚好都是10字节,标签头只有一个,每个标签帧都有一个帧头)和至少一个字节的内容构成,标签帧与标签头/其他标签帧无特殊字节分割,只能通过帧头信息来确定帧内容的大小。
标签帧的帧头结构:
MP3音频数据(除了ID3v2和ID3v1之外的数据)
MP3的帧格式:每个帧都有一个帧头Header,长度是4Byte(32bit),帧头后面可能有两个字节的CRC 校验值,这两个字节的是否存在决定于Header 信息的第16bit,为0 则帧头后面无校验,为1 则有校验,校验值长度为2 个字节,紧跟在Header 后面,接着就是帧的实体数据了。
帧头:帧头长4字节,对于固定位率的MP3文件,所有帧的帧头格式一样,如下:
V1 - MPEG 1 V2 - MPEG 2 and MPEG 2.5
L1 - Layer 1 L2 - Layer 2 L3 - Layer 3
"free"表示位率可变 "bad" 表示不允许值
采样频率
2
采样频率,对于MPEG-1:00-44.1kHz 01-48kHz 10-32kHz 11-未定义
对于MPEG-2:00-22.05kHz 01-24kHz 10-16kHz 11-未定义
对于MPEG-2.5:00-11.025kHz01-12kHz 10-8kHz 11-未定义
帧长调节
1
用来调整文件头长度,0-无需调整,1-调整,具体调整计算方法见下文。
保留字
1
没有使用。
声道模式
2
第4字节
表示声道,00-立体声Stereo 01-Joint Stereo 10-双声道 11-单声道
扩充模式
2
当声道模式为01是才使用。
版权
1
文件是否合法,0-不合法 1-合法
原版标志
1
是否原版, 0-非原版 1-原版
强调方式
2
用于声音经降噪压缩后再补偿的分类,很少用到,今后也可能不会用。
00-未定义 01-50/15ms 10-保留 11-CCITT J.17
MP3帧长取决于位率和频率,
计算帧长度
我们首先区分两个术语:帧大小和帧长度。帧大小即每帧采样数表示一帧中采样的个数,这是恒定值。其值如下表所示
帧长度是压缩时每一帧的长度,包括帧头。它将填充的空位也计算在内。LayerI的一个空位长4字节,LayerII和LayerIII的空位是1字节。当读取MPEG文件时必须计算该值以便找到相邻的帧。注意:因为有填充和比特率变换,帧长度可能变化。
从头中读取比特率,采样频率和填充的值后可以进行计算,
LyaerI使用公式:
帧长度(字节) = (( 每帧采样数/ 8 * 比特率 ) / 采样频率 ) + 填充 * 4
LyerII和LyaerIII使用公式:
帧长度(字节)= (( 每帧采样数/ 8 * 比特率 ) / 采样频率 ) + 填充
例:
LayerIII 比特率 128000,采样频率 44100,填充0 =〉帧大小 417字节;
如图 2.3中,比特率为128K,采样率为44.1K,填充0,则其帧长度为:
(1152 / 8 * 128K)/44.1K = 417 (字节)
每帧的持续时间
每帧的持续时间可以通过计算获得,下面给出计算公式
每帧持续时间(毫秒) = 每帧采样数 / 采样频率 * 1000
如图 2.3中,其每帧时间为:
1152 / 44.1K * 1000 = 26.12 (约等于26ms)
如果是MPEG2 Layer III 采样率为16KHz的话那一帧要持续36毫秒,这个相差还是蛮大的,所以还是应该通过计算来获的。
CRC校验
如果帧头的校验位为0,则帧头后就有一个16位的CRC值,这个值是big-endian的值,把这个值和该帧通过计算得出的CRC值进行比较就可以得知该帧是否有效。
帧头后面是可变长度的附加信息,对于标准的MP3文件来说,其长度是32字节,紧接其后的是压缩的声音数据,当解码器读到此处时就进行解码了。
对于mp3来说现在有两种编码方式,一种是CBR,也就是固定位率,固定位率的帧的大小在整个文件中都是是固定的,只要知道文件总长度,和从第一帧帧头读出的信息,就都可以通过计算得出这个mp3文件的信息,比如总的帧数,总的播放时间等等,要定位到某一帧或某个时间点也很方便,这种编码方式不需要文件头,第一帧开始就是音频数据。另一种是VBR,就是可变位率,VBR是XING公司推出的算法,所以在MP3的FRAME里会有“Xing"这个关键字(也有用"Info"来标识的),它存放在MP3文件中的第一个有效帧的数据区里,它标识了这个MP3文件是VBR的。同时第一个帧里存放了MP3文件的帧的总个数,这就很容易获得了播放总时间,同时还有100个字节存放了播放总时间的100个时间分段的帧索引,假设4分钟的MP3歌曲,240S,分成100段,每两个相邻INDEX的时间差就是2.4S,所以通过这个INDEX,只要前后处理少数的FRAME,就能快速找出我们需要快进的帧头。
VBR文件头位于MP3文件中第一个有效帧的数据区。有两种格式,一种是常见的XINGHeader(头部包含字符‘Xing’),另一种是VBRIHeader(头部包含字符‘VBRI’)鉴于VBRIHeader不常见,下面只说XINGHeader:
XING Header的起始位置,相对于第一帧帧头的位置,单位是字节
36-39 "Xing" 文件为MPEG1并且不是单声道(大多数VBR的mp3文件都是如此)
21-24 "Xing" 文件为MPEG1并且是单声道
21-24 "Xing" 文件为MPEG2并且不是单声道
13-16 "Xing" 文件为MPEG2并且是单声道
VBR文件头结构:
ID3v1
MP3的结尾,固定128字节;ID3V1 的各项信息都是顺序存放,没有任何标识将其分开,比如标题信息不足30 个字节,则使用''\0''填充。
MP3音乐类别:
实例分析:/u010650845/article/details/53520426
********wma********
wma是微软出的有损压缩,不对外开放,有版权限制,下面是头部解析:
******wav**********
无损格式
RIFF全称为资源互换文件格式(Resources Interchange File Format),RIFF文件是windows环境下大部分多媒体文件遵循的一种文件结构,常见的如WAV文件、AVI文件等。RIFF可以看成一种树状结构,其基本组成单元为LIST和CHUNK,分别如树的节点和叶子。
在RIFF文件中,数据保存的基本单元是CHUNK,可用于保存音视频数据或者一些参数信息,LIST相当于文件系统的目录,可以包含多个CHUNK或者多个LIST。
1、FOURCC
一个FOURCC(four character code)是一个占4个字节的数据,一般表示4个ASCII字符。在RIFF文件格式中,FOURCC非常普遍,LISTtype, chunkid, 起始标识等信息都是用FOURCC表示的。FOURCC一般是四个字符,如”abcd”这样的形式,也可以三个字符包含一个空格,如”abc ”这样的形式。
2、CHUNK
一个CHUNK数据块的数据结构如下:
ChunkID ChunkSize ChunkData
ChunkID是一个FOURCC,标识该CHUNK的名称,类似于windows文件系统中的文件名。 ChunkSize占用4个字节,表示ChunkData部分的数据内容大小,以字节为单位。ChunkData则是CHUNK中实质性的内容,保存的是CHUNK的具体数据内容。一个CHUNK保存的数据可以是关于声音文件的编码方式、音视频采样等信息,也可以是音频或视频数据。具体表示是哪类数据则通过ChunkID来标识。
3、LIST
一个LIST数据块的数据结构如下:
“LIST” ListSize ListType ListData
“LIST”也是一个FOURCC,而且是固定的,每个LIST都是以“LIST”为开头。ListSize占用4个字节,表示ListType和ListData两部分加在一起的大小。ListType是一个FOURCC,是对LIST具体包含的数据内容的标识。而ListData则是该LIST的数据内容区,有CHUNK和子LIST组成,它们的个数和组成次序可以是不确定的。
4、RIFF文件头
RIFF文件头的数据结构如下:
“RIFF” FileSize FileType FileData
“RIFF”也是一个FOURCC,用于标识该文件是一个RIFF格式的文件。FileSize是一个4字节的数据,给出文件的大小,但仅包括FileType和FileData两部分。FileType是一个FOURCC,用来说明文件类型,如”WAV”, “AVI”等。FileData部分表示文件的具体内容,可以是LIST也可以是CHUNK.
wav通常用来保存PCM
格式的原始音频数据,所以通常被称为无损音频。但是严格意义上来讲,WAV
也可以存储其它压缩格式的音频数据。WAV
文件遵循RIFF规则,其内容以区块(chunk
)为最小单位进行存储。WAV
文件一般由3个区块组成:RIFF chunk
、Format chunk、
Fact Chunk(可选)和Data chunk
。另外,文件中还可能包含一些可选的区块,如:Fact chunk
、Cue points chunk
、Playlist chunk
、Associated data list chunk
等。
每个文件最前端写入的是RIFF块,每个文件只有一个RIFF块。从 Wave文件格式详细说明 中可以看到这一点。
非PCM格式的文件会至少多加入一个 "fact" 块,它用来记录数据(注意是数据而不是文件)解压缩后的大小。这个 "fact" 块一般加在 "data" 块的前面。
wav常见的结构:
RIFF区块
FORMAT区块
NumChannelsSampleRateBitsPerSample 三个参数最重要,其它的都是依据这三个计算出来的。
Fact
在非PCM格式的文件中(即压缩编码文件),一般会在WAVEFORMAT结构后面加入一个 "fact" chunk。
常见的压缩编码格式:
DATA区块
WAV
文件以小端形式来进行数据存储。所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
******flac********
/yu_yuan_1314/article/details/9491763
block、subblock 指没有被编码的原始数据;frame、subframe指编码后的数据;
Block:一组或多组跨所有声道的采样点(flac采样组数范围16~65535)。
Subblock:一个或多个单声道的采样点,一个Block包含几个声道就有几个subblock,同个block内subblock的采样点数相同。
Blocksize:一个block中任意subblock的采样点个数(与声道数无关)。
Frame:一个frame帧头加一个或多个Subframe
Subframe:一个subframe帧头加某一声道上一个或多个编码后的采样点,一个frame中的所有subframe包含的采样点数一样。
(每次一个subblock被编码成一个subframe,多个subframe组成一个frame)
Flac中所有数值都是整形,大端模式,除非特别指出,否则数值都是unsigned的。
Flac比特流以“fLaC”开始,接着是必须的metadata块(STREAMINFO),然后是其他可选的metadata块,接着是音频帧。
Flac最多可以支持到128类metadata,已经定义的包括下面几种:
A. STREAMINFO:包含整个比特流的一些信息,如采样率、声道数、采样总数等。他一定是第一个metadata而且必须有。之后可以接其他metadata,这些metadata可以不用识别直接跳过。
B. APPLICATION:包含第三方应用软件信息,这个段里的32位识别码是flac维护组织提供的,是唯一的。
C. PADDING:没有意义的东西,主要用来后期添加其他metadata。
D. SEEKTABLE:保存快速定位点,一个点由18bytes组成(2k就可以精确到1%的定位),表里可以有任意多个定位点。
E. VORBIS_COMMENT:存储了一系列可读的“名/值”的键值对,使用UTF-8编码。这是flac唯一官方支持的标签段。
F. CUESHEET:存储用在cue sheet中的各种信息。可以用来划分音轨,在备份CD时十分有用。
G. PICTURE:保存相关图片,同时还有url、分辨率等信息,可以有不止一个picture block。
FLAC文件结构:
Metadata block结构:
音频数据由一个或多个音频帧组成.
Audio Frame结构:
*******aiff***********
http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/AIFF.html
AIFF是由美国APPLE公司开发的无损音频格式,是Apple苹果电脑上面的标准音频格式,属于QuickTime技术的一部分。AIFF格式只能包含未经压缩的PCM格式的音频数据, AIFF文件包含以下几个区块(Chunk):Common Chunk (必需),Sound Data Chunk (必需),Marker Chunk,Instrument Chunk,Comment Chunk,Name Chunk,Author Chunk,Copyright Chunk,Annotation Chunk,Audio Recording Chunk,MIDI Data Chunk,Application Chunk,ID3 Chunk。
每个区块(Chunk)基本结构:
音频编解码协议
*******MP3*************
MP3的解码总体上可分为9个过程:比特流分析,霍夫曼编码,逆量化处理,立体声处理,频谱重排列,抗锯齿处理,IMDCT变换,子带合成,PCM输出。
********AAC**********
编解码流程:/fellow1988/p/7545881.html