Android 双簧管库:可以从 2 个录音设备录制 2 个流吗?
Android Oboe Library: 2 streams recording from 2 recording devices possible?
- 设备:HUAWEI P smart
- Android-版本:8.0.0
- 通用应用程序:
RecDev1 -> PlayDev1
RecDev2 -> PlayDev2
"simultaneous streaming"
其中
RecDev 可以是内置麦克风、USB-mic 或耳机-mic
和
PlayDev 可以是内置扬声器、USB 扬声器或耳机扬声器
任何输入和输出设备都应以如上所示的任何组合进行流式传输"SIMULTANEOUSLY"。
- 示例应用程序(具有“1”通道的所有设备):
吉他 -> 有线麦克风 -> [(处理中)] -> 内置扬声器
语音 -> 内置麦克风 -> [(处理中)] -> 有线扬声器
"simultaneous streaming"
- 代码:
只是双簧管提供的示例“LiveEffect”的扩展版本。
到目前为止,我尝试过:
.直接扩展
. LiveEffectEngine 不再是单例(2 个实例具有自己的长 mEngineHandle)
.使用 2 个单独的线程
.为录制流设置回调
- 注:
我收到所有 4 个流的警告 Stream is NOT low latency
,但所有参数都匹配:
SharingMode::Exclusive
PerformanceMode::LowLatency (not accepted)
mSampleRate 48000 (default of PlaybackDevice)
AudioFormat::I16
使用 OpenSL-ES API:我无法启动第二个 recordingStream,stream->requestStart()
returns "ErrorInternal"
with AAudio API: 我无法打开第二个 recordingStream,builder.openStream()
returns "ErrorInvalidState"
在这两种情况下,我都调用了 builder->setCallback(nullptr)
,所以我认为使用单独的线程可能会有所帮助,但这并没有解决问题。
有什么想法吗?
Android 不允许您同时向多个音频设备打开输入(即录制)音频流。不支持此用例。
也许如果您解释为什么要同时从不同的内置麦克风录音,我可以建议一个解决方法。
更新: 术语 Audio Device 是指能够接收或发送音频的设备。一个音频设备可以连接多个麦克风 and/or 个扬声器,它们表示为不同的通道。
** 根据 Don Turner 的回答:"Android does not allow you to open input (ie recording) audio streams to more than one audio device at the same time. This use case is not supported."
** 更清楚:
- Android 不支持同时从多个输入设备进行录制。
- Android 不支持同时播放到多个输出设备。
- 可以肯定的是,以上两点的组合也不起作用。
** 这可以很容易地测试,例如通过 运行 此 AAudio Sample 的 2 个实例并行并选择不同的输出设备。这根本行不通!
** 这个非常重要的约束在官方文档的任何地方都没有提到!!!
** 因此,Android(双簧管、aaudio、opensl es)不支持以下 "example use case":
USB 音频输入 ---> 内置扬声器
同时
麦克风 ----> USB 音频输出
** 我很失望,我花了时间和金钱开始基于此的东西,假设这是 "basic" 功能......现在我不得不放弃 :-(
**如果我找到合适的地方,那么我会输入一个"request"来支持这个"feature",例如在 AAudio 中。
** 希望这可以帮助其他人,以免他们在 Android 和相应库提供的当前功能之外投入太多时间。
** donturner 指出的一种可能的解决方法是使用具有 2 个输入和 2 个输出的特殊 USB 声卡,它们只是同一设备中的独立通道。不幸的是,这对我来说并不适用,因为我的目标是无需额外硬件(使用耳机接口)的低成本解决方案。
- 设备:HUAWEI P smart
- Android-版本:8.0.0
- 通用应用程序:
RecDev1 -> PlayDev1
RecDev2 -> PlayDev2
"simultaneous streaming"
其中
RecDev 可以是内置麦克风、USB-mic 或耳机-mic
和
PlayDev 可以是内置扬声器、USB 扬声器或耳机扬声器
任何输入和输出设备都应以如上所示的任何组合进行流式传输"SIMULTANEOUSLY"。
- 示例应用程序(具有“1”通道的所有设备):
吉他 -> 有线麦克风 -> [(处理中)] -> 内置扬声器
语音 -> 内置麦克风 -> [(处理中)] -> 有线扬声器
"simultaneous streaming"
- 代码:
只是双簧管提供的示例“LiveEffect”的扩展版本。
到目前为止,我尝试过:
.直接扩展
. LiveEffectEngine 不再是单例(2 个实例具有自己的长 mEngineHandle)
.使用 2 个单独的线程
.为录制流设置回调
- 注:
我收到所有 4 个流的警告Stream is NOT low latency
,但所有参数都匹配:
SharingMode::Exclusive PerformanceMode::LowLatency (not accepted) mSampleRate 48000 (default of PlaybackDevice) AudioFormat::I16
使用 OpenSL-ES API:我无法启动第二个 recordingStream,stream->requestStart()
returns "ErrorInternal"
with AAudio API: 我无法打开第二个 recordingStream,builder.openStream()
returns "ErrorInvalidState"
在这两种情况下,我都调用了 builder->setCallback(nullptr)
,所以我认为使用单独的线程可能会有所帮助,但这并没有解决问题。
有什么想法吗?
Android 不允许您同时向多个音频设备打开输入(即录制)音频流。不支持此用例。
也许如果您解释为什么要同时从不同的内置麦克风录音,我可以建议一个解决方法。
更新: 术语 Audio Device 是指能够接收或发送音频的设备。一个音频设备可以连接多个麦克风 and/or 个扬声器,它们表示为不同的通道。
** 根据 Don Turner 的回答:"Android does not allow you to open input (ie recording) audio streams to more than one audio device at the same time. This use case is not supported."
** 更清楚:
- Android 不支持同时从多个输入设备进行录制。
- Android 不支持同时播放到多个输出设备。
- 可以肯定的是,以上两点的组合也不起作用。
** 这可以很容易地测试,例如通过 运行 此 AAudio Sample 的 2 个实例并行并选择不同的输出设备。这根本行不通!
** 这个非常重要的约束在官方文档的任何地方都没有提到!!!
** 因此,Android(双簧管、aaudio、opensl es)不支持以下 "example use case":
USB 音频输入 ---> 内置扬声器
同时
麦克风 ----> USB 音频输出
** 我很失望,我花了时间和金钱开始基于此的东西,假设这是 "basic" 功能......现在我不得不放弃 :-(
**如果我找到合适的地方,那么我会输入一个"request"来支持这个"feature",例如在 AAudio 中。
** 希望这可以帮助其他人,以免他们在 Android 和相应库提供的当前功能之外投入太多时间。
** donturner 指出的一种可能的解决方法是使用具有 2 个输入和 2 个输出的特殊 USB 声卡,它们只是同一设备中的独立通道。不幸的是,这对我来说并不适用,因为我的目标是无需额外硬件(使用耳机接口)的低成本解决方案。