了解了音视频的相关知识,可以先阅读下面两篇文章:
本篇总结下音频基础知识,将从以下几个方面进行介绍:
- 声音的产生
- 声音的三要素
- 模数转换
- 原始音频数据
- PCM 与 Wav
- 音频处理流程
声音的产生#
声音是由物体振动产生的,通过空气、固体、液体等介质进行传输的一种声波,可以被人耳识别的声波的范围是 20Hz~20000Hz 之间,也叫做可听声波,这种声波称之为声音,根据声波频率的不同可以主要分为:
- 可听声波:20Hz~20kHz
- 超声波:> 20kHz
- 次声波:< 20Hz
此外,人的发声范围一般是 85Hz~1100Hz。
声音的三要素#
声音的三要素分别是音调、音量、音色,具体如下:
- 音调:指的是声音频率的高低,表示人的听觉分辨一个声音的调子高低的程度,物体振动的快,发出的声音的音调就高,振动的慢,发出的音调就低。
- 音量:又称音强、响度,指声音的振幅大小,表示人耳对所听到的声音大小强弱的主观感受。
- 音色:又称音品,指不同声音表现在波形方面总是有与众不同的特性,不同的物体振动都有不同的特点,反映每个物体发出的声音的特有的品质,音色具体由谐波决定,好听的声音绝不仅仅是一个正弦波,而是谐波。
模数转换#
声音是一个模拟音频信号,如果要将声音数字化,则需要将模拟音频信号转换为数字信号,这就是模数转换,主要流程包括采样、量化、编码,如下图所示:
- 采样:连续信号转换为离散信号的过程,每个一定时间的信号值来替代原来时间段连续的信号值,这个 1s 内的采样次数就是采样率,如 8KHz 是电话信号的采样率,可以满足通话需要,音频 CD 一般是 44.1kHz,数字电视一般是是 48kHz,采样率越高声音的还原成度越高。
- 量化:将采样后 的模拟信号转换为数字信号的过程,量化分为均匀量化和非均匀量化,上图中显然使用了均匀量化,量化级数是 8。
- 编码:将量化后的信号转换为对应的二进制代码,最简单就是自然二进制码,其他编码方式感兴趣自行去了解,上图中编码指的是信源编码,除此之外还有信道编码。
原始音频数据#
PCM((Pulse Code Modulation)是脉冲编码调制,实际上就是将模拟音频信号转换为数字音频信号,音视频中的 PCM 指的是未经压缩的音频采样数据,是音频信号经采样、量化、编码生成的原始音频数据,PCM 数据关键量化指标如下:
- Sample Size:采样大小,也是量化级数,表示一个采样用多少位 bit 存放,常用的是 16 位。
- Sample Rate:采样率,表示每次采样的次数,单位 Hz,常见的采样率有 8k、16k、32k、44.1k、48k 等。
- Number of Channels:声道数,表示当前 PCM 数据中包含的声道数,如单声道、双声道、多声道等。
- Byte Ordering:字节序,表示 PCM 数据存储的字节序是大端存储 (big-endian) 还是小端存储 (little-endian),为了数据处理效率的高效,通常为小端存储。
- Sign:表示当前 PCM 数据是否有符号位
- Integer Or Floating Point:表示当前 PCM 数据使用整型还是浮点型来表示。
了解了表示 PCM 数据的量化指标之后,那么码率如何计算呢,码率就是一秒钟采样数据的多少,计算方式如下:
采样率 * 采样大小 * 声道数
举个例子:
采样率 44.1KHz,采样大小为 16bit,双声道的 PCM 编码的 WAV 文件,其码率为 44.1K *_16 *_2 = 1411.2Kb/s,假设传输上述音频,每秒将超过 1M 的数据量,再加上在数据传输过程中,上行速率往往远小于下行速率,这就需要压缩音频数据了。
PCM 与 WAV#
PCM 可以查看前面小结,WAV 是一种无损的音频文件格式,其对音频的编码没有硬性规定,可以是 PCM 也可以是其他编码方式,比如 MP3 编码等,简单总结一下:
- PCM:一种编码方式,在音视频领域则理解为原始音频数据裸流;
- WAV:一种音频文件格式,可存储 PCM 数据,相当于在 PCM 基础上添加了 WAV 头部。
最后附上一张 WAV 的 Header 示意图:
更多细节后续研究后补充。
音频处理流程#
简单讲一下音频的处理流程,一是音频文件的生成,如在 Android 中使用 AudioRecord
、MediaRecord
等采集到的音频数据就是 PCM 数据,这种数据属于数字音频信号,是原始的 PCM 裸流,PCM 数据经过编码也就是将 PCM 数据压缩,在通过复用生成对应的音频文件,二是音频文件的播放,经解复用、解码转换成 PCM 进行播放。