Android智能手機中各種音頻情境下的audio data path

來源:互聯網
上載者:User

標籤:完數   compress   網路   image   .com   增強   架構   read   智能手機   

上一篇文章(Android智能手機上的音頻淺析)說本篇將詳細講解Android智能手機中各種音頻情境下的音頻資料流向,現在我們就開始。智能手機中音訊主要情境有音頻播放、音頻錄製、語音通訊等。不同情境下的音頻資料流向有很大差異,即使是同一情境,在不同的模式下音頻資料流向也有所不同。

 

1,音頻播放

Android系統audio架構中主要有三種播放模式:low latency playback、deep buffer playback和compressed offload playback。

a)low latency playback:用於按鍵音、遊戲背景音等對時延要求高的聲音輸出。音頻檔案是在AP側解碼成PCM資料,然後再經由Audio DSP送給codec晶片播放出來。

b)deep buffer playback:用於音樂等對時延要求不高的聲音輸出。音頻檔案是在AP側解碼成PCM資料,如果有音效的話會再對PCM資料處理(android audio framework中有effect音效模組,支援的音效有均衡器、低音增強、環繞聲等),然後再經由Audio DSP送給codec晶片播放出來。

c)compressed offload playback:用於音樂等聲音輸出,但是音頻解碼部分的工作是在Audio DSP中完成,AP側只負責把音頻碼流送到Audo DSP中,送出去後AP側會進行休眠,Audo DSP中會分配一塊較大的buffer去處理此資料,在Audo DSP中進行解碼、音效的處理等工作,在Audo DSP解碼器處理完資料之前,它會喚醒AP側去送下一包資料。用這種模式播放音頻能有效降低功耗,是最為推薦的播放音樂的模式。但是在目前的主流的音樂播放APP中用的基本上都是deep buffer的播放模式,比如QQ音樂、網易雲音樂和酷狗音樂等。看來系統平台廠商和APP廠商的做法是有差異的。至於哪些格式的音樂用這種模式播放,這需要在audioPolicy中去控制,我做的平台上是MP3(*.mp3)和AAC(*.m4a)用offload模式播放,因為這兩種格式最主流。

 

綜上low latency 模式和deep buffer模式都是在AP側解碼完後送PCM資料給Audio DSP,故音頻資料流向類似,我將放在一起講,而compressed offload模式是碼流送給Audio DSP解碼。播放系統音和遊戲音用low latency 模式,播放音樂用deep buffer或者compressed offload模式,播放錄音用deep buffer模式。接下來我們看看low latency /deep buffer和compressed offload兩種模式下的音頻資料流向。在音頻播放時音頻資料只經過AP和audio DSP。

 

1)low latency / deep buffer模式下的音頻資料流向

從看出,音頻檔案先在AP上軟解碼得到PCM後經過AudioTrack/audioFlinger中的Mixer thread(有可能要做音效後處理)/audio HAL/tinyALSA後送給kernel,然後用IPC將PCM送給Audio DSP經重採樣混音等後播放出來。由於在AP上已做解碼和音效後處理,Audio DSP上就不需要做了。

 

2)compressed offload模式下的音頻資料流向

從看出,音頻碼流經過AP上的AudioTrack/audioFlinger中的Offload thread(不需要做音效後處理)/audio HAL/tinyALSA後送給kernel,然後用IPC將碼流送給Audio DSP經解碼、後處理、重採樣、混音等後播放出來。

 

2,音頻錄製

很多人喜歡把參加的重要會議或者演講的音頻錄下來,以便重複聽或者他用。就是錄音時音頻資料的流向。同音頻播放一樣,錄音時音頻資料也是只經過AP和audio DSP。

從看出,codec晶片採集到的PCM資料送給Audio DSP經重採樣、前處理後送給AP的kernel,再經由tinyALSA/audio HAL /audioFlinger中的Record thread/audioRecord等後做軟編碼得到錄音碼流檔案並保持起來。

 

3,語音通訊

語音通訊就是打電話啦。它同音頻播放或者錄製不一樣,它是雙向的,分上行(uplink,把採集到的語音發送給對方)和下行(downlink,把收到的語音播放出來),而音頻播放或者錄製是單向的。它音頻資料流向也跟音頻播放或者錄製不一樣,只經過audio DSP和CP,就是打電話時音頻資料的流向。

從看出,在上行方向上codec晶片採集到的PCM資料送給Audio DSP經重採樣、前處理(AEC/ANS/AGC等)、編碼後得到碼流,並將碼流送給CP,CP處理後經過空口(air interface)送給對方。在下行方向上先從空口收對方送過來的語音資料,並做網路側處理(jitter buffer等),然後送給Audio DSP,Audio DSP收到後做解碼、後處理(ANS/AGC等)、重採樣等,再把PCM資料經DMA/I2S送給codec晶片播放出來。

Android智能手機中各種音頻情境下的audio data path

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.