是否可以使用 Oboe 库同时打开 Android 中的 2 个麦克风?

Is it possible to open 2 microphones in Android at same time with Oboe library?

我正在尝试使用 google 的 Oboe 库为每个麦克风打开 2 个麦克风流:

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

但如果我尝试只打开第一个,然后只打开第二个,在 2 个不同的版本中,一切正常。那么我不能用双簧管打开 2 个麦克风流是真的吗?看起来很强大的库,应该可以吧

事实上,即使您有两个麦克风,根据文档中的说明,也不可能同时有多个流,只有当我们谈论内部麦克风时,因为它们由同一个频道,如果我们谈论的是外部设备,那么有两个 input-output 频道,你可以有两个不同的流。

大多数时候,

Android 不允许您从多个线程中捕获音频。您的 phone 有多少输入源或您使用哪个库都没有关系。您不能同时打开两个音频流。即使是两个独立的普通应用程序也不能同时访问输入源,如果您想在流源被另一个进程捕获时开始录制,则会返回错误。从 Android 10 起,发生了一些变化。根据文档:

Android 10 (API level 29) and higher imposes a priority scheme that can switch the input audio stream between apps while they are running. In most cases, if a new app acquires the audio input, the previously capturing app continues to run, but receives silence. In some cases the system can continue to deliver audio to both apps.

两个流意味着两个线程,就像两个不同的应用程序。在某些情况下,两个进程可以同时捕获音频,如下所示:

Assistant + ordinary app

Accessibility service + ordinary app

Voice call + ordinary app

有关详细信息,请阅读 Android 文档中的 this page