声音是个啥
初中物理学过,声音是由物体振动产生的,声音是一种机械波,传播的介质是空气。声音的频率决定了声音的音调,频率越高,音调越高。声音的振幅决定了声音的大小,振幅越大,声音越大。
也就是说,声音实质上是一个连续的信号,他有着频率以及振幅这两个基本属性。而我们的音频文件无非就是记录这两个属性,然后再通过播放器还原出声音。
但是现实中的声音的波形是复杂多样的,他可能是不同频率不同幅值的正弦波的叠加,因此无法简单的用单一的频率和幅值来描述。
采样与采样率
一个简单的思想是将连续的波形离散化,也就是在一定的时间间隔里,取声音波形上的点。这样就可以用一系列的点来描述声音波形了,大概操作如下图。这个操作叫做采样,采样完后在进行量化将其转换为离散量,也就是将连续信号变为离散信号的过程(详见信号与系统,数字信号处理等课程)。
我们将采样的频率,也就是一秒钟取多少个样本点,称为采样率。不难看出,相同时间内取的样本点越多,也就是采样率越高,对波形的还原能力就越强。
根据奈奎斯特采样定理,一个信号的最高频率为\(f\),那么他的采样率至少要为\(2f\)时,可以无损失的还原出原信号。知道这个定理即可,若想知道原理也可参考上面两门课程。有奈奎斯特采样定理,以及人类的听觉范围大约为20 - 20000 Hz也就是20Hz - 20KHz之间,低于20Hz或者超过20KHz的声音人类是听不见的。也就是说,只要采样率为人类所能听到的最高频率的两倍就可以保证所有我们能听到的声音都被无损的记录下来也就是20KHz * 2 = 40 KHz,因此一般常见的采样率有44.1KHz,48KHz等,再者可能有更高级别的采样率,比下图网易云的分级有着96KHz甚至于192KHz。
量化与量化位数
根据数字信号的定义,时间以及数值上均为离散的信号为离散信号,因此需要采样后将采样点的幅值进行离散化。这个幅值离散化的过程即为量化。
对于音频信号,其频率决定了音调,而幅值决定的便是响度也就是声音的大小。由计算机存储单位可知,一个字节(Byte)拥有8位(bit)可存储的数值范围\(0到2^{8}-1 = 256\),也就是可将声音的幅值分为256个等级。显然使用的存储单元越多,幅值的分级也就越多,声音的还原也就越精确
一般采用2个字节也就是16位的存储空间去作为一个采样点的量化位数,这样可以将声音的幅值分为\(2^{16} = 65536\)个等级,这样的量化位数已经足够用来记录人类能听到的声音了。同时还有着更细的划分比如上图中网易云的24位(24bit)的量化位数。
声道
音频信号的声道数决定了声音的空间位置,也就是声音的立体感。一般常见的声道数有单声道(mono)和双声道(stereo),分别对应着单声道和立体声。双声道的音频文件可以通过左右声道的音量大小来模拟声音的位置。
一般来说,对于双声道的音频文件,假设位深为16bit,那么同一时间点上会有两个16bit的采样点,一个对应左声道,一个对应右声道。存储格式上也是按照(左右)(左右)....这样的顺序进行存储的。大体体现为下面图中interleaved的存储方式。当然也有着另一种存储方式,就是分开存储,可以类比与图片中的通道数,将左右声道单独存储在两个通道中,这种存储方式称为planar存储方式。
音频帧
对于音频来说,其一帧的概念起始并不明确。视频的一帧可以非常直观的理解为一张图片。而音频帧的规则指定是由各个标准实现的,比如常见的ACC格式的音频帧大小为1024个采样点,而MP3格式的音频帧大小为1152个采样点。这个音频帧的大小是由编码器决定的,不同的编码器有着不同的音频帧大小。
通过音频帧的规定,我们可以计算出一帧音频的时长。以MP3格式为例,其采样率为44.1KHz,音频帧大小为1152个采样点,那么一帧音频的时长为\(1152 * 1/44100 = 0.026\)秒,也就是26ms。
而一般最常用的格式组合便是44.1KHz,16bit,双声道,这样的音频格式也就是CD音质。可以计算出一秒钟的所需的存储空间为每秒采样数44.1K乘以字节数2乘以声道数2,\(44100 * 2 * 2 = 176400B\),换算一下就是约为172KB。
编码与解码
音频编码与视频编码类似,也是为了减小音频文件的大小。常见的音频编码格式有MP3,AAC,FLAC等。这些编码格式的原理与视频编码类似,都是通过对音频信号的压缩来减小文件的大小。
音频编码的方式有很多种,比如有损编码,无损编码等。有损编码是通过去除一些人耳听不到的声音来减小文件大小,而无损编码则是通过其他方式来减小文件大小,但是不会丢失任何声音信息。常见的有损编码格式有MP3,AAC等,而无损编码格式有FLAC,WAV等。
压缩或者编码后的音频常用码率衡量,码率即为每秒钟的比特数,显然码率是由采样率以及量化位数共同决定的,也就是说,码率越高,音质越好,文件也就越大。常见的码率有128Kbps(CD音质MP3),192Kbps,320Kbps等。也就是一秒钟传输的音频数据量为128Kb,192Kb,320Kb。注意这里的Kb是指Kilobit,数据传输意义上1kb = 1000kb。