咱们在音频处理的时候常常会接触到PCM数据:它是模拟音频信号经模数转换(A/D变换)直接造成的二进制序列,该文件没有附加的文件头和文件结束标志。html
声音自己是模拟信号,而计算机只能识别数字信号,要在计算机中处理声音,就须要将声音数字化,这个过程叫经模数转换(A/D变换)。最多见的方式是透过脉冲编码调制PCM(Pulse Code Modulation) 。编码
运做原理以下:首先咱们考虑声音通过麦克风,转换成一连串电压变化的信号,以下图所示。这张图的横座标为秒,纵座标为电压大小。spa
要将这样的信号转为 PCM 时,须要将声音量化,咱们通常从以下几个维度描述一段声音:.net
采样频率:即取样频率,指每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。因为人耳的分辨率颇有限,过高的频率并不能分辨出来。在16位声卡中有22KHz、44KHz等几级,其中,22KHz至关于普通FM广播的音质,44KHz已至关于CD音质了,目前的经常使用采样频率都不超过48KHz。htm
采样位数:即采样值或取样值(就是将采样样本幅度量化)。它是用来衡量声音波动变化的一个参数,也能够说是声卡的分辨率。它的数值越大,分辨率也就越高,所发出声音的能力越强。blog
声道数:很好理解,有单声道和立体声之分,单声道的声音只能使用一个喇叭发声(有的也处理成两个喇叭输出同一个声道的声音),立体声的PCM 可使两个喇叭都发声(通常左右声道有分工) ,更能感觉到空间效果。图片
时长: 采样的时长资源
下面再用图解来看看采样位数和采样频率的概念。让咱们来看看这几幅图。get
这个图中,采样点是离散的,每个点对应pcm一个单元的数据。it
采样频率单位为Hz,表示每秒采样的次数,通常有11025HZ(11KHz),22050HZ(22KHz)、44100Hz(44KHz)三种。
采样位数单位为bit(位),通常有8bit和16bit 。8bit表示用8bit空间量化某时刻的声音,这一点基本是和图片用r、g、b三单位共24bit量化颜色同样。
PCM存储方式:
有了上述基础,就能够很容易理解PCM信息存储的方式。例如,一个单声道、8bit、11KHz的格式以下:
采样点 |
T1 |
T2 |
T3 |
T4 |
T5 |
T6 |
幅值 |
0x08 |
0x07 |
0x03 |
0x03 |
0x04 |
0x03 |
再扩展一下
知乎上有篇帖子讲述的还比较多: pcm 音频数据的存储方式?
综上所述,咱们能够获得pcm文件的体积计算公式(这里咱们把 采样位数/8 是由于电脑上是将bit转化为byte):
存储量 = (采样频率 × 采样位数/8 × 声道 × 时间.
例如,数字激光唱盘(CD-DA,红皮书标准)的标准采样频率为44.lkHz,采样数位为16位,立体声(2声道),能够几乎无失真地播出频率高达22kHz的声音,这也是人类所能听到的最高频率声音。激光唱盘一分钟音乐须要的存储量为:
(44.1*1000*l6*2)*60/8=10,584,000(字节)=10.584MBytes
这个数值就是PCM声音文件在硬盘中所占磁盘空间的存储量。
计算机音频文件的格式决定了其声音的品质,平常生活中电话、收音机等均为模拟音频信号,即不存在采样频率和采样位数的概念,咱们能够这样比较一下:
WAV和PCM的关系
前面也介绍到了,PCM数据自己只是一个裸码流,它是由声道、采样位数、采样频率、时长共同决定的,所以咱们至少要知道其中的三个才能将pcm所表明的数据提取出来。
所以,纯PCM数据是没法播放的,所以还须要一段描述数据。计算机系统中的一个比较常见的作法是将pcm码流和描述信息封装在一块儿,造成一个音频文件。这样就能够直接播放了。
一种常见的方式是使用wav格式定义的规范将pcm码流和描述信息封装起来。查看pcm和对应wav文件的hex文件,能够发现,wav文件只是在pcm文件的开头多了44bytes,来表征其声道数、采样频率和采样位数等信息。这个其实和bmp很是相似。
网上有文章详细的介绍了这种方式,并经过将pcm封装成wav文件实现html直接播放。
须要注意的是,WAV定义的是一种音频封装规范,虽然常见的都是音频流被PCM编码处理的WAV,但这不表示WAV只能使用PCM编码,MP3编码一样也能够运用在WAV中
参考文章: