zoukankan      html  css  js  c++  java
  • 计算机音频基础-PCM简介

    我们在音频处理的时候经常会接触到PCM数据:它是模拟音频信号经模数转换(A/D变换)直接形成的二进制序列,该文件没有附加的文件头和文件结束标志。

    声音本身是模拟信号,而计算机只能识别数字信号,要在计算机中处理声音,就需要将声音数字化,这个过程叫经模数转换(A/D变换)。最常见的方式是透过脉冲编码调制PCM(Pulse Code Modulation) 。

    运作原理如下:首先我们考虑声音经过麦克风,转换成一连串电压变化的信号,如下图所示。这张图的横座标为秒,纵座标为电压大小。

        

    要将这样的信号转为 PCM 时,需要将声音量化,我们一般从如下几个维度描述一段声音:

    • 声道数、
    • 采样位数
    • 采样频率
    • 时长

    采样频率:即取样频率,指每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。由于人耳的分辨率很有限,太高的频率并不能分辨出来。在16位声卡中有22KHz、44KHz等几级,其中,22KHz相当于普通FM广播的音质,44KHz已相当于CD音质了,目前的常用采样频率都不超过48KHz。

    采样位数:即采样值或取样值(就是将采样样本幅度量化)。它是用来衡量声音波动变化的一个参数,也可以说是声卡的分辨率。它的数值越大,分辨率也就越高,所发出声音的能力越强。

    声道数:很好理解,有单声道和立体声之分,单声道的声音只能使用一个喇叭发声(有的也处理成两个喇叭输出同一个声道的声音),立体声的PCM 可以使两个喇叭都发声(一般左右声道有分工) ,更能感受到空间效果。

    时长: 采样的时长

    下面再用图解来看看采样位数和采样频率的概念。让我们来看看这几幅图。

    • 图中的黑色曲线表示的是PCM 文件录制的自然界的声波,
    • 红色曲线表示的是PCM 文件输出的声波,

    这个图中,采样点是离散的,每一个点对应pcm一个单元的数据。

    • 采样频率越高,x轴采样点就越密集,声音越接近原始数据
    • 采样位数越高,y轴采样点就越密集,声音越接近原始数据

      

    采样频率单位为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

    • 采样位数为是8bit,用一个byte存储它每个时刻的信息
    • 声道为单声道,每个时刻只有一份信息。
    • 频率为11kHz,每秒钟有11025个时刻

    再扩展一下

    • 对于多声道的声音,每个时刻的存储同时存了两份LR,LR,LR的方式
    • 对于16bit的声音,又分为little endian 和 big endian存储方式(和数字的存储方式一样分大小端)

    知乎上有篇帖子讲述的还比较多: 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声音文件在硬盘中所占磁盘空间的存储量。

    计算机音频文件的格式决定了其声音的品质,日常生活中电话、收音机等均为模拟音频信号,即不存在采样频率和采样位数的概念,我们可以这样比较一下:

    • 44KHz,16BIT的声音称作:CD音质;
    • 22KHz、16Bit的声音效果近似于立体声(FM Stereo)广播,称作:广播音质;
    • 11kHz、8Bit的声音,称作:电话音质。

    WAV和PCM的关系

    前面也介绍到了,PCM数据本身只是一个裸码流,它是由声道、采样位数、采样频率、时长共同决定的,因此我们至少要知道其中的三个才能将pcm所代表的数据提取出来。

    因此,纯PCM数据是无法播放的,因此还需要一段描述数据。计算机系统中的一个比较常见的做法是将pcm码流和描述信息封装在一起,形成一个音频文件。这样就可以直接播放了。

    一种常见的方式是使用wav格式定义的规范将pcm码流和描述信息封装起来。查看pcm和对应wav文件的hex文件,可以发现,wav文件只是在pcm文件的开头多了44bytes,来表征其声道数、采样频率和采样位数等信息。这个其实和bmp非常类似。

        

    网上有文章详细的介绍了这种方式,并通过将pcm封装成wav文件实现html直接播放。

    WEB端实现PCM裸流播放

    需要注意的是,WAV定义的是一种音频封装规范,虽然常见的都是音频流被PCM编码处理的WAV,但这不表示WAV只能使用PCM编码,MP3编码同样也可以运用在WAV中

    参考文章:

  • 相关阅读:
    EntityFramework中的线程安全,又是Dictionary
    记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)
    这一个月
    使用Nginx解决IIS绑定域名导致应用程序重启的问题
    Bootstrap for MVC:Html.Bootstrap().TextBoxFor(model=>model.Name)
    Orchard 刨析:Logging
    Orchard 刨析:Caching
    Orchard 刨析:前奏曲
    Orchard 刨析:导航篇
    数据集
  • 原文地址:https://www.cnblogs.com/TianFang/p/7894630.html
Copyright © 2011-2022 走看看