如何为其他应用路由音频

How to route audio for other apps

我有一个联网的 app/service 在一个固定的 Android 盒子上,它接收来自远程手持设备的音频。

我需要 Android 盒子的语音识别应用程序(例如 Google 应用程序)来处理此音频。这些应用程序从麦克风读取音频。

如何路由我的 app/service 中可用的音频,使其看起来像是从麦克风传来的?

我相信 AudioSystem 中的 DEVICE_OUT_REMOTE_SUBMIX 与此有关,但我找不到任何相关文档。

语音应用正在从 AUDIO_DEVICE_IN_BUILTIN_MIC 读取音频(或 Android 从实现此设备的 HAL 路由其输入音频) (更新:这是在音频策略管理器中实现的。一些 APM 不这样做,例如 Nexus 播放器。对于他们来说,APM 也需要修改。)

我为 Android 编写了一个音频 HAL,并将其配置为实现 AUDIO_DEVICE_IN_BUILTIN_MIC,同时我为此输入删除了主 HAL 的 conf。这足以让其他麦克风输入应用程序从我的 HAL 读取音频。

我通过我的 HAL 实现的另一个 AudioTrackAUDIO_DEVICE_OUT_LINE 将音频提供给 HAL,但如果将来需要,我也可以将其切换到 unix-socket。

讨论了有关配置的更多详细信息

[更新2]

如果使用AudioTrack来馈送音频,那么系统的音频输出也会馈送到hal。 我后来改用 unix 套接字将音频馈送到我的 HAL 以避免这种情况。