由于我司项目特殊性,使用非标准的音频通路及设备,现做笔记。
- 由于平台建议,惯例使用Speaker通路对应Receiver设备,Receiver设备对应Speaker通路。而安卓原生的是Speaker通路对应Speaker设备,Receiver通路对应Receiver设备
- 有的项目同时具体Speaker设备和Receiver设备,例如功能较全的FT06。而有的项目产品只有Speaker设备,对应Receiver通路。但是无论哪种,都要进行音频通路和设备的设定
device/sprd/sharkle/sp9820e_2h10_c35/rootdir/system/etc/audio_params/tiny_hw.xml
详见最底部 - 修改使用哪种音频策略可以修改AudioPolicyManagerBase.cpp
- 修改使用哪种通路,Speaker和Receiver,可以通过AudioManager.setSpeakerPhoneOn()
修改文件tiny_hw.xml
<!-- TinyHAL configuration file for GOD --> <tinyalsa-audio device="SC8830 audio"> <!-- We are able to have most of our routing static so do that --> <path> <!-- DAC->Headphone --> <ctl name="HPL Playback Volume" val="6" /> <ctl name="HPR Playback Volume" val="6" /> <ctl name="DAC Playback Volume" val="2" /> <!-- DAC->Speaker --> <ctl name="SPKL Playback Volume" val="2" /> <ctl name="DAC Playback Volume" val="2" /> <!-- DAC->Earpiece --> <ctl name="EAR Playback Volume" val="6" /> <ctl name="DAC Playback Volume" val="2" /> <!-- ADC ->(main mic) --> <ctl name="ADCL Capture Volume" val="5" /> <ctl name="ADCR Capture Volume" val="5" /> </path> <!-- MUST NOT modify private field directly --> <private name="vb control"> <func name="VBC Switch" val="arm" /> </private> <private name="eq update"> <func name="VBC EQ Update" val="0" /> </private> <private name="da eq switch"> <func name="VBC DA EQ Switch" val="0" /> </private> <private name="ad01 eq switch"> <func name="VBC AD01 EQ Switch" val="0" /> </private> <private name="da eq profile"> <func name="VBC DA EQ Profile Select" val="0" /> </private> <private name="ad01 eq profile"> <func name="VBC AD01 EQ Profile Select" val="0" /> </private> <private name="internal PA"> <func name="Inter PA Config" val="304" /> </private> <private name="spk mute"> <func name="Speaker Mute" val="0" /> </private> <private name="spk2 mute"> <func name="Speaker2 Mute" val="0" /> </private> <private name="earpiece mute"> <func name="Earpiece Mute" val="0" /> </private> <private name="hp mute"> <func name="HeadPhone Mute" val="0" /> </private> <private name="Aud Codec Info"> <func name="Aud Codec Info" val="0" /> </private> <!-- 1.for pike2 use substitute of FM mute fuction for fm da0 mux unselect function, FM mute function effect the two channel,so remove name "fm da1 mux". 2. enable fm mux selected function when FM function is enabled, and disable it when FM function disable. --> <private name="fm da0 mux"> <func name="VBC_FM_UNMUTE_SMOOTH" val="0" /> </private> <private name="vbc_ad01iis_to_dfm"> <func name="AD IISMUX" val="0" /> </private> <!-- END OF MUST NOT modify private field directly --> <device name="builtin-mic"> <path name="on"> <ctl name="ADC LRCLK Select" val="invert"/> <ctl name="ADC1 LRCLK Select" val="invert"/> <ctl name="ADCL Mixer MainMICADCL Switch" val="1" /> <ctl name="Mic Function" val="1" /> <ctl name="ADCR Mixer MainMICADCR Switch" val="1" /> <ctl name="Aux Mic Function" val="1" /> </path> <path name="off"> <ctl name="Mic Function" val="0" /> <ctl name="ADCL Mixer MainMICADCL Switch" val="0" /> <ctl name="ADC1 LRCLK Select" val="normal"/> <ctl name="ADC LRCLK Select" val="normal"/> </path> </device> <device name="back-mic"> <path name="on"> <ctl name="ADCR Mixer AuxMICADCR Switch" val="1" /> <ctl name="Aux Mic Function" val="1" /> </path> <path name="off"> <ctl name="Aux Mic Function" val="0" /> <ctl name="ADCR Mixer AuxMICADCR Switch" val="0" /> </path> </device> <device name="headset-in"> <path name="on"> <ctl name="ADCR Mixer HPMICADCR Switch" val="1" /> <ctl name="Aux Mic Function" val="1" /> </path> <path name="off"> <ctl name="Aux Mic Function" val="0" /> <ctl name="ADCR Mixer HPMICADCR Switch" val="0" /> </path> </device> <device name="line-speaker"> <path name="on"> <ctl name="SPKL Mixer ADCLSPKL Switch" val="1" /> <ctl name="SPKL Mixer ADCRSPKL Switch" val="1" /> </path> <path name="off"> <ctl name="SPKL Mixer ADCLSPKL Switch" val="0" /> <ctl name="SPKL Mixer ADCRSPKL Switch" val="0" /> </path> </device> <device name="line-headphone"> <path name="on"> <ctl name="HPL Mixer ADCRHPL Switch" val="1" /> <ctl name="HPR Mixer ADCLHPR Switch" val="1" /> </path> <path name="off"> <ctl name="HPL Mixer ADCRHPL Switch" val="0" /> <ctl name="HPR Mixer ADCLHPR Switch" val="0" /> </path> </device> <device name="line"> <path name="on"> <ctl name="HeadPhone Mute" val="1" /> <ctl name="ADCL Mixer AILADCL Switch" val="1" /> <ctl name="ADCR Mixer AIRADCR Switch" val="1" /> <ctl name="Line Function" val="1" /> <ctl name="HeadPhone Mute" val="0" /> </path> <path name="off"> <ctl name="Line Function" val="0" /> <ctl name="ADCL Mixer AILADCL Switch" val="0" /> <ctl name="ADCR Mixer AIRADCR Switch" val="0" /> </path> </device> <device name="digital-fm"> <path name="on"> <ctl name="Digital FM Function" val="1" /> <ctl name="DA0 ADDFM MUX" val="1" /> <ctl name="DA1 ADDFM MUX" val="1" /> <ctl name="DA0 ADDST MUX" val="0" /> <ctl name="DA1 ADDST MUX" val="0" /> </path> <path name="off"> <ctl name="Digital FM Function" val="0" /> <ctl name="DA0 ADDST MUX" val="0" /> <ctl name="DA1 ADDST MUX" val="0" /> <ctl name="DA0 ADDFM MUX" val="0" /> <ctl name="DA1 ADDFM MUX" val="0" /> </path> </device> <device name="speaker"> <path name="on"> <ctl name="EAR Mixer DACLEAR Switch" val="1"/> <ctl name="Speaker Function" val="1" /> </path> <path name="off"> <ctl name="Speaker Function" val="0" /> <ctl name="EAR Mixer DACLEAR Switch" val="0"/> </path> </device> <device name="headphone"> <path name="on"> <ctl name="HPL EAR Sel" val="HPL" /> <ctl name="HPL Mixer DACLHPL Switch" val="1" /> <ctl name="HPR Mixer DACRHPR Switch" val="1" /> <ctl name="HeadPhone Function" val="1" /> </path> <path name="off"> <ctl name="HeadPhone Function" val="0" /> <ctl name="HPL Mixer DACLHPL Switch" val="0" /> <ctl name="HPR Mixer DACRHPR Switch" val="0" /> <ctl name="HPL EAR Sel" val="EAR" /> </path> </device> <device name="earpiece"> <path name="on"> <ctl name="SPKL Mixer DACLSPKL Switch" val="1"/> <ctl name="Earpiece Function" val="1" /> </path> <path name="off"> <ctl name="Earpiece Function" val="0" /> <ctl name="SPKL Mixer DACLSPKL Switch" val="0"/> </path> </device> <device name="dual-mic-voice"> <path name="on"> </path> <path name="off"> </path> </device> </tinyalsa-audio>