Android 音視頻開發基礎(一):音頻基礎

  1. 音頻開發主要應用有
    1.1 音頻播放器,錄音機,語音電話,音視頻直播應用,音頻編輯處理軟件,藍牙耳機、音箱等。

  2. 音頻開發具體內容有
    2.1 音頻採集與播放
    2.2 音頻算法處理(去噪,靜音檢測,回事消除,音效處理,功放/增強,混音/分離)
    2.3 音頻編解碼和格式轉換
    2.4 音頻傳輸協議的開發(SIP,A2DP, AVRCP,RTP,RTCP)

  3. 音頻應用的難點
    3.1 延時敏感、卡頓明感、噪聲抑制、回聲消除、靜音檢測、混音算法等。

  4. 音頻開發基礎概念有
    4.1 採樣率,採樣是從模擬語音信號轉數字信號的過程,所有的模擬信號都需要通過採樣轉爲可以表示的數字信號。目前44100Hz是唯一可以保證兼容所有Android手機的採樣率。

    4.2 奈奎斯特理論:採樣頻率不低於音頻信號最高頻率的兩倍,就可以做到無誤還原原始的聲音。通常人耳能聽到的20HZ-20KHZ的聲音,爲了保證不失真,採樣頻率應該在40KHZ以上。

    4.3 量化精度(位寬),每一個採樣點,都需要一個數值來表示大小,這個大小可以是4bit,8bit,16bit… 位數越多,表示越精細,聲音質量就越好,當然,數據量也成倍增大。ENCODING_PCM_16BIT是可以保證兼容所有Android手機的。
    4.4 聲道數,音頻可以從不同的音頻源採集並輸出到不同的揚聲器,一般表示聲音錄製時的音源數量或者回放時相應的揚聲器數量。常見有單身道mono及雙聲道stereo。

    4.5 音頻幀,音頻數據和視頻幀不一樣,視頻幀就是一張圖像,音頻數據是流式結構,本身沒有明確的一幀的概念,只是爲了音頻算法處理傳輸方便,約定2.5ms~60ms爲單位的數據量爲一幀音頻。這個時間爲採樣時間。AndioRecord內部的音頻緩衝區大小不能低於一幀音頻幀的大小。一幀音頻幀大小:int size = 採樣率x位寬x採樣時間x通道數。AudioRecord類提供了一個幫助我們確定緩衝區大小的函數,int getMinBufferSize(int sampleRateInHz, int channelConfig,int audioFormat)。假設某雙通道音頻信號採樣率爲8k,位寬16bit,20ms一幀的採樣時間。則一幀數據的大小爲:size = 8000x16x0.02x2 = 640byte(字節)

  5. 常見音頻編碼方式
    5.1 A/D需要採樣和量化,對應上面提到的採樣率和量化寬度。量化的過程被稱爲編碼,根據不同的量化策略,有不同的編碼方式,常見有PCM,ADPCM。這些數據代表了無損的原始數字音頻信號,添加一些文件頭信息,就可以存儲爲wav文件了。

    5.2 獲取不同手機終端的編解碼分辨率,可以通過adb工具獲取/system/etc/media_codecs.xml文件。

  6. 常見音頻壓縮格式
    原理:因爲有冗餘信息,所以需要壓縮
    6.1 頻譜掩蔽效應:人耳能察覺到的頻率範圍爲20hz-20khz,在這個頻率範圍之外的音頻信號屬於冗餘信號。

    6.2 時域掩蔽效應:當強音信號和弱音信號同時出現時,弱信號會聽不到,因此此時弱音信號也屬於冗餘信號。

  7. Android VoIP 相關的開源應用有
    7.1 Imsdroid,sipdroid,csipsimple,linephone,WebRTC等。

  8. 音頻算法處理的開源庫有
    8.1 Speex,ffmpeg,webrtc

  9. Android 提供音頻相關的API
    9.1 音頻採集:MediaRecoder,AudioRecord
    AudioTrack 提供了兩種播放模式,一種是static方式,一種是streaming方式,前者需要一次性將所有數據都寫入播放緩衝區,簡單高效,通常用於鈴聲播放,系統提醒的音頻片段,後者需要按照一定時間間隔不斷寫入音頻數據,理論上可以任何音頻播放的場景。

    9.2 音頻播放:SoundPool,MediaPlayer,AudioTrack

    9.3 音頻編解碼:MediaCodec

    9.4 NDK API:OpenSL ES

  10. 音頻開發的延時標準
    10.1 對於高質量語音可以接受延時爲300ms,一般而言,如果時延在300~400ms,通話的交互性比較差,但還可以接受,時延大於400ms時,則交互通信非常困難。

發佈了37 篇原創文章 · 獲贊 10 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章