是否可以从双簧管上的同一个麦克风打开 2 个流?

Is it possible to open 2 streams from the same microphone on 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)
            ;

会不会因为每个open的属性不同,所以不能正常工作?其中一个是用于处理某些效果的单声道,另一个是用于录音的立体声。格式也可能不同,我不知道。

但原则上,我觉得应该是可以的。 Android 应该将麦克风输入分成 2 个,然后对每个流采取相应的措施。

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

我不是 android 开发人员,请原谅我的法语 =) 但据我所见 android 使用 ALSA/OSS 作为音频的默认内核驱动程序,ALSA 不不支持在同一台设备上打开多于一个的 pcm,而且该设备不支持多于一个流。

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

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

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