关于android音频路由策略的修改(续)
承接我的上一篇https://blog.51cto.com/8906847/2367935文章。
例如你在住房和城市发展部抬头显示设备中,需要加入FMTX功能,即调频发射功能,另外需要在打开FMTX广播时,音频优先走FMTX芯片,而不是走演说家。
那么可以这样实现:
1)方法一:通过特定状态标记,来修改audiopolicy的引擎。cpp
2)方法二:是使用类似如下的方式:
如果是Java的,那么可以仿照类似如下的方式:
私人AudioManager getAudioManager () {
AudioManager AudioManager=(AudioManager) mContext.getSystemService (Context.AUDIO_SERVICE);
返回AudioManager;
}
getAudioManager()。<强> setWiredDeviceConnectionState 强> (AudioManager。DEVICE_OUT_AUX_DIGITAL 0““,“fmtx");表示fmtx关闭。
getAudioManager()。<强> setWiredDeviceConnectionState 强> (AudioManager。DEVICE_OUT_AUX_DIGITAL 1““,“fmtx");表示fmtx开启。
这样更新了音频输出设备可用,并且通知到框架/av/服务/audiopolicy enginedefault/src/Engine.cpp。
当然,你如果想自己增加一个DEVICE_OUT_FMTX类型也是可以的,但是更改的地方就比较多了,可以整个android代码搜索DEVICE_OUT_AUX_DIGITAL和AUDIO_DEVICE_OUT_AUX_DIGITAL,找到需要修改的地方。
对应的引擎。cpp对可用的音频输出设备的输出选择则修改如下:
diff - git/框架/av/服务/audiopolicy/enginedefault/src/引擎。cpp b/框架/av/服务/audiopolicy/enginedefault/src/引擎。cpp
指数3 dd84c3 . .5797595 100755
- - -/框架/av/服务/audiopolicy/enginedefault/src/引擎。cpp
+ + + b/框架/av/服务/audiopolicy/enginedefault/src/引擎。cpp
@@ -614年6 + 614,12 @@ audio_devices_t <>强劲引擎::getDeviceForStrategyInt 强> (routing_strategy策略,
+做
-
<李>如果availableOutputDevicesType,李AUDIO_DEVICE_OUT_AUX_DIGITAL) {>
<李>设备=availableOutputDevicesType和;李AUDIO_DEVICE_OUT_HEADPHONE; >
<李>打破;李>
<李>}
+},(0);李>
然后fmtx驱动把耳机的编解码器输出,通过开关硬件输出到fmtx的模块上,而不是耳机上。
利用这种方法,也可以解决例如需求:
1) BT比;FMTX祝辞演讲者
2)而且通话时,必须走演讲者,因为原子能委员会回声消除的问题。通过蓝牙音响的话,声音延迟太大,原子能委员会不好处理。
另外欢迎观看我发布的各个课程:https://edu.51cto.com/lecturer/8896847.html
或者
<强>我的3折优惠的专题组合课程:强>
https://edu.51cto.com/topic/2362.html或https://edu.51cto.com/topic/2385.html