我正在尝试使用 google 打开 2 个麦克风流Oboe对于每个麦克风,像这样的库:
oboe::AudioStreamBuilder builder;
builder.setChannelCount(channelCount)
->setDirection(isInput ? oboe::Direction::Input : oboe::Direction::Output)
->setSharingMode((oboe::SharingMode) sharingMode)
->setPerformanceMode((oboe::PerformanceMode) performanceMode)
->setInputPreset((oboe::InputPreset)inputPreset)
->setDeviceId(deviceId)
->setSessionId((oboe::SessionId) sessionId)
->setSampleRate(sampleRate)
->setFormat((oboe::AudioFormat) format)
->setChannelConversionAllowed(channelConversionAllowed)
->setFormatConversionAllowed(formatConversionAllowed)
->setSampleRateConversionQuality((oboe::SampleRateConversionQuality) rateConversionQuality)
;
oboe::AudioStream *oboeStream = nullptr;
oboe::Result result = builder.openStream(&oboeStream);
如您所见,deviceId 被传递给构建器。这是我通过一些 java 方法获得的麦克风 ID。我通过 7 和 9 作为 id,用于内置麦克风和电话麦克风。问题是当我尝试启动 2 个流时:
oboeStream.requestStart()
我在第二个流中收到此错误:
E/AudioRecord: start() status -38
但如果我尝试在两个不同的版本中仅打开第一个,然后仅打开第二个,则一切正常。那么我真的无法用 Oboe 打开 2 个麦克风流吗?看起来是一个很强大的库,应该是可以的。
大多数时候,Android 不允许您从多个线程捕获音频。您的手机有多少输入源或使用哪个库并不重要。您无法同时打开两个音频流。即使两个单独的普通应用程序也无法同时访问输入源,如果您想在另一个进程捕获流源时开始录制,则会返回错误。从 Android 10 开始,发生了一些变化。根据文档:
Android 10(API 级别 29)及更高版本强制采用优先级方案
可以在应用程序运行时在应用程序之间切换输入音频流。
在大多数情况下,如果新应用程序获取音频输入,则先前的应用程序会获取音频输入。
捕获应用程序继续运行,但收到静默。在某些情况下
系统可以继续向这两个应用程序传送音频。
两个流意味着两个线程,就像两个不同的应用程序。在某些情况下,两个进程可以同时捕获音频,如下所示:
助手+普通应用
无障碍服务+普通App
语音通话+普通App
欲了解更多详情,请阅读这一页在 Android 文档中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)