Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android源和录音的多重利用_Android_Audio Recording_Android Source_Android Build - Fatal编程技术网

Android源和录音的多重利用

Android源和录音的多重利用,android,audio-recording,android-source,android-build,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. 第997行 我想知道这是为了什么目的?硬件限制?在播

我目前正在构建一个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.
第997行


我想知道这是为了什么目的?硬件限制?

在播放场景中,多个并发客户端向同一输出写入数据通过混合方式进行处理,混合方式在libaudioflinger中实现


要在录制场景中处理多个并发客户端,您需要某种流拆分器,它负责使用来自驱动程序的音频缓冲区并将其提供给所有客户端,还可能执行重采样、单声道/立体声转换等。普通Android实现根本没有流拆分器(反正不是最后一次了。)
我在索尼工作时,我们在一些手机上使用了专有的流拆分器(Xperia P,U和Solo,IIRC),这使我们能够支持多个录音客户端。因此,这是可能的,但并非微不足道。

任何人都可以猜测为什么这会成为政策。这可能是API限制或先占拥有麦克风输出的其他客户端的决定的基础

这真的很重要吗?如果您想产生线程,并在麦克风的输出缓冲区中为每个线程提供原始PCM字节数组的拆分副本,您可以自由地这样做

请看“audiotrack”,了解玩家使用缓冲区的一些背景信息

然后


在录像机的实现中实现一个,在缓冲区字节上添加一个拆分函数。然后在各自的线程中执行您想要的任何操作。

因此,如果我想开始我的研究,从libaudioflinger浏览和学习就够了,或者我应该看另一个更有用的代码吗?libaudioflinger看起来像一个g添加流拆分器(我们使用的是在这里添加的),以便一方面了解libaudioflinger的不同部分以及它如何连接到音频HAL,以及客户端API(例如,
音频录制
)另一方面,这当然是个好主意。你实现过这个拆分器吗?你能给我一些你所做的事情的指针吗?它还没有完成,但我可以给你一些关于它的信息!由@michael编写的答案很好,事实上你必须修改audioflinger(输入部分)为了匹配输出的工作方式,您必须将记录体系结构从硬件->编解码器->调度(audioflinger)修改为硬件->调度->codec@Vlad如果你想了解更多信息,请通过colliotv与我联系。epitech@gmail.com