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 :
- display : by default, comms
(a "comm" means a call to the dispatcher or audiomaster) are not automatically
displayed when they occur. Clicking on this button causes the
displaying.
- reset : used to erase all
the comms recorded.
- export : export as a .txt
file all the comms recorded,
- trigger : a pop-up menu
from which you can select a call to the host you would like to trigger
VstMonitor's options :
- filters : the user can
choose to filter (ie not display, as they are always recorded in the
background) some coms. In order to do that, you simply need to right-click (in
the display) on the comm you want to filter. This comm is then added to the
"filter menu" (one of the buttons beneath the display). Clicking on the name
of a function in this menu cause the filter to be removed. Some filters are
set by default, notably those which concern parameters (setParameter...), but
can be unset via the menu.
- function's params : the
user can choose to display the parameters of the calls
- function's returned value :
the user can choose to display the "result" of th call (it means the value
returned, and pointers which have been filled if necessary).
- continuous display : set this if you want the synchronous display
of the comms.
"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***************