在主机应用程序 (iOS) 中检测 AUv3 失效

Posted

技术标签:

【中文标题】在主机应用程序 (iOS) 中检测 AUv3 失效【英文标题】:Detecting AUv3 invalidations in a host app (iOS) 【发布时间】:2020-11-16 15:36:11 【问题描述】:

我正在开发一个 AUv3 主机应用程序,我希望在加载的音频单元由于某种原因崩溃(失效)时通知用户。我查看了 Apple 关于 AUAudioUnit 的文档,但找不到任何有关如何从主机应用中检测音频单元 (AUv3) 失效的信息。

有人知道怎么做吗?

谢谢

【问题讨论】:

也许你可以抓住kAudioComponentInstanceInvalidationNotification 并采取相应的行动。这通常是主机应用程序的重新启动。 非常感谢@OI。这完美无瑕:))) 【参考方案1】:

在设置您的 AudioEngine 时,您可以观察 kAudioComponentInstanceInvalidationNotification 以确定其音频组件实例是否稍后失效。

[[NSNotificationCenter defaultCenter] addObserverForName:kAudioComponentInstanceInvalidationNotification object:nil queue:nil usingBlock:^(NSNotification *note) 

    AUAudioUnit *auUnit = (AUAudioUnit *)note.object;

    NSValue *val = note.userInfo[@"audioUnit"];
    AudioUnit auAddress = (AudioUnit)val.pointerValue;

    NSLog(@"AudioComponent Invalidation of Unit:%@ with Address:%p", auUnit, auAddress);

];

请记住,您可能已经收到通知,但组件最终陷入了死锁。因此,当您试图从中恢复时,您可能不得不关闭整个主机应用程序。

【讨论】:

再次感谢@OI。所以实际上这让我想到了以下问题。有没有办法重新加载 AUAudioUnit,或者我应该简单地从音频引擎中删除无效的,然后实例化一个新的? 我会说:重新加载是根据定义无效和删除+实例新鲜。 :)

以上是关于在主机应用程序 (iOS) 中检测 AUv3 失效的主要内容,如果未能解决你的问题,请参考以下文章

使用Heartbeat和脚本使服务器服务失效后自动切换

Mac OS 桌面音频主机应用程序无法加载某些 AVAudioUnit 插件

电路可靠性设计:电子元器件失效的常规分类检测及案例分析

用Java检测远程主机是否能被连接

如何让 iOS 应用识别为 AudioUnit?

如何在音频单元扩展(实时进程)中为音频文件播放分配内存?