Маршрутизация звука с нескольких гарнитур BT на Mac с повышением частоты дискретизации в реальном времени от частоты микрофона

Мне нужно принимать аудиопотоки от нескольких гарнитур Bluetooth, которые могут сэмплировать со своих микрофонов только низкие частоты 8 кГц или 16 кГц, записывать их в файлы wav, а также смешивать их в реальном времени с воспроизведением музыки с приемлемой частотой дискретизации 44,1 кГц. или 48 кГц и воспроизвести его пользователям через наушники с гарнитурой. В идеале это работало бы на Mac с macOS 10.14 Mojave, но у меня также есть доступ к Raspberry Pi 3 и NUC под управлением Windows или Ubuntu Linux.

Если бы не необходимость повышать дискретизацию микрофонного входа, я бы, вероятно, использовал для этого Jack. Однако Джеку, очевидно, нужно, чтобы все звуковые карты работали на одной и той же частоте, и, похоже, он не предоставляет возможности для ресампинга.

Пока что ближе всего к работающему решению я использовал SoX. Однако это создает ужасную задержку около 1 секунды, и я не смог контролировать ее с помощью параметра --buffer. Кроме того, похоже, что на Mac нет возможности указать аудиовход, что по сути ограничивает меня одной гарнитурой.

rec -V -c 1 -r 48000 -p | play -c 1 -r 48000 -p

Я пытался использовать PulseAudio, используя module-loopback и module-pipe-source в сочетании с module-pipe-stream. Пока я не получаю звука или искаженного звука. Также PulseAudio закрывается примерно через минуту после запуска, независимо от того, что я делаю. Интеграция PulseAudio с macOS CoreAudio кажется довольно хрупкой.

Мне не удалось подключить гарнитуру к Pi. Согласно в этом сообщении микрофонный ввод с гарнитуры с использованием профиля HSP BT очень плохо поддерживается.

Некоторые возможности, которые я рассматривал, но все же могу попробовать:

  • Запуск Pulseaudio на Raspberry Pi или внутри контейнера Docker и отправка аудио туда и обратно с Mac через RTP с использованием Roc
  • Микшируйте звук с микрофонов на встроенный выход AUX Mac. и сэмплируйте его обратно с входа AUX звуковой карты, подключенной к USB.
  • Используйте Windows или Linux вместо Mac.
  • Напишите собственный код в реальном времени на Python.

Буду признателен за ваш совет о том, как лучше всего решить эту проблему с передискретизацией и маршрутизацией звука в реальном времени.


person YitzikC    schedule 28.11.2019    source источник
comment
Roc в этом случае не работает, так как он может читать только со стерео устройства. Все, что моно или многоканальное, будет отклонено, по крайней мере, на Mac.   -  person YitzikC    schedule 04.12.2019


Ответы (2)


MAC OS X поддерживает платформу CoreAudio, структуру AudioToolkit и структуру AudioUnit, поэтому вы можете использовать структуры MAC для решения ваших задач.

Если вам нужно передискретизировать ваши входные данные, вы должны использовать отдельный блок AudioConverter.

Если вам нужен микшер, вы можете использовать аудиоблок для микширования разных партий.

(Аудиоустройство)

person mail2subhajit    schedule 28.11.2019
comment
Моя цель здесь - использовать существующие инструменты, не вдаваясь в разработку. Jack, PulseAudio и Roc уже построены на базе CoreAudio, по крайней мере, для доступа к устройствам. - person YitzikC; 29.11.2019

Раствор все время был у меня под носом. Оказывается, MacOS / X может объединять несколько аудиоустройств в «совокупное устройство», как объясняется в в блоге компании Roland. Следует проявлять осторожность, чтобы включить коррекцию дрейфа для аудиоканалов, поступающих из гарнитур.

person YitzikC    schedule 28.11.2019