首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >音频单元(v3)可以取代应用程序间的音频发送音频到主机应用程序吗?

音频单元(v3)可以取代应用程序间的音频发送音频到主机应用程序吗?
EN

Stack Overflow用户
提问于 2020-04-22 08:17:13
回答 2查看 448关注 0票数 1

我的音乐表演应用程序使用AVAudioEngine播放音频,并使用应用程序间音频将引擎的输出发布到其他应用程序。这允许用户将音频输入到运行在同一设备上的混音器应用程序中。由于IAA在iOS上不受欢迎,而在Mac上不受支持,所以我试图用音频单元替换这个功能。

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

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

更新

我刚刚在应用程序扩展编程指南中读到了“应用程序扩展如何通信”一节。看上去不太乐观:

应用程序扩展只与主机应用程序直接通信。在应用程序扩展与其包含的应用程序之间没有直接通信;通常情况下,包含的应用程序在运行包含的扩展时甚至没有运行。

另外:

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

如果这是容器和扩展之间数据共享的范围,我看不出这是如何工作的。扩展将需要实时访问AVAudioEngine节点,因此如果包含应用程序的用户更改声音、播放、暂停、更改音量等,则所有这些都会反映在主机应用程序接收的输出中。

然而,如果AUv3没有这种能力的话,我就想拿走IAA,在平台上留下了一个很大的差距。希望还有另一种我没想过的方法。

也许这需要反其道而行之,所以在我的情况下,混音器应用程序将提供音频单元扩展,然后我的应用程序(音频播放器)将成为主机,并将音频提供给混频器的分机。但是,混音器应用程序也会遇到同样的问题,即无法从其扩展部分获得输入的音频。

EN

回答 2

Stack Overflow用户

发布于 2020-04-22 16:25:52

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

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

另外,在iOS中最初的预IAA方法是使用MIDI SysEx数据包在应用程序之间传递音频样本块。这在macOS上也是可能的,它的延迟相当低。

票数 2
EN

Stack Overflow用户

发布于 2020-05-01 17:20:20

我联系了苹果开发公司的技术支持部门,他们建议继续在iOS上使用iOS。

他们还提到了在容器和扩展名之间交换数据,并在一个应用程序组中使用文件,我认为这不适合实时音频,但是HotPaw2的回答提供了一些关于如何使其工作的提示。

我确实为Mac找到了几个第三方替代方案:

环回 --花费用户100美元,但我用免费试用测试了它,它成功了。

对于用户来说,黑洞是免费的,开源的,并且有可能被许可集成到其他应用程序中;我没有尝试过。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61360345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档