【问题标题】:How can an Audio Unit detect start and stop of its host?音频单元如何检测其主机的启动和停止?
【发布时间】:2011-04-22 18:09:13
【问题描述】:
音频单元组件如何检测音频单元主机的启动和停止?
在组件的 Kernel Process() 中,我尝试了 CallHostTransportState(...) 方法,该方法返回主机是否正在播放,因此我可以检测到第一次启动;但是当主机停止时不再调用 Process(),所以我无法以这种方式检测到停止。并且由于未检测到停止,因此无法检测到下一次启动,因为未检测到“已停止”状态。
有什么想法吗?
谢谢。
【问题讨论】:
标签:
core-audio
transport
audiounit
【解决方案1】:
好吧,您似乎没有可以收听有关主机传输状态更改的特定属性,这意味着您需要自己监视它们。在我的脑海中,最简单的方法是创建一个新的运行循环(即使用CFRunLoop 或NSRunLoop,具体取决于您是否在 C++/Obj-C 层)并将其传递给引用到一个空闲函数,该函数又会将主机传输的状态传递给您的插件。
在 VST 世界中,这通常可以通过覆盖 idle() 来完成,但由于 AudioUnits 是面向拉取而不是面向推送的,因此您有时需要手动拉取信息并将其推送到您的插件.