最近项目中需要用到音频处理的相关技术,因此也总结了一下音频相关的知识,理解了这些基本知识才能更好地深入去了解音频处理相关技术。
一、音频处理技术相关的术语
声音的采集: 采样率/声道数/采样位数
音频编码:PCM/MP3/WAV/M4A/FLAC
二、物理学上的声音的基本知识
声音的原理
声音是振动产生的声波,通过介质(空气或固体、液体)传播并能被人或动物听觉器官所感知的波动现象。当物体振动时,同时伴随声音的产生。当振动体不再振动时,声音也随之停止。所以从生活的观察中可以归纳出:声音是由物体的振动所引起。
声音的频率一般会以赫兹表示,记为Hz,指每秒锺周期性震动的次数。
例子一:人说话是通过在喉咙的声带振动发出声音
例子二:波动吉他弦后,弦的振动发出声音
音波的性质及特性
音波常简化为正弦平面波的合成,各平面波可以用以下的性质来描述:
声波频率:音调越高,频率越大;音调越低,频率越小。(弦乐器中,越细的弦振动的频率越高,音调越高)
波长:音调越高,波长越短;音调越低,波长越长。(频率高波长短)
振幅:音量(响度)越大,振幅越大;音量越小,振幅越小。
人耳可以感知到的声音,其频率范围为20 Hz至20,000 Hz,在标准状况下的空气中,上述音波对应的波长从17 m至17 mm之间。
三、声音的采集
数码音频系统是通过将声波波形转换成一连串的二进制数据来再现原始声音,和我们的视频一样,视频其实就是用图片不断的采样组合而成。。
采样率
采样率表示音频信号每秒的数字快照数。该速率决定了音频文件的频率范围。采样率越高,数字波形的形状越接近原始模拟波形。低采样率会限制可录制的频率范围,这可导致录音表现原始声音的效果不佳。
A. 使原始声波扭曲的低采样率。 B. 完全重现原始声波的高采样率。为了重现给定频率,为了复原波形,一次振动中,必须有2个点的采样,因此采样率必须至少是该频率的两倍,。例如,CD 的采样率为每秒 44,100 个采样,因此可重现最高为 22,050 Hz 的频率,此频率刚好超过人类的听力极限 20,000 Hz。
以下是数字音频最常用的采样率:
采样位数/量化精度/位深度/采样深度
采样位数可以理解为采集卡处理声音的解析度。可以简单地理解为每一个采样点上用多少位的二进制数来记录这个时间点的声音数据的值。
这个数值越大,解析度就越高,录制和回放的声音就越真实。我们首先要知道:电脑中的声音文件是用数字0和1来表示的。连续的模拟信号按一定的采样频率经数码脉冲取样后,每一个离散的脉冲信号被以一定的量化精度量化成一串二进制编码流,这串编码流的位数即为采样位数,也称为量化精度。
动态范围
动态范围的概念几乎贯穿人类所有的感官,我们每天都会体验到,光明和黑暗,冷热,硬和软,还有与听觉有关的——大声和安静。动态范围是两个极端之间的差异。在音频与音乐制作中,动态范围表示在一段时间内最响亮和最安静的信号之间的电平差距。
现代流星乐与古典音乐的动态范围对比位深度决定动态范围。采样声波时,为每个采样指定最接近原始声波振幅的振幅值。较高的位深度可提供更多可能的振幅值,产生更大的动态范围、更低的噪声基准和更高的保真度。
16位二进制数的最小值是0000000000000000,最大值是1111111111111111,对应的十进制数就是0和65535,也就是最大和最小值之间的差值是65535,也就是说,它量化的模拟量的动态范围可以差65535,也就是96.32分贝,所以,量化精度只和动态范围有关,和频率响应没关系。动态范围定在96分贝也是有道理的,人耳的无痛苦极限声压是90分贝,96分贝的动态范围在普通应用中足够使用,所以96分贝动态范围内的模拟波,经量化后,不会产生削波失真的。人耳可以感受到大约 120dB 的动态范围,其中 0dB 是不可察觉的,120dB 是达到疼痛的阈值,虽然我们生活的动态范围,大部分处于更窄的范围中。
至于16位为什么可以表示96分贝,可以参考 https://caorong.github.io/2016/03/26/about-db/
声音通道
即声道数(1-8个),声道的个数可以理解为有多少个采样点采样,采样点越多表示越多的表达方式。
位速/比特率/码率
位速/比特率/码率描述的都是一个东西,是指在一个数据流中每秒钟能通过的信息量。我们可能看到过音频文件用 “128–Kbps MP3” 或 “64–Kbps WMA” 进行描述的情形。Kbps 表示 “每秒千位数”,因此数值越大表示数据越多:128–Kbps MP3 音频文件包含的数据量是 64–Kbps WMA 文件的两倍,并占用两倍的空间。(不过在这种情况下,这两种文件听起来没什么两样。原因是什么呢?有些文件格式比其他文件能够更有效地利用数据, 64–Kbps WMA 文件的音质与 128–Kbps MP3 的音质相同。)
从码率的计算公式中可以清楚的看出码率和采样位数的关系: 码率=取样频率×量化精度×声道数
如常普通CD音乐就是用 44100Hz的采样率,16位的采样位数,双声道来记录音乐 (44100 * 16 * 2 ) ≈ 1411kps,常见的mp3为128kps,音质差距可见。
总结
通俗点说,我们可以把声波看成是一条曲线,我们知道,曲线是由点组成的,采样率就是每秒长度(上图横轴)中点的个数。而采样精度就是动态范围(上图竖轴)中点的个数。这两个维度的定位越细,声音的真实还原度就越高,音质也就会更好,当然,音频文件也就会越大。
4位采样的深度PCM数据格式
PCM(Pulse Code Modulation)也被称为 脉码编码调制。PCM中的声音数据没有被压缩,模拟音频信号经模数转换(A/D变换)直接形成的二进制序列,没有附加的文件头和文件结束标志。如果是单声道的文件,采样数据按时间的先后顺序依次存入。如果是双声道的文件,采样数据按时间先后顺序交叉地存入。如下图所示:
那么,现在我们就可以得到PCM文件所占容量的公式:存储量 = (采样频率*采样位数*声道)*时间/8(单位:字节数)
例如,数字激光唱盘(CD-DA,红皮书标准)的标准采样频率为44.lkHz,采样数位为16位,立体声(2声道),可以几乎无失真地播出频率高达22kHz的声音,这也是人类所能听到的最高频率声音。激光唱盘(无损音乐)一分钟音乐需要的存储量为:(44.1*1000*l6*2)*60/8=10,584,000(字节)=10.584MBytes
四、音频压缩技术
目前我们常用的音频格式,大部分都是基于音频CD(采样率44.1khz、采样精度16bit,2通道)的原始文件“WAV”文件而来的。WAV格式是微软公司开发的一种编码格式,它的作用是将PCM格式的数据通过编码播放出来,对比数据发现WAV仅仅多了一个头部信息,其他的内容一样。
因此WAV内的数据基本上完整的还原了PCM数据,而其他的MP3、AAC等其他编码格式基本也都是基于WAV文件再压缩而成。所以,我们可以简单的认为,WAV是原始音频格式,其他音频格式是压缩格式。
VBR、CBR
我们在压缩MP3的时候经常会看到CBR、VBR两种方式。
CBR(Constant Bitrate),恒定比特率,指文件从头到尾都是一种位速率,如128KBit/s。
VBR(Variable Bitrate)动态比特率。也就是没有固定的比特率,压缩软件在压缩时根据音频数据即时确定使用什么比特率。这是新发展的算法,他们将一首歌的复杂部分用高比特率编码,简单部分用低比特率编码。VBR这种在控制文件大小的情况下,最大限度的提高了MP3的音质。
有损压缩和无损压缩
简单的来说,有损压缩就是通过删除一些已有数据中对人耳听觉影响较小的高频部分数据来达到压缩目的;无损压缩就是通过优化排列方式来达到压缩目的。
有损压缩就像我们在一篇文章中删除一些不重要的助词,达到目的,解压缩后,已删除的内容无法恢复;而无损则是通过排版方式达到的,解压缩之后,还能获得完整的WAV数据,就像是我们常用的winzip和WinRAR那样。
常见的无损压缩格式:APE,FLAC,WMA,AAL
常见的有损压缩格式:MP3、OGG、AAC
目前最为常用的音频格式是MP3,MP3是一种有损压缩的音频格式,设计这种格式的目的就是为了大幅度的减小音频的数据量,人耳感受声音的频率范围是20Hz-20kHz,MP3截掉了大量的冗余信号和无关的信号,它舍弃PCM音频数据中人类听觉不敏感的部分,从下面的比较图我们可以明显的看到MP3数据相比PCM数据明显矮了一截。编码器通过混合滤波器组将原始声 音变换到频率域,利用心理声学模型,估算刚好能被察觉到的噪声水平,再经过量化,转换成Huffman编码,形成MP3位流。解码器要简单得多,它的任务 是从编码后的谱线成分中,经过反量化和逆变换,提取出声音信号。
MP3的解码总体上可分为9个过程:比特流分析,霍夫曼编码,逆量化处理,立体声处理,频谱重排列,抗锯齿处理,IMDCT变换,子带合成,PCM输出。
PCM波形图 MP3波形图MP3格式中的数据通常由两部分组成,一部分为ID3用来存储歌名、演唱者、专辑、音轨数等信息,另一部分为音频数据。音频数据部分以帧(frame)为单位存储,每个音频都有自己的帧头,如图所示就是一个MP3文件帧结构图。MP3中的每一个帧都有自己的帧头,其中存储了采样率等解码必须的信息,所以每一个帧都可以独立于文件存在和播放,这个特性加上高压缩比使得MP3文件成为了音频流播放的主流格式。帧头之后存储着音频数据,这些音频数据是若干个PCM数据帧经过压缩算法压缩得到的,对CBR的MP3数据来说每个帧中包含的PCM数据帧是固定的,而VBR是可变的。
五、iOS音频播放概述
有了上面的概念知识之后我们就可以列出一个经典的音频播放流程(以MP3为例):
1、读取MP3文件
2、解析采样率、码率、时长等信息,分离MP3中的音频帧
3、对分离出来的音频帧解码得到PCM数据
4、对PCM数据进行音效处理(均衡器、混响器等,非必须)
5、把PCM数据解码成音频信号
6、把音频信号交给硬件播放
重复1-6步直到播放完成
在iOS系统中apple对上述的流程进行了封装并提供了不同层次的接口
Audio File Services:读写音频数据,可以完成播放流程中的第2步;
Audio File Stream Services:对音频进行解码,可以完成播放流程中的第2步;
Audio Converter services:音频数据转换,可以完成播放流程中的第3步;
Audio Processing Graph Services:音效处理模块,可以完成播放流程中的第4步;
Audio Unit Services:播放音频数据:可以完成播放流程中的第5步、第6步;
Extended Audio File Services:Audio File Services和Audio Converter services的结合体;
AVAudioPlayer/AVPlayer(AVFoundation):高级接口,可以完成整个音频播放的过程(包括本地文件和网络流播放,第4步除外);
Audio Queue Services:高级接口,可以进行录音和播放,可以完成播放流程中的第3、5、6步;
OpenAL:用于游戏音频播放,暂不讨论
网友评论