本文主要描述声音的产生、声音是如何被保存数字信号的、以及压缩编码存储的。
声音的产生和记录
1. 声音的本质
声音一般被认为是【空气的振动】。振动通过耳朵的鼓膜、话筒等传播,被意识到是声音。 振动周期(频率·Hz)快的是高频音,慢的是低频音。 振动压力(分贝·dB)高的话声音就大,低的声音就小。 根据频率和分贝值的组合,我们可以听到各种各样的音色。
2. 记录声音技术盘点
记录声音技术的本质就是记录介质的振动信号的技术:
- 1899年爱迪生发明了留声机:通过受话器,声音第一次被记录下来(属于机械录音)
- 黑胶唱片留声机
- 1935年,德国科学家福劳耶玛发明了磁带(不再是机械录音,而是将声音转化为了电信号)
- 1965年,美国发明家詹姆斯·拉塞尔发明光碟
- 19世纪末,出现的麦克风,以及后续各种驻极体以及硅麦
从唱片、到磁带、到CD,再到现在的数字存储设备,声音的存储介质也发生了改变,在唱片、磁带、光盘的阶段,直接就将声音转储到了存储介质中,后面的数字存储介质,就需要将模拟信号转换成数字信号,才能将声音存储起来。
3. 模拟信号数字化
3.1 什么是信号?
一个信号是定义在一个连续时间范围内的(自变量的取值在时间域上是连续的值),信号的幅度可以是连续的,也可以是离散的。
信号是信息的物理载体,信息是信号的具体内容。
信号的自变量是时间,大致可以分为三类:
- 连续时间信号: 在时间域上是连续的,幅度上既可以是连续也可以是离散的信号;
幅度上是连续的信号:温度、湿度、电流、电压、长度、宽度、高度、压力;
幅度上是离散的信号:交通灯的信号(时间域上取值是连续的,但是幅度域上的取值只有红黄蓝具体的离散值) - 离散时间信号: 和连续时间信号相对应,时间是一个离散变量的一组信号,也就是独立变量时间也被量化了,而它的幅度仍是连续变化的,典型的离散时间信号就是:抽样信号(或者叫采样信号),他其实是当我们把一个模拟信号进行一个时间上的离散化之后的一个信号(抽样信号是一个典型的离散时间信号的例子);
- 数字信号: 离散信号再经过对信号幅度的量化就变成了数字信号。
我们把在时间上离散而在幅度上经过量化的信号统称为数字信号;
3.2 什么是模拟信号?
一般的我们把一个信号在时间域上连续,同时幅度也是连续变化的这种信号我们把它统称为模拟信号),比如温度、湿度、电流、电压、长度、宽度、高度、压力都属于模拟信号。
3.3 为什么要将模拟信号数字化?
数字信号大多是人为抽象出来的一种信号的表示方法,可以更方便的使用计算机进行运算或者是通过一些数字信号处理器进行快速计算达到我们想要的结果;
3.4 模拟信号如何数字化?
3.4.1 数字化存储流程
模拟信号数字化过程如下:
上图描述的声音信号进行转换、编码、存储的流程:
1. 麦克风: 完成声音信号到模拟电信号的转换
2. 采样: 按照一定的时间间隔在每个通道连续的波上进行采样取点,这个时间间隔就是采样周期,他的倒数就是采样率;例如采样率是48000Hz,就是说1秒钟内对模拟信号取样点取了48000次,相当于将原来1s内时间轴上连续的时间,离散成了48000个点,因此采样实际就是对模拟信号离散化的过程。离散后的信号想要保证不失真,那么采样频率必须是模拟信号最大频率的2倍才行。
3. 量化: 对每个通道采样取的点进行量化表示:设定一个量化区间,比如1-8,对于每一个采样值,通过量化区间的一个值去描述,16bit就是说采样的点可以用-32768~+32767之间值表示,8bit、16bit就是采样精度或者位宽;
4. 编码: 采样、量化之后的模拟信号在时间域、幅度域上都是离散的,已经是数字信号,这些数字信号存储就需要按照一定的格式:LRLR顺序存放左右声道数据,每个量化后的幅度值都是转换成了二进制机器码进行存储;
3.4.2 补充内容
1. 音频帧: 每次采样取到的就是一帧,一帧大小根据通道数、采样精度决定,比如立体声、16bit宽就是2*2byte;
2. 奈奎斯特采样率: 采样后的信号想要保证还原度,不失真,那么采样的频率必须不低于被采样模拟信号最大频率的2倍,这也就是为什么人耳听到的实际声音频宽在20Hz~20000Hz,而采样率却需要在40K以上的原因,如果低于2倍就会出现频率的混叠现象(容易出现本来是高频的模拟信号,反而采样后变成了低频,这个我在移植声卡驱动时候遇到过,主要是声卡主频设置的等于真实主频率的1/4,当时看频谱图就发现出现的频率上下对称翻折的现象,这个后面会细说);
3. 重采样: 硬件只有一个实际采样频率,但是我们有时候需要各种各样的采样频率的音频数据,比如8K、16K、44K、48K,这就需要将实际频率往需要的频率上转,这个过程就叫做重采样;
4. 上采样: 低频转化到高频,主要采用内插的方法,这容易出现高频镜像,需要滤波;
5. 下采样: 高频转换到低频,主要采用抽取的方法,这也会容易出现混叠,需要滤波;
6. 通道数: 和耳朵听声音一样,两只耳朵可以进行声音定位,同样的多声道可以还原真实的声场环境,有几个通道,就需要采集几路音频,常见的有单声道、立体声(双声道)、六声道等;
7. PCM编码: 指的是将声音这个模拟信号进行采样、量化、编码的过程;
4. 音频存储方式
经过PCM编码后的音频数据需要以文件的形式保存,主要有两大类型:
1. 原始音频存储(不做压缩): 常见的就是wav文件,它直接把PCM音频流加一个文件头描述采样率、宽度、通道数这些信息;
2. 无损压缩: 利用数据的统计冗余进行压缩,可完全恢复原始数据而不引起任何失真,但压缩率是受到一定限制。如:FLAC,APE,ALAC,WavPack
3. 有损压缩: 利用了人类对声波中的某些频率成分不敏感的特性,允许压缩过程中损失一定的信息;虽然不能完全恢复原始数据,但是所损失的部分对理解原始数据的影响缩小,却换来了大得多的压缩比。如:MP3,AAC,Ogg Vorbis,Opus。
5. 音频编解码
原始音频数据直接存储非常占存储空间,需要进行一定压缩再存储,同样的原始音频流直接传输也会非常的占带宽,同样也需要进行编解码,那么肯定不能毫无章法的随便自己去对音频数据进行压缩、编解码,而是由公共的组织指定的一些公认的标准:
- ITU: 国际电信联盟标准,音频压缩包括g711、g718、g719、g721、g722、g726、g729。
- 3GPP: 第三方何做伙伴计划,制定的音频标准主要有AMR、AMR-WB、AMR-WB+等。
- IETF: 互联网工程任务组,指定的音频标准包括Opus。
- MPEG: ISO和IEC制定的标准,其中音频标准中包含压缩格式:MP3、AAC等。