Plugins VST音频插件如何检测来自VST主机的流中断?

Plugins VST音频插件如何检测来自VST主机的流中断?,plugins,audio,vst,Plugins,Audio,Vst,我开发了一个简单的VST插件。插件有一个内部缓冲区,带有音频样本,如果音频流被中断,应该清除这些样本 现在,如果我在一些媒体播放器中使用这个插件(比如带有VST包装器插件的Foobar),我使用搜索栏跳到歌曲中的某个位置,或者切换到一首新歌,我仍然会听到以前音频的尾部 是否有任何VST回调或调用某些东西来通知插件此类流中断?没有确切的通知挂钩,但很容易看到播放是否已开始或停止。当传输停止和启动时,主机应该分别调用插件的suspend()和resume()。在这些调用中,您可以通过调用getTim

我开发了一个简单的VST插件。插件有一个内部缓冲区,带有音频样本,如果音频流被中断,应该清除这些样本

现在,如果我在一些媒体播放器中使用这个插件(比如带有VST包装器插件的Foobar),我使用搜索栏跳到歌曲中的某个位置,或者切换到一首新歌,我仍然会听到以前音频的尾部


是否有任何VST回调或调用某些东西来通知插件此类流中断?

没有确切的通知挂钩,但很容易看到播放是否已开始或停止。当传输停止和启动时,主机应该分别调用插件的
suspend()
resume()
。在这些调用中,您可以通过调用
getTimeInfo()
(在audioeffectx.h中声明)来询问插件的播放状态。您可以传递
kVstTransportChanged
kVstTransportPlaying
标志,让插件对传输更改做出相应的反应


但是,某些主机可能很顽皮,在仅更改播放位置而不更改传输状态时不会挂起/恢复。我不确定在这个过程中查询时间信息的CPU成本有多高,但您可以在那里尝试这样做,以查看主机是否在安排中跳跃。

foobar VST似乎“顽皮”,只在音频格式更改时调用resume(),而在流/歌曲更改时不调用。但是感谢时间信息的想法,我会试试的。想想看,我记得之前我在做一个大的VST插件,它要求在
process()
中提供传输信息,所以可能没什么大不了的。但我想一般来说,不要向前优化。。。如果这个调用是使你的插件工作所需要的,那么实现它,然后再对它进行基准测试哦,getTimeInfo()总是返回NULL,似乎这个特定的Foobar VST包装器没有提供任何有用的东西。我希望其他主机会更好。嗯,那可能是因为它本身不是一个合适的序列器。但他们肯定应该至少提供基本的播放信息。也许你可以问一下社区,或者向他们提交一份bug报告?