音频单元(v3)是否可以替换应用间音频以将音频发送到主机应用?

问题描述 投票:0回答:1

我的音乐表演应用程序使用AVAudioEngine播放音频,并使用应用程序间音频将引擎的输出发布到其他应用程序。这使用户可以将音频输入到在同一设备上运行的混音器应用程序中。由于IAA在iOS上已被弃用,而在Mac上不支持,因此我正尝试用音频单元代替此功能。

我已经使用Xcode模板添加了类型为augn的音频单元扩展,并且我知道internalRenderBlock是实际返回音频数据的内容。但是扩展如何访问容器(主)应用程序中播放的音频?

这甚至可能吗?我希望这将是一个常见的用例,因为音频单元被定位为IAA的替代品,但是我还没有看到任何人做这样的事的例子。我不想处理来自主机应用程序的输入,也不想从头开始产生声音。我需要点击包含应用程序正在播放的声音。

UPDATE

我刚刚阅读了App Extension Programming Guide中的“ App Extension如何通信”部分。看起来不太理想:

应用扩展程序仅与主机应用直接通信。应用程序扩展与其包含的应用程序之间没有直接通信;通常,包含的扩展程序正在运行时,包含的应用程序甚至无法运行。

也:

Today小部件(并且没有其他应用程序扩展类型)可以通过调用NSExtensionContext类的openURL:completionHandler:方法来要求系统打开其包含的应用程序。任何应用扩展程序及其包含的应用程序都可以访问私有定义的共享容器中的共享数据。

如果这是容器和扩展之间数据共享的程度,我不知道这怎么工作。该扩展程序需要实时访问AVAudioEngine节点,因此,如果包含应用程序的用户更改声音,播放,暂停,更改音量等,这些都将反映在主机应用程序收到的输出中。

但是,如果AUv3不具备此功能,我会想摆脱IAA,在平台上留下很大的空白。希望我没有想到另一种方法。

也许这需要反过来解决,所以在我的情况下,混音器应用程序将提供音频单元扩展,然后我的应用程序(音频播放器)将成为主机,并向混音器的扩展程序提供音频。但随后,混音器应用程序将面临无法从其扩展程序获取传入音频的相同问题。

ios audio audiounit avaudioengine
1个回答
0
投票

除了通过AVAudioEngine播放音频外,应用还必须在Audio Unit扩展中发布其音频输出。该应用程序扩展程序的输出可能会显示为其他应用程序或其他应用程序中包含的Audio Unit扩展程序的输入。

添加:要将音频数据从一个应用程序发送到其自己的应用程序扩展名,您可以尝试将该应用程序及其扩展名放在相同的App Group中,创建一组共享文件,并可能在内存中映射该共享文件。或使用writeToFile:atomically:将音频样本块放入共享文件的环形缓冲区中。

此外,iOS中最初的IAA之前方法是使用MIDI SysEx数据包在应用之间传递音频样本块。在macOS上,这也可能具有较低的延迟。

© www.soinside.com 2019 - 2024. All rights reserved.