是否可以从Oboe的同一麦克风打开2个流?

问题描述

我正在尝试从Oboe上的同一麦克风打开2个输入流,但是它不起作用。

我要打开的音频输入之一是这样的:

defaultBuilder().setDirection(oboe::Direction::Input)
        ->setFormat(oboe::AudioFormat::Float) // For Now
        ->setChannelCount(1) // Mono in for effects processing
        ->openManagedStream(inStream);

然后另一个

builder.setChannelCount(channelCount)
            ->setDirection(isInput ? oboe::Direction::Input : oboe::Direction::Output)
            ->setSharingMode((oboe::SharingMode) oboe::SharingMode::Shared)
            ->setPerformanceMode((oboe::PerformanceMode) performanceMode)
            ->setInputPreset((oboe::InputPreset)inputPreset)
            ->setSessionId((oboe::SessionId) sessionId)
            ->setSampleRate(sampleRate)
            ->setFormat((oboe::AudioFormat) format)
            ->setChannelConversionAllowed(channelConversionAllowed)
            ->setFormatConversionAllowed(formatConversionAllowed)
            ->setSampleRateConversionQuality((oboe::SampleRateConversionQuality) rateConversionQuality)
            ;

是否可能由于每个打开的属性不同而使事情不起作用?其中一个是用于处理某些效果的单声道,另一个是用于录音的立体声。格式也可能有所不同,我不知道。

但是从原则上讲,我认为这应该是可能的。 Android应该将麦克风输入一分为二,然后针对每个流采取相应的措施。

解决方法

在Android中无法打开多个麦克风流。这是一个Android限制,除了要制作自定义android ROM并绕过此限制外,没有任何直接的解决方案。请检查我回答的this类似问题。

,

我不是android开发人员,请原谅我的法语=),但从我看到的情况来看,android使用ALSA / OSS作为音频的默认内核驱动程序,ALSA不支持在同一设备上打开超过一个pcm而且该设备不支持一个以上的流。

您可以在此处了解有关ALSA的更多信息:https://www.linuxjournal.com/article/6735
以及有关android音频的信息:https://source.android.com/devices/audio

对于您的问题,答案是否定的,您不能打开多个流,只是驱动程序和设备不支持该流。

但基本上,您可以使用一个编写器线程和2个读取器来实现某种缓冲区。