計算機音頻基礎-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中

參考文章:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM