Как читать данные с нескольких микрофонов с помощью Android Oboe / AAudio

Мне интересно получить доступ к обоим микрофонам на телефоне с помощью библиотеки Android Oboe. Большинство телефонов имеют конфигурацию с двумя микрофонами, и я хотел бы читать данные с обоих одновременно. Я расширил сэмпл LiveAffect из Oboe и попробовал следующее:

  1. Имею два гобоя :: AudioStream, по одному на каждый микрофон на моем телефоне (Note 9 и Pixel 1). Запуск только одного из потоков работает нормально, я могу читать данные и воспроизводить их / сохранять в файл. Но запуск обоих потоков не работает (я получаю следующую ошибку при попытке запустить второй поток через stream->requestStart(): E / AUDIO-APP: Ошибка запуска потока. ErrorInvalidState). По-видимому, запуск двух входных потоков является ограничением Android, как обсуждается в этом вопросе SO: Android Oboe Library: возможна запись 2 потоков с 2 записывающих устройств?

  2. Один поток, но с двумя каналами. Два микрофона на моем Note 9 являются частью одной группы, но когда я открываю поток с любым из них с 2 каналами (->setChannelCount(oboe::ChannelCount::Stereo);), я получаю дублирующиеся данные в обоих каналах только для одного микрофона. Я пробовал поиграть с AudioStreamBuilder настройками, например с ->setInputPreset(oboe::InputPreset::Camcorder). Ни одна из InputPresets настроек не исправила это, данные по-прежнему отображались в обоих каналах.

Обе попытки не сработали и с использованием бэкэнда OpenSL.


person Artash    schedule 04.05.2019    source источник
comment
Два микрофона на моем Note 9 относятся к одной группе - что вы подразумеваете под одной и той же группой?   -  person donturner    schedule 05.05.2019
comment
Число, возвращаемое функцией MicrophoneInfo.getGroup () (developer.android.com/reference/android/ media / MicrophoneInfo).   -  person Artash    schedule 06.05.2019


Ответы (2)


Я почти уверен, что это проблема именно этого устройства. Пользователь сообщил об идентичной проблеме на Форум JUCE здесь. Я зарегистрировал внутреннюю ошибку (id: 133143785) и попытаюсь направить ее в Samsung для дальнейшего расследования.

person donturner    schedule 20.05.2019

Единственный способ получить стерео вход для обоих микрофонов (AAUDIO или SLES) на Samsung S8 - это установить:

builder->setDeviceId(0) // mandatory ! if set to the microphone id you get only one mic!
builder->setDirection(oboe::Direction::Input) // obvious
builder->setChannelCount(2) // obvious
builder->setFormat(oboe::AudioFormat::I16) // with oboe converter float should work to
builder->setInputPreset(oboe::InputPreset::Generic) // or oboe::InputPreset::Camcorder
builder->setUsage(oboe::Usage::Media) // unsure if this is ness.

Я заметил странную вещь: androids AudioManager.getDevices (AudioManager.GET_DEVICES_ALL) на этом устройстве возвращает другой список после того, как вы использовали аудио в моно (2 x TYPE_BUILTIN_MIC) или стерео (1x TYPE_BUILTIN_MIC), все с AudioDeviceInfo.getChannelCounts , 2]!

person jeanC    schedule 20.02.2020
comment
К сожалению, это единственная конфигурация, которая дала мне и стереомикрофоны. Как только указан конкретный идентификатор микрофона, я получаю дублированный монофонический сигнал. - person Artash; 13.07.2020