语音
声音作为一种机械波,其基本物理属性是频率和振幅。频率指振动的快慢。振幅是指声波在某个位置上的瞬时强弱。有时候,人们用音高、音质和音强来描述声音的基本特征。实际上,这三个特征都归结为频率和振幅这两个基本属性。其中音高、音质与频率相关。
所谓分贝,是指两个相同的物理量(例A1和A0)之比取以10为底的对数并乘以20(或10),即N = 20lg(A1/A0) 。通常,我们以20微帕斯卡(μPa)为基准值来度量其他声音的强弱,例如,火箭发射时产生的声音压力是2000帕斯卡,因此,其分贝值就是log20(2000/20x10-6),即160分贝。
采样频率:单位时间内采集的样本数,是采样周期的倒数。
常见的一些采样频率:CD-Audio 采样频率为44.1kHz,一般网络和移动通信采样的音频采样率为8KHz
量化深度:表示一个样本的二进制的位数,即样本的比特数。一般的网络音频(移动通信)应用采用了8位的量化深度,CD音频的量化深度则是16比特,而有些高级数字音频系统采用了32位的量化深度。
总之,采样是时间上的离散化,而量化则是空间上的离散化。
编码:PCM编码,增量调制编码
PCM编码(脉冲编码调制)的量化分为两种:一种是均匀量化(又称为线性量化),另一种称为非均匀量化(非线性量化)
均匀量化如下图
业界广泛采用了两种非均匀量化,一种称为μ律压扩(μ-Law)技术,另一种称为A律压扩(A-Law)技术。
增量调制编码
连续的1表示信号在上升,每次上升一个Δ;连续的0表示信号在下降,每次下降一个Δ;在信号的平缓部分,编码输出表现为0和1的交错,即数字化信号以阶跃Δ的大小上下起伏,用以记录模拟波形的平缓变化(对DM编码来说只能这样做)。
WAVE波形音频文件
WAVE文件,又称波形音频文件,是一种最为重要的用于存储PCM编码的数字音频数据的文件。WAVE文件作为多媒体应用中广泛使用的声波文件格式之一,是以RIFF格式为标准的。RIFF是英文Resource Interchange File Format的缩写,一个WAVE文件的最开头四个字节便是"RIFF"。WAVE文件是由若干个Chunk(可以翻译为块)组成的。按照在文件中的出现位置,它们分别是RIFF WAVE Chunk、Format Chunk、 Fact Chunk(可选)和Data Chunk。这四个块(Chunk)的排列方式如图4-1所示。
RIFF WAVE Chunk ID = 'RIFF' RiffType = 'WAVE' |
Format Chunk ID = 'fmt ' |
Fact Chunk(optional) ID = 'fact' |
Data Chunk ID = 'data' |
除了Fact Chunk外,其他三个Chunk是必须具有的。我们看到,每个Chunk有各自的ID,均位于Chunk最开始的位置。ID作为标识,均为4个字节,实际上是4个字符,如"RIFF"。这4个字符合在一起被称为"四字符码"( Four Character Code,FCC)。用"四字符码"作块ID,是RIFF文件的重要特点。紧跟在ID后面的是Chunk大小(注意,实际上是去除ID和Size所占的字节数后剩下的其他字节数),占4个字节,其中低字节表示数值低位,高字节表示数值高位。
下面具体介绍各个Chunk的内容。所有数值表示均为低字节表示低位,高字节表示高位。
RIFF WAVE Chunk
以"RIFF"作为标识,然后紧跟着为size字段,该size是整个wav文件大小减去ID和Size所占用的字节数,即FileLen - 8 = Size。然后是Type字段,为'WAVE',表示是wav文件。
字段名称 |
所占字节数 |
具体内容 |
ID |
4 Bytes |
"RIFF" |
Size |
4 Bytes |
由数据决定 |
Type |
4 Bytes |
"WAVE" |
Data Chunk
Data Chunk 是真正保存 wav 数据的地方,以'data'作为该 Chunk 的标示。然后是数据的大小。紧接着就是 wav 数据。
字段名称 |
所占字节数 |
具体内容 |
ID |
4 Bytes |
'data' |
Size |
4 Bytes |
音频数据的大小 |
data |
最大不超过 size 所能表示的字节数 |
音频数据,是文件的主体 |
根据 Format Chunk 中的声道数以及采样 bit 数,wav 数据的 bit 位置可以分成以下 4 种形式
单声道 8bit 量化 |
样本 1 |
样本 2 |
样本 3 |
样本 4 |
声道 0(左) |
声道 0(左) |
声道 0(左) |
声道 0(左) |
|
双声道 8bit 量化 |
样本 1 |
样本 2 |
||
声道 0(左) |
声道 1(右) |
声道 0(左) |
声道 1(右) |
|
单声道 16bit 量化 |
样本 1 |
样本 2 |
||
声道 0(左) (低位字节) |
声道 0(左) (高位字节) |
声道 0(左) (低位字节) |
声道 0(左) (高位字节) |
|
双声道 16bit 量化 |
样本 1 |
|||
声道 0(左) (低位字节) |
声道 0(左) (高位字节) |
声道 1(右) (低位字节) |
声道 1(右) (高位字节) |
双声道
将转码输出配置为未压缩的PCM格式音频,
即采样频率为44.1kHz、量化深度为16bits、双声道的波形音频,那么,缓冲区中的音频数据将按图4-39所示的方式排列。
样本 1 |
样本 2 |
… |
||||||
左声道低位字节 |
左声道高位字节 |
右声道低位字节 |
右声道高位字节 |
左声道低位字节 |
左声道高位字节 |
右声道低位字节 |
右声道高位字节 |
… |
现在我们利用pAudioData指针来做一项实验,即利用指针pAudioData,将输出PCM音频的左声道字节全部改写为0。这样,读者播放输出音频文件,将只能听到右声道的声音。这项实验有助于读者理解左右声道的概念。
混声
采取创建多个Media Session的技术路线即可实现上述目标。图4-26描述了多Media Session播放多音频文件的基本原理
我们利用三个Media Session同时启动三个音频文件的播放,三个声音都能够被听到。实际上,最后听到的声音,是一个混合后的声音,这是通过硬件(声卡)混声器(Mixture)实现的。需要指出的是,上述多音频文件播放的基本原理,正是游戏、动画等多媒体应用中的基本技术。理解这一点非常有用,读者今后完全可以利用该方法尝试开发类似的应用。
音频信号的三种编码方式
波形编码,参数编码,混合编码