Может ли аудиоустройство (v3) заменить звук между приложениями для отправки звука в хост-приложение? - PullRequest
0 голосов
/ 22 апреля 2020

Моё музыкальное приложение c воспроизводит звук с AVAudioEngine и использует звук между приложениями для публикации sh вывода движка в других приложениях. Это позволяет пользователям передавать звук в приложение микшера, работающее на том же устройстве. Поскольку IAA устарела на iOS и не поддерживается на Ma c, я пытаюсь заменить эту функцию на аудиоустройства.

Я добавил расширение аудиоустройства типа augn, используя Шаблон XCode, и я понимаю, internalRenderBlock это то, что на самом деле возвращает аудиоданные. Но как расширение может получить доступ к аудиоплееру в приложении контейнера (основного)?

Возможно ли это? Я ожидал бы, что это будет общий случай использования, поскольку аудиоустройства позиционируются как замена для IAA, но я не видел примеров того, чтобы кто-то делал что-то подобное. Я не хочу обрабатывать ввод из хост-приложения и не хочу генерировать звук с нуля; Мне нужно подключиться к звуку, который воспроизводит содержащее приложение.

ОБНОВЛЕНИЕ

Я только что прочитал раздел «Как взаимодействует расширение приложения» в Руководство по программированию расширения приложения . Это не выглядит многообещающе:

Расширение приложения напрямую связывается только с приложением хоста. Нет прямой связи между расширением приложения и содержащим его приложением; как правило, содержащее приложение даже не работает, пока работает автономное расширение.

Кроме того:

Виджет Сегодня (и никаких других типов расширений приложения) может запрашивать система, чтобы открыть содержащее ее приложение, вызывая openURL: завершение: метод класса NSExtensionContext. Любое расширение приложения и содержащее его приложение могут получить доступ к общим данным в определенном частным общим контейнером.

Если это степень обмена данными между контейнером и расширением, я не понимаю, как это могло бы Работа. Расширению потребуется доступ к узлу AVAudioEngine в режиме реального времени, поэтому, если пользователь содержащего приложения изменяет звуки, воспроизводит, приостанавливает, изменяет громкость и т. Д. c. все это будет отражено в выходных данных, которые получает хост-приложение.

И все же я чувствую, что убираю IAA, если AUv3 не имеет этой возможности, оставляет большой пробел в платформе. Надеюсь, есть еще один подход, о котором я не думаю.

Может быть, это должно работать наоборот, поэтому в моем случае приложение микшера предложит расширение аудиоустройства, а затем мое приложение (аудио player) будет хостом и предоставит аудио для расширения микшера. Но тогда у приложения микшера возникла бы та же проблема: он не мог получить входящий звук из своего расширения.

Ответы [ 2 ]

2 голосов
/ 22 апреля 2020

В дополнение к воспроизведению аудио через AVAudioEngine, приложение должно также публиковать sh свой аудиовыход в расширении Audio Unit. Вывод этого расширения приложения может быть потенциально видимым для ввода других приложений или расширений аудиоустройства, содержащихся в других приложениях.

Добавлено: Чтобы отправить аудиоданные из приложения в собственное расширение приложения, вы можете попробовать поместить app и его расширение в той же группе приложений , создавая набор общих файлов и, возможно, отображая память совместно используемых файлов. Или используйте writeToFile: atomically: для помещения блоков аудиосэмплов в кольцевой буфер общих файлов.

Кроме того, оригинальный метод pre-IAA в iOS заключался в использовании пакетов данных MIDI SysEx для передачи блоков аудиосэмплов. между приложениями. Это может быть возможно и в macOS с довольно низкой задержкой.

0 голосов
/ 01 мая 2020

Я связался со службой технической поддержки Apple Developer, и они порекомендовали продолжать использовать IAA на iOS.

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

Я нашел пару сторонних альтернатив для Ма c:

Loopback - стоит пользователям $ 100, но я протестировал его с бесплатной пробной версией, и она работала

Blackhole - бесплатная для пользователей, с открытым исходным кодом и потенциально может быть лицензирована для интеграции в другие приложения ; Я не пробовал

...