Others



Links

You can find more information about VST (links to web pages providing examples, last news, online documentation, VSTGUI update, mailing List, archive, register a Plug-In ID...) under http://www.steinberg.net/en/ps/support/3rdparty or http://ygrabit.steinberg.de.

We encourage you to subscribe to the VST mailing List, where you can find (almost always..:-)) an answer to all your question...To subscribe go to the previous given internet links.

 


VSTMonitor Plug-In (Monitoring)

VSTMonitor, provided with this SDK, is a Plug-In which is dedicated to "monitor" the communications between a VST Plug-In and the host which instanciates it : it keeps track of all the calls made by the host to the Plug-In's dispatcher, and of all the calls made by the Plug-In to the host's audiomaster.

This is useful to record the sequence of calls done by any host to a VST Plug-In while loading it.
Besides VSTMonitor has a "trigger" function which lets the user trigger (via a pop-up menu) any call to the host's audiomaster, to see how the host reacts (and notably to see if the function is implemented by the host...).

You will find this plug-in in the VSTPlug-ins folder dedicated to each platform. You only need to put it directly in your own VST plug-ins folder in order to make it work.

Calls made by the host to the plug-in are shown in grey, calls from the plug-in to the host are displayed in red.
Internal (to the plug-in) calls are shown in blue. 

All the GUI buttons don't correspond to "real" parameters declared to the host, in order to prevent from disturbing the monitoring. Nevertheless, 3 "real" parameters and 2 programs are declared "publically" (although they are not used internally) to let you see how they are handled by the host.

Important Note : many hosts, while loading, open each Vst plug-in, for example to check their IO configuration. This is "hidden" to the user (as the plug-in is always closed as soon as the information needed has been recorded by the host), but VstMonitor can record even those calls, and display them the next time it is open "normally" in the sequencer. That's why while the host is loading, an alert window may be automatically opened, asking if the user want to keep track of "what has happened" (and although he has not explicitly opened the plug-in).

VstMonitor's buttons :

 


"Reference" VST Calls Sequences

Introduction :

What follows concerns both VST Plug-Ins and VST hosts developers.
It gives the sequences of calls due to the “VST Communication” between a Plug-In and a host, at different moments of the “life” of the Plug-In.
Plug-Ins developers can find here the sequence of calls to which their Plug-Ins should have to answer.
Hosts developers can find here what could be considered as a “reference” for the VST calls (and their order) they have to implement.

The sequences have been tracked using NUENDO 2.0, and a VST 2.3 compatible Plug-In:



During Nuendo 2.0 Initialisation (first start when plugins are registred):

              ->Instanciation<- 
 0 :        Host to Plug, ***************CONSTRUCTOR***************
 1 :        Internal,     __EDITOR__ ********CONSTRUCTOR********
 2 :        Host to Plug, getPlugCategory  returned : PlugSurroundFx
 3 :        Host to Plug, setSampleRate ( 44100.000000 )
 4 :        Host to Plug, setBlockSize ( 5512 )
 5 :        Host to Plug, open
 6 :        Host to Plug, canDo ( bypass )   returned : 0
 7 :        Host to Plug, setPanLaw ( 0 , 0.707107 )   returned : false 
             ->Construct the program List<- 
 8 :        Host to Plug, getProgram  returned : 0
 9 :        Host to Plug, getVstVersion  returned : 2300
 10 :      Host to Plug, getProgramNameIndexed ( -1 , 0 , ptr to char )   returned : true , Default 
    ... other programs here...
 25 :       Host to Plug, getProgramName ( ptr to char )   returned : Default
 26 :       Host to Plug, getProgram  returned : 0
             ->Get Some Info<- 
 27 :       Host to Plug, canDo ( midiProgramNames )   returned : 0
 28 :       Host to Plug, getPlugCategory  returned : PlugSurroundFx
 29 :       Host to Plug, getVstVersion  returned : 2300
 30 :       Host to Plug, getVendorString ( ptr to char )   returned : true , Steinberg Media Technologies 
              ->Release it<-
31 :        Host to Plug, close
 32 :       Internal,     __EDITOR__ ********DESTRUCTOR********
 33 :       Host to Plug, ***************DESTRUCTOR***************


When the Plug-In is loaded on a track as Insert:

              ->Instanciation<-
 0 :          Host to Plug, ***************CONSTRUCTOR***************
 1 :          Internal,     __EDITOR__ ********CONSTRUCTOR********
 2 :          Host to Plug, getPlugCategory  returned : PlugSurroundFx
 3 :          Host to Plug, setSampleRate ( 44100.000000 )
 4 :          Host to Plug, setBlockSize ( 5512 )
 5 :          Host to Plug, open
 6 :          Host to Plug, canDo ( bypass )   returned : 0
 7 :          Host to Plug, setPanLaw ( 0 , 0.707107 )   returned : false
             ->Construct the program List<-
 8 :          Host to Plug, getProgram  returned : 0
 9 :          Host to Plug, getVstVersion  returned : 2300
 10 :        Host to Plug, getProgramNameIndexed ( -1 , 0 , ptr to char )   returned : true , Default 
    ... other programs here...
 25 :         Host to Plug, getProgramName ( ptr to char )   returned : Default
 26 :         Host to Plug, getProgram  returned : 0 
 27 :         Host to Plug, canDo ( midiProgramNames )   returned : 0 
               ->Switched to ON<-
 33 :         Host to Plug, getVstVersion  returned : 2300
 34 :         Host to Plug, setSpeakerArrangement  returned : true
      Note: if setSpeakerArrangement ()  returns false, this means that the Plug refuses this arrangement, the Host will ask getSpeakerArrangement () and then recall setSpeakerArrangement () with the required arrangement.
 35 :         Host to Plug, resume
 36 :         Host to Plug, canDo ( sendVstMidiEvent )   returned : 0
                ->Open Editor<-
 37 :         Host to Plug, canDo ( LiveWithoutToolbar )   returned : 0 
 39 :         Host to Plug, __EDITOR__ getRect  returned : 1
 40 :         Host to Plug, __EDITOR__ open
 92 :         Host to Plug, __EDITOR__ getRect  returned : 1
 93 :         Host to Plug, getProgram  returned : 0
 94 :         Host to Plug, __EDITOR__ setKnobMode ( 2 )   returned : 1
 95 :         Host to Plug, __EDITOR__ update
                ->Start Processing<- 
 41 :         Host to Plug, startProcess  returned : 0
 42 :         Host to Plug, processReplacing ( 5512 )  
      

Then if the Plug-In is deactivated (Off), and reactivated (On):

           ->Switched to OFF<-
 0 :         Host to Plug, stopProcess  returned : 0
 1 :         Host to Plug, suspend
          ->Switched to ON<- 
 2 :         Host to Plug, resume
 3 :         Host to Plug, canDo ( sendVstMidiEvent )   returned : 0
 4 :         Host to Plug, startProcess  returned : 0
 5 :         Host to Plug, processReplacing ( 5512 )


The Editor is closed, then opened :

             ->Close<- 
 0 :          Host to Plug, __EDITOR__ close
             ->Open<- 
 1 :          Host to Plug, canDo ( LiveWithoutToolbar )   returned : 0
 2 :          Host to Plug, __EDITOR__ getRect  returned : 1 
 4 :          Host to Plug, __EDITOR__ open
 54 :        Host to Plug, __EDITOR__ getRect  returned : 1
 55 :        Host to Plug, __EDITOR__ setKnobMode ( 2 )   returned : 1
 56 :        Host to Plug, __EDITOR__ update
              ->Open a Host FileSelector<- 
 57 :        Plug to Host, canHostDo ( openFileSelector )   returned : 1
 58 :        Plug to Host, canHostDo ( closeFileSelector )   returned : 1
 59 :        Plug to Host, openFileSelector  returned : true 
   

The Plug-In triggers a call to “iochanged” :

 0 :           Plug to Host, ioChanged  returned : true 
              ->Stop Processing<- 
 1 :           Host to Plug, stopProcess  returned : 0
 2 :           Host to Plug, suspend
              ->Ask the new Plug Configuration + Check the initialDelay<- 
 3 :           Host to Plug, getVstVersion  returned : 2300
 4 :           Host to Plug, getSpeakerArrangement  returned : true 
 5 :           Host to Plug, setSpeakerArrangement  returned : true 
              ->Reactivate the Plug<- 
 16 :         Host to Plug, resume
 17 :         Host to Plug, canDo ( sendVstMidiEvent )   returned : 0 
              ->Start Processing<- 
 18 :         Host to Plug, startProcess  returned : 0
 19 :         Host to Plug, processReplacing ( 5512 )


The Plug-In is used in offline processing :

            ->Instanciation<-
0 : Host to Plug, ***************CONSTRUCTOR***************
1 : Internal, __EDITOR__ ********CONSTRUCTOR********
2 : Host to Plug, getPlugCategory returned : PlugSurroundFx
3 : Host to Plug, setSampleRate ( 44100.000000 )
4 : Host to Plug, setBlockSize ( 5292 )
5 : Host to Plug, open
6 : Host to Plug, canDo ( bypass ) returned : 0
7 : Host to Plug, setPanLaw ( 0 , 0.707107 ) returned : false
             ->Construct the program List<- 
8 : Host to Plug, getProgram returned : 0
9 : Host to Plug, getVstVersion returned : 2300
10 : Host to Plug, getProgramNameIndexed ( -1 , 0 , ptr to char ) returned : true , Default
    ... other programs here...
25 : Host to Plug, getProgramName ( ptr to char ) returned : Default
26 : Host to Plug, getProgram returned : 0
27 : Host to Plug, canDo ( midiProgramNames ) returned : 0
28 : Host to Plug, resume
29 : Host to Plug, canDo ( sendVstMidiEvent ) returned : 0
30 : Host to Plug, suspend
            ->Load Last used Program<-
31 : Host to Plug, beginLoadProgram returned : 0
32 : Host to Plug, beginSetProgram returned : false
33 : Host to Plug, setProgramName ( Default )
34 : Host to Plug, getProgram returned : 0
95 : Host to Plug, endSetProgram returned : false
            -> Set some variables and Arrangement<-
96 : Host to Plug, setSampleRate ( 44100.000000 )
97 : Host to Plug, getVstVersion returned : 2300
98 : Host to Plug, setSpeakerArrangement returned : true
            ->Open Editor<-
99 : Host to Plug, __EDITOR__ getRect returned : 1
101 : Host to Plug, __EDITOR__ open
151 : Host to Plug, __EDITOR__ getRect returned : 1
152 : Host to Plug, getProgram returned : 0
153 : Host to Plug, __EDITOR__ setKnobMode ( 0 ) returned : 1
154 : Host to Plug, __EDITOR__ update
            ->Preview Enable<-
            ->First Loop<-
155 : Host to Plug, setSampleRate ( 44100.000000 )
156 : Host to Plug, getVstVersion returned : 2300
157 : Host to Plug, setSpeakerArrangement returned : true
159 : Host to Plug, resume
160 : Host to Plug, canDo ( sendVstMidiEvent ) returned : 0
161 : Host to Plug, processVariableIo(0) returned : false
162 : Host to Plug, setTotalSampleToProcess ( 130944 ) returned : 130944
      ->Note: if processVariableIo (0) returns false, processReplacing or Process will be called, else processVariableIo will be used<-
163 : Host to Plug, processReplacing ( 5292 )
164 : Host to Plug, suspend
            ->Second Loop<-
165 : Host to Plug, setSampleRate ( 44100.000000 )
166 : Host to Plug, getVstVersion returned : 2300
167 : Host to Plug, setSpeakerArrangement returned : true
168 : Host to Plug, resume
169 : Host to Plug, canDo ( sendVstMidiEvent ) returned : 0
170 : Host to Plug, processVariableIo (0) returned : false
171 : Host to Plug, setTotalSampleToProcess ( 130944 ) returned : 130944
      ->Note: if processVariableIo (0) returns false, processReplacing or Process will be called, else processVariableIo will be used<-
172 : Host to Plug, processReplacing ( 5292 )
173 : Host to Plug, suspend
            ->Apply Process<-
183 : Host to Plug, __EDITOR__ close
184 : Host to Plug, getProgramName ( ptr to char ) returned : Default
245 : Host to Plug, setSampleRate ( 44100.000000 )
246 : Host to Plug, getVstVersion returned : 2300
247 : Host to Plug, setSpeakerArrangement returned : true
248 : Host to Plug, resume
249 : Host to Plug, canDo ( sendVstMidiEvent ) returned : 0
250 : Host to Plug, processVariableIo(0) returned : false
251 : Host to Plug, setTotalSampleToProcess ( 130944 ) returned : 130944
      ->Note: if processVariableIo (0) returns false, processReplacing or Process will be called, else processVariableIo will be used<-
252 : Host to Plug, processReplacing ( 5292 )
253 : Host to Plug, suspend
            ->Release it<-
254 : Host to Plug, close
255 : Internal, __EDITOR__ ********DESTRUCTOR********
256 : Host to Plug, ***************DESTRUCTOR***************

 

Copyright ©2003 Steinberg Media Technologies GmbH. All Rights Reserved.