Android源码和AudioRecord多用途

时间:2014-09-08 13:39:24

标签: android audio-recording android-source android-build

我目前正在构建一个Android自定义ROM,它只能通过语音控制: 所以我在android源代码中遇到了这部分代码:

// refuse 2 active AudioRecord clients at the same time except if the active input                         
// uses AUDIO_SOURCE_HOTWORD in which case it is closed.

https://android.googlesource.com/platform/hardware/libhardware_legacy/+/master/audio/AudioPolicyManagerBase.cpp第997行

我想知道它的目的是什么?硬件限制?

2 个答案:

答案 0 :(得分:3)

在播放场景中,写入同一输出的多个并发客户端通过混合处理,这在libaudioflinger中实现。

要在录制场景中处理多个并发客户端,您需要某种流分割器来处理来自驱动程序的消费音频缓冲区并将它们提供给所有客户端,并可能执行重采样,单声道/立体声转换,一个vanilla Android实现根本没有流分割器(不是我最后一次看的)。当我在索尼工作时,我们在几部手机上使用了专有的流分配器(Xperia P,U,和Solo,IIRC),它允许我们支持多个录制客户端。所以有可能这样做,但这并非无足轻重。

答案 1 :(得分:0)

任何人都在猜测为什么会成为政策。也许它是API决定限制或抢占拥有麦克风输出的其他客户的决定的基础。

真的重要吗?如果你想生成线程并在mic的输出缓冲区中提供每个原始PCM字节数组的分割副本,你可以自由地做到这一点。

关于玩家使用缓冲区的一些背景,请查看“audiotrack”here

然后

在记录器的实现中实现callback's here之一,在buffers字节上添加split函数。然后在各自的线程中做任何你想做的事。