Android之音頻開發基礎

相信不少人在音頻採集處理的時候,會遇到這樣的設置界面,那採樣率、比特率、通道這樣的術語,代表的是什麼意思呢?

圖1

 

1、基本常識

  • 頻率的單位是HZ,中文爲赫茲,是電,磁,聲波和機械振動每秒的週期次數(週期/秒)。
  • 人類的耳朵能聽到的聲音頻率範圍爲20Hz~20000Hz,如果低於這個範圍的話就叫做次聲波,而若是高於這個範圍的則是叫做超聲波。無論次聲波和超聲波,耳朵都覺察不到
  • 人發出的聲音信號爲模擬信號,想要在計算機上處理的話,必須把它們轉爲數字信號,這個轉換過程叫模數轉換。

    (模擬信號示例)



    (數字信號示例)

     
  •  對於人聲信號而言,處理一般經過以下步驟:
           人嘴說話——>聲電轉換——>採樣(模數轉換)——>量化(將數字信號用適當的數值表示)
            ——>編碼(數據壓縮)——>傳輸(網絡或者其他方式)——>解碼(數據還原)
            ——>反採樣(數模轉換)——>電聲轉換——>人耳聽聲。

 

2、採樣率是什麼?(即圖1的44100Hz)

    採樣率,又叫採樣頻率、取樣頻率。我們把人聲模擬信號(簡單理解爲正弦波或餘弦波)轉爲計算機識別得到的數字信號(可以理解爲0101010101比特位),需要對聲音樣本進行採樣(即模數轉換)。根據耐奎斯特(NYQUIST)採樣定理,用兩倍於一個正弦波的頻繁率進行採樣就能完全真實地還原該波形。
 

    因此,我們在單位時間內,對原始聲音讀取採樣的次數越多,得到聲音數據就越多,對信號波形的表示也越精確。在後續數字化處理中,聲音還原就越真實、自然。所以採樣率就是:錄音設備在一秒鐘內對聲音信號的採樣次數

  • 採樣率越高,聲音的質量越好,所表現的頻率範圍越大。
  • 高採樣率,會使文件變得很大,加上人耳的分辨率非常有限,高了也幾乎聽不出區別,沒什麼意義。
  • 採樣頻率一般共分爲22.05KHz、44.1KHz、48KHz三個等級。
    22.05 KHz 只能達到FM廣播的聲音品質,
    44.1KHz    理論上的CD音質界限(可以表現的頻率範圍:0Hz - 22050Hz
    48KHz       可達到DVD音質         (可以表現的頻率範圍:0Hz - 24000Hz)

PS:爲什麼CD採樣率會採用44.1KHz 這個數值呢?
最早期的數碼錄音設備,就是一個PCM編碼器加一部錄像機!世界上的錄像機主要有兩大制式:歐洲的PAL制式和美國日本的NTSC制式。PAL制式,場頻50Hz,行頻15625Hz,每一場625條掃描線。NTSC制式,場頻59.94Hz(接近但不是60Hz),行頻15575Hz,每一場525條掃描線。

適用於PAL制式錄像機的編碼器,其採樣頻率就是44.1kHz。適用於NTSC制式錄像機的編碼器,其採樣頻率就是44.056。早期,日本確有一些採用44.056kHz採用頻率的數碼錄音,但後來統一到44.1kHz了。

    那麼44.1和44.056kHz這二個數字是怎麼來的呢?
44,100=294 x 50 x 3
44,056=245 x 59.94 x 3

     50Hz和59.94Hz分別是PAL和NTSC的場頻, 294和245是從PAL和NTSC的線數上來的,因爲是隔行掃描的,所以掃描線數要除2。故此PAL的掃描線就變成312.5而NTSC則變成262.5。但在模擬電視時代,爲確保電視畫面內容完整,所以攝像機,錄像機,電視機都採用過掃描技術,最上,最下,最左,最右的部分都給捨去了。因此,無論PAL還是NTSC制式的實際掃描線,都比625和525少。PAL制式下可用掃描線數是294線,而NTSC則是245線。至於x3,則是在一條視頻掃描線的磁跡中,紀錄三個數碼音頻數據塊。於是,就有了上面的式子,就有了44.1kHz。

至於採樣頻率是44.1kHz可以表現的頻率範圍是0Hz - 22050Hz,根據耐奎斯特採樣理論,採樣頻率必須是信號最高頻率的兩倍,才能保證不失真。例如:音頻信號頻率爲20KHz的話,其採樣頻率一般需要40KHz。人耳所能聽到的頻率範圍是20Hz - 20000Hz,20KHz * 2 = 40KHz,考慮到一定的餘量採用44.1KHz。

 

3、採樣位數是什麼?(即圖1中的"16位")

也叫採樣值、取樣值。它客觀地反映了數字聲音信號對輸入聲音信號描述的準確程度。8位代表2的8次方--256,16位則代表2的16次方--64K。一段相同的音樂信息,8位聲卡只能處理256個精度單位,而16位聲卡能把它分爲64K個精度單位進行處理。8位採樣的差別在於動態範圍的寬窄,動態範圍寬廣,音量起伏的大小變化就能夠更精細的被記錄下來,如此一來不論是細微的聲音或是強烈的動感震撼,都可以表現的淋漓盡致,而CD音質的採樣規格正式16位採樣的規格。

 

4、通道數是什麼?(即圖1中的“2通道”)

即聲音的通道的數目。常有單聲道和立體聲之分,單聲道的聲音僅僅能使用一個喇叭發聲(有的也處理成兩個喇叭輸出同一個聲道的聲音),立體聲能夠使兩個喇叭都發聲(一般左右聲道有分工) ,更能感受到空間效果,當然還有很多其它的通道數,如5.1聲道、7.1聲道等。

 

5、比特率是什麼?

比特率,也叫碼率、位速。
是指在一個數據流中每秒鐘能通過多少比特的數據量。如705kbps,705---k---bit---per---second,表示每秒705600bit的容量。

對於音頻信號而言,必須進行編碼(即數據壓縮)。如果,未經過數據壓縮,直接量化進行傳輸則被稱爲PCM(脈衝編碼調製)。計算一個PCM音頻流的比特率公式爲:比特率 = 採樣率值 × 採樣位數 × 聲道數 bps。

如:一個採樣率爲44.1KHz,採樣大小爲16bit,雙聲道的PCM編碼的WAV文件,它的數據速率則爲 44.1K×16×2 =1411.2 Kbps。我們常說128K的MP3,對應的WAV的參數,就是這個1411.2 Kbps,這個參數也被稱爲數據帶寬,它和ADSL中的帶寬是一個概念。

將比特率除以8,就可以得到這個WAV的數據速率,即176.4KB/s。這表示存儲一秒鐘採樣率爲44.1KHz,採樣大小爲16bit,雙聲道的PCM編碼的音頻信號,需要176.4KB的空間,1分鐘則約爲10.34M,這對大部分用戶是不可接受的,尤其是喜歡在電腦上聽音樂的朋友,要降低磁盤佔用,只有2種方法,降低採樣指標或者壓縮。降低採樣指標是不可取的,因此專家們研發了各種壓縮方案。最原始的有DPCM、ADPCM,其中最出名的爲MP3。所以,採用了數據壓縮以後的比特率遠小於原始碼。

原則上,音頻位速越高質量越好。不過,對於有損壓縮音頻,不同的壓縮算法,即使比特速相同,也會導致音質結果完全不同。

典型代表:96kbps的WMA音頻格式的音質明顯要比96kbps的MP3音質好。爲什麼會這樣呢?因爲不同的壓縮算法,對數據的利用率不同而造成的差異。再舉例,假如MP3壓縮至48kbps以下,已經慘不忍睹,而如果是AAC音頻格式,同樣是48kbps的比特率下,音質明顯比MP3好。

而對於無損壓縮音頻,即使比特率完全不同,但是最後的音質卻相同。比如把同一個WAV文件分別壓縮成FLAC格式和APE格式,得到的文件,比特率是不太相同的,但是音質卻是一樣的。即使是同一種格式,壓縮級別不同,比特率也完全不同,可是最後的結果,音質還是一樣(但編碼解碼時,CPU佔用率不同,編碼時間也不同)。


6、PCM 分別是什麼?

PCM(Pulse Code Modulation)也被稱爲 脈碼編碼調製,用於模擬信號的數字化,簡單點理解,它是錄音後得到的音頻文件格式,特點是聲音數據沒有被壓縮。當然,它可以通過編碼壓縮,變成有損格式的音樂文件(如:amr、MP3、AAC)

常見的PCM音頻數據參數描述方式
    44100HZ 16bit stereo:每秒鐘有 44100 次採樣,採樣數據用 16 位(2字節)記錄,雙聲道(立體聲)
    22050HZ  8bit   mono:每秒鐘有 22050 次採樣,採樣數據用 8 位(1字節)記錄,單聲道

 

7、Android的SDK提供了哪些音頻採集API?有什麼區別?

Android SDK 中有兩套音頻採集的API,分別是:MediaRecorder 和 AudioRecord。兩者區別如下:

  • 輸出文件格式不同
    a)AudioRecord 輸出的是最原始、沒有經過壓縮、PCM格式的音頻文件。

    b)MediaRecorder 會對麥克風錄入的音頻數據,設置編碼器,進行編碼壓縮(如AMR、MP3等),最終輸出的是
         對應編碼   器(*.anr、*.mp3)格式的文件。
     
  • 代碼邏輯結構不同
    MediaRecorder 是對AudioRecord的封裝,內部會創建AudioRecord 用來與AudioFlinger 進行交互。 C++ 層MediaRecorder 創建AudioRecord 類的代碼位於AudioSource 類構造函數中。
     
  • 使用的播放器不同
    a)AudioRecord 對應的播放器是AudioTrack。AudioTrack只能播放已經解碼的PCM流或wav格式的音頻文件,因爲wav格式的音頻文件大部分都是PCM流。AudioTrack不創建解碼器,所以只能播放不需要解碼的wav文件。

    b)MediaRecorder 對應的播放器是MediaPlayer。可以播放多種格式的聲音文件(MP3、AAC、WAV、OGG、MIDI等)。MediaPlayer會在framework層創建對應的音頻解碼器

    c)兩個播放器的區別:MediaPlayer 是對AudioTrack 的封裝。
         MediaPlayer在framework層還是會創建AudioTrack,把解碼後的PCM數流傳遞給AudioTrack,AudioTrack再傳遞
         給AudioFlinger進行混音,然後才傳遞給硬件播放。

建議:
     1、如果只是想簡單地做一個錄音機,錄製音頻文件,就使用 MediaRecorder;
     2、如果需要對音頻做進一步的算法處理、或者編碼壓縮、以及網絡傳輸、直播等應用,則建議使用 AudioRecord。

 

部分參考資料源自互聯網,如有侵權,請聯繫作者刪除。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章