計算機音頻基礎-PCM簡介

咱們在音頻處理的時候常常會接觸到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 文件錄製的天然界的聲波,
  • 紅色曲線表示的是PCM 文件輸出的聲波,

這個圖中,採樣點是離散的,每個點對應pcm一個單元的數據。it

  • 採樣頻率越高,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中

參考文章:

相關文章
相關標籤/搜索