Android Oboe Library: возможна запись 2 потоков с 2 записывающих устройств?
- Устройство: HUAWEI P smart
- Android-версия: 8.0.0
- Общее применение:
RecDev1 -> PlayDev1
RecDev2 -> PlayDev2
"одновременная трансляция"
где
RecDev может быть встроенным микрофоном, USB-микрофоном или гарнитурой-микрофоном
а также
PlayDev может быть встроенным динамиком, USB-динамиком или гарнитурой-динамиком
любое устройство ввода и вывода должно передаваться "ОДНОВРЕМЕННО" в любой комбинации, как показано выше. - Пример приложения (все устройства с каналом "1"):
Гитара -> проводной микрофон -> [(обработка)] -> встроенный динамик
Голос -> встроенный микрофон -> [(обработка)] -> проводной динамик
"одновременная трансляция" - Код:
это просто расширенная версия образца " LiveEffect", предоставленная Гобой.
До сих пор я пробовал:
, прямое расширение
, LiveEffectEngine больше не синглтон (2 экземпляра с собственным длинным mEngineHandle)
, использование 2 отдельных потоков
, установить обратный вызов для потока записи - Замечания:
Я получаю предупреждениеStream is NOT low latency
для всех 4 потоков, но все параметры совпадают:SharingMode::Exclusive PerformanceMode::LowLatency (not accepted) mSampleRate 48000 (default of PlaybackDevice) AudioFormat::I16
с API OpenSL-ES: я не могу запустить второй recordStream, stream->requestStart()
возвращает "ErrorInternal"
с AAudio API: я не могу открыть второй recordStream, builder.openStream()
возвращает "ErrorInvalidState"
В обоих случаях я звоню builder->setCallback(nullptr)
поэтому я подумал, что использование отдельных потоков может помочь, но это не решило проблему.
Есть идеи?
2 ответа
** в соответствии с ответом Дона Тернера: "Android не позволяет открывать входящие (т.е. записывать) аудиопотоки более чем на одно аудиоустройство одновременно. Этот вариант использования не поддерживается".
** Более четко:
- Android НЕ поддерживает запись с более чем ОДНОГО устройства ввода одновременно.
- Android НЕ поддерживает воспроизведение более чем на ОДИН выходное устройство одновременно.
- и наверняка комбинация из 2 пунктов выше НЕ работает.
** Это можно легко проверить, например, запустив 2 экземпляра этого образца AAudio параллельно и выбрав разные устройства вывода. Это просто не будет работать!
** ЭТО ОЧЕНЬ ВАЖНОЕ ОГРАНИЧЕНИЕ нигде не упоминается в официальной документации!!!
** Поэтому следующий "пример использования" НЕ поддерживается Android (oboe, aaudio, opensl es):
USB-Audio-In ---> Встроенный динамик
и в то же время
Микрофон ----> USB-Audio-Out
** Я очень разочарован, я потратил время и деньги, чтобы начать что-то основанное на этом, предполагая, что это "базовый" функционал... теперь я должен отказаться:-(
** Если я найду нужное место, я введу "запрос" для поддержки этой "функции", например, в AAudio.
** Надеюсь, что это поможет другим людям, прежде чем они потратят слишком много времени на что-то помимо текущих возможностей, предлагаемых Android и соответствующими библиотеками.
** Возможный обходной путь, обозначенный donturner, заключается в использовании специальной звуковой карты USB с 2 входами и 2 выходами, которые являются отдельными каналами в одном устройстве. К сожалению, это на самом деле не работает для меня, потому что я нацелился на дешевое решение без дополнительного оборудования (используя интерфейс гарнитуры).
Android не позволяет открывать входящие (т.е. записывать) аудиопотоки более чем на одно аудиоустройство одновременно. Этот вариант использования не поддерживается.
Возможно, если вы объясните, почему вы хотите записывать с разных встроенных микрофонов одновременно, я мог бы предложить обходной путь.
Обновление: термин " аудиоустройство" относится к устройству, способному или принимающему, или отправляющему аудио К аудиоустройству может быть подключено несколько микрофонов и / или динамиков, и они представлены как разные каналы.