VST 音频插件如何检测来自 VST 主机的流中断?
Posted
技术标签:
【中文标题】VST 音频插件如何检测来自 VST 主机的流中断?【英文标题】:How can VST audio plugin detect stream interrupts from VST host? 【发布时间】:2011-08-03 18:16:08 【问题描述】:我开发了一个简单的 VST 插件。该插件有一个带有音频样本的内部缓冲区,如果音频流被中断,则应清除该缓冲区。
现在,如果我在某些媒体播放器中使用此插件(例如带有 VST 包装器插件的 Foobar),并且我使用搜索栏跳到歌曲中的某个位置或切换到新歌曲,我仍然会听到以前音频的尾音.
是否有任何 VST 回调或被调用来通知插件有关此类流中断的东西?
【问题讨论】:
【参考方案1】:没有确切的通知挂钩,但很容易查看播放是开始还是停止。当传输停止和启动时,主机应该分别调用您的插件的suspend()
和resume()
。在这些调用中,您可以通过调用getTimeInfo()
(在 audioeffectx.h 中声明)来询问插件的播放状态。您可以传递 kVstTransportChanged
和 kVstTransportPlaying
标志让您的插件对传输更改做出相应的反应。
但是,某些主机可能会很顽皮,并且在仅更改播放位置而不是传输状态时不会暂停/恢复。我不确定在处理过程中查询时间信息的 CPU 成本有多大,但您可以尝试在那里这样做,以查看主机是否在安排中跳来跳去。
【讨论】:
似乎 foobar VST 很“调皮”,仅在音频格式更改时才调用 resume() 而不是在流/歌曲更改时调用。但是感谢您提供时间信息的想法,我会尝试的。 想一想,我记得之前在开发一个大型 VST 插件,之前在process()
中要求提供传输信息,所以也许这没什么大不了的。但我想作为一般规则,不要转发优化......如果该调用是您使插件工作所需的,请实现它,然后对其进行基准测试。 ;)
哦,getTimeInfo() 总是返回 NULL,看来这个特殊的 Foobar VST 包装器并没有提供任何有用的东西。我希望其他一些主机会更好。
嗯,这可能是因为它本身不是一个合适的音序器。但他们绝对应该提供至少基本的播放信息。也许您可以以某种方式询问社区和/或向他们提交错误报告?以上是关于VST 音频插件如何检测来自 VST 主机的流中断?的主要内容,如果未能解决你的问题,请参考以下文章