在Android Audio開發過程中,有遇到播放ringtone時無聲,但播放Music可以聽到聲音,關於無聲問題的分析,在此做個筆記,方便以后回顧。
分析方向:
1:在音量控制面板中確認該音頻流對應的Volume_index大小是否等於0;
2:若Volmue_index != 0時,看user space的logcat與kernel log中有無明顯的Audio Fail項,比如設備是否選擇正確以及對應的路徑是否有配通;
3:在hardware層,在audio_hw.cpp文件中的out_write函數中添加log,判斷是否有數據寫入(QCOM MSM8939);
4:通過dumpsys media.audio_policy命令來查看對應音頻流是否被mute住,若被mute,需要分析AudioPolicyManager.cpp文件;
5:看當前音源檔本身的音量是否為0;
其中1與5之間的區別在於:在播放某音源檔時,在AudioTrack::set()函數里,先將音源數據的左右聲道的Volume設置為1.0,即為最大聲。而通過音量按鍵或則在VolumePanel中調節音量則是在最大音量基礎上做衰減操作。