云南建設(shè)廳和網(wǎng)站搜索引擎優(yōu)化的目標(biāo)
在 Android 系統(tǒng)的開發(fā)過程當(dāng)中,音頻異常問題通常有如下幾類:無聲、調(diào)節(jié)不了聲音、爆音、聲音卡頓和聲音效果異常(忽大忽小,低音缺失等)等。尤其聲音效果這部分問題通常從日志上信息量較少,相對(duì)難定位根因。想要分析此類問題,便需要對(duì)聲音傳輸鏈路有一定的了解,能夠在鏈路中對(duì)各節(jié)點(diǎn)的音頻流進(jìn)行采集,通過對(duì)比分析音頻流的實(shí)際效果來縮小問題范圍,找出原因。
一、音頻鏈路
抓取音頻鏈路當(dāng)中的音頻數(shù)據(jù)是分析聲音異常問題的有效方法,通過抓取不同節(jié)點(diǎn)的聲音數(shù)據(jù),可以幫助我們快速定位問題發(fā)生的原因。
音頻系統(tǒng)框架
對(duì)于這張圖我們并不陌生,正是安卓官方的音頻系統(tǒng)框架圖。Audio 音頻數(shù)據(jù)流整體上經(jīng)過 APP、framework、hal、kernel driver 四個(gè)部分。
從應(yīng)用端發(fā)起,不管調(diào)用 audio 還是 media 接口,最終還是會(huì)由 AudioTrack 將數(shù)據(jù)往下傳,經(jīng)由 AudioFlinger 啟動(dòng) MixThread 或 DirectThread 等,將多個(gè) APP 的聲音混合到一起,將聲音傳輸?shù)?hal 層。系統(tǒng)會(huì)根據(jù)音頻流類型 stream 和音頻策略 strategy 來選擇對(duì)應(yīng)的 output,從而找到對(duì)應(yīng)的 module,將音頻數(shù)據(jù)傳輸給 hal 層音頻庫 so 做聲音相關(guān)的處理并傳給 audio driver。