I just updated a wah-wah plugin to include an animated display. The effect uses a state space BPF with sinusoidally varying center frequency. The display is just a red circle that swings back and forth, tracking the center frequency. The size of the circle varies with the filter’s damping coefficient. I’ll admit that it is not a very useful feature, but I just wanted to see if I could do it. It seems to work as intended, but I did notice something peculiar. Under Audacity, the display is active when audio is playing and still when audio is paused or stopped. However, Under Ableton Live 9 Lite, the display is active even when audio is not playing. The center frequency is completely under the control of the “process block” method of my Wahwah class and this method is only called by the “process block” method of the audio processor. This seems to imply that Abelton is constantly calling the process block method (perhaps indirectly) even when it is not playing. Does this make sense? Just curious!
processBlock will be called by the host…
You can’t assume any behavior.
You can detect silence / detect playhead so you can try to make consistent UI. (Though sometimes plugins will be inserted on aux tracks / process live input even without playback)
But… Some hosts would call processBlock only when there’s audio on track, Some would stop after some silence, some will keep audio running.
Thanks. It appears that audio plugins live in a relatively unpredictable environment!
Yep. In native VST3 code, all parameter changes are passed in to the plug-in (and out from, as well) via the process call, so even if the transport is not running, the host needs to call the plug-in’s process function in order to pass any parameter changes (such as from automation). Cubase lets you turn this ability on or off via its preferences. Some hosts don’t follow this rule.
Use case: you have a reverb plugin on an FX or group bus. An active (armed for recording) audio channel sends to this bus. The plugin will constantly receive process callbacks to add reverb to your input, while no transport is running. PrepareToPlay() may even have been called hours ago…
Thanks to all for your prompt and informative responses!