Android 如何从远程\u SUBMIX中排除流\u系统

Android 如何从远程\u SUBMIX中排除流\u系统,android,audio,android-source,audioflinger,Android,Audio,Android Source,Audioflinger,我正在编写一个应用程序,使用REMOTE_SUBMIX从设备录制音频。 据此,据说, 某些流被排除在远程submix之外,包括流环、流报警和流通知。这些流将一如既往地在本地呈现。 现在我也想排除STREAM_系统,但我找不到在AOSP源代码或任何配置文件中定义此策略/策略的位置 有人知道这方面的线索吗?非常感谢。它位于audiopolicy服务代码中(除非您使用的是基于参数框架的路由代码的Intel设备,否则它位于配置文件中) 我认为您感兴趣的代码如下: audiopolicy是这样工作的:首

我正在编写一个应用程序,使用REMOTE_SUBMIX从设备录制音频。 据此,据说,

某些流被排除在远程submix之外,包括流环、流报警和流通知。这些流将一如既往地在本地呈现。

现在我也想排除STREAM_系统,但我找不到在AOSP源代码或任何配置文件中定义此策略/策略的位置


有人知道这方面的线索吗?非常感谢。

它位于audiopolicy服务代码中(除非您使用的是基于参数框架的路由代码的Intel设备,否则它位于配置文件中)

我认为您感兴趣的代码如下:

audiopolicy是这样工作的:首先,它使用
引擎::getStrategyForStream
函数查找流的“策略”,然后进入
引擎::getDeviceForStrategyInt
为该策略选择设备

似乎
STREAM\u系统
STREAM\u音乐
都使用相同的
策略\u媒体


因此,如果您想排除系统声音,但将音乐播放保留在远程submix上,则必须进行一些更改。

非常感谢您的回答。这是接近我要找的。我在发布此问题时注意到engine.cpp。你能指出我应该修改哪个配置文件吗?我看到响铃和警报属于策略声音化,通知属于策略声音化。这两者不会在远程提交中混合使用。我是否要更改engine.cpp并将STREAM_系统移动到STRATEGY_SONIFICATION?正如我所说,它不在配置文件中,除非它是Intel制造的设备。是的,你可以从这个开始,看看它是否像你期望的那样工作,以及它是否破坏了其他任何东西。不幸的是,在尝试之前很难说你的想法是否可行。我试图修改engine.cpp以改变策略,并在我的目标板上替换libaudioPolicyEngineedFault.so。我看到了我添加的调试日志,但它仍然不能解决问题。了解潜在原因吗?我建议在Engine.cpp开头取消注释
/#define LOG\u NDEBUG 0
/#define VERY\u VERBOSE\u LOGGING
。这将为您提供一组关于策略引擎内部的丰富日志消息。您需要弄清楚为什么它会为您的流类型选择远程submix设备。