Compare commits
11 Commits
squashchun
...
master
Author | SHA1 | Date | |
---|---|---|---|
dd34df995f | |||
cb790214d5 | |||
4cc0976f81 | |||
80461d11c8 | |||
39180969bd | |||
c8ad7fcd9e | |||
42d0eb6509 | |||
ee34558c30 | |||
290c706d1a | |||
ba3b030e41 | |||
85e12b86f3 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -11,3 +11,4 @@ vstsdk2.4
|
|||||||
# files
|
# files
|
||||||
|
|
||||||
build/Release64/pdvstdebug.txt
|
build/Release64/pdvstdebug.txt
|
||||||
|
build/Release32/pdvstdebug.txt
|
52
README.md
52
README.md
@ -1,15 +1,24 @@
|
|||||||
|
# Attention
|
||||||
|
|
||||||
|
This repository has moved to
|
||||||
|
|
||||||
|
https://github.com/Lucarda/pdvst-0.52
|
||||||
|
|
||||||
|
|
||||||
# Pdvst-0.52
|
# Pdvst-0.52
|
||||||
|
|
||||||
|
|
||||||
Based on https://github.com/jyg/pure-data/tree/master/pdvst but updated to load with Pd-0.52
|
Based on https://github.com/jyg/pure-data/tree/master/pdvst but updated to load with Pd-0.52
|
||||||
or higher.
|
or higher.
|
||||||
|
|
||||||
|
Get pre-built binaries on https://git.nubegris.com.ar/lucarda/pdvst-0.52/releases
|
||||||
|
|
||||||
|
|
||||||
# How does it work ?
|
# How does it work ?
|
||||||
|
|
||||||
PdVst consists of two main parts :
|
PdVst consists of two main parts :
|
||||||
* a vst-plugin (pdvst-template32.dll, pdvst-template64.dll) to place in your favorite vst folder.
|
* a vst-plugin (`pdvst-template.dll`) to place in your favorite vst folder.
|
||||||
* a custom external scheduler (vstschedlib.dll) to copy in the pure-data /bin folder
|
* a custom external scheduler (`vstschedlib.dll`) to copy in the pure-data /bin folder
|
||||||
|
|
||||||
When a PdVst plugin is opened by the host application, a setup file (*.pdv) is read to determine
|
When a PdVst plugin is opened by the host application, a setup file (*.pdv) is read to determine
|
||||||
information about the plugin, such as the Pd patch file to use, the number of parameters, etc...
|
information about the plugin, such as the Pd patch file to use, the number of parameters, etc...
|
||||||
@ -20,7 +29,7 @@ An instance of Pd.exe is started and opens the Pd patch file whose name was foun
|
|||||||
This new version doesn't need a custom version of pure-data. You can use your current pure-data
|
This new version doesn't need a custom version of pure-data. You can use your current pure-data
|
||||||
installation (>= Pd-0.52) with your favorite externals).
|
installation (>= Pd-0.52) with your favorite externals).
|
||||||
|
|
||||||
1) According to your pd version (32 or 64 bits), go to the folder pd-scheduler32 or pd-scheduler64.
|
1) According to your pd version (32 or 64 bits), go to the folder `Release32` or `Release64`.
|
||||||
Copy `vstschedlib.dll` to `\bin` directory of your current pure-data installation
|
Copy `vstschedlib.dll` to `\bin` directory of your current pure-data installation
|
||||||
|
|
||||||
2) Copy your plugin `.dll` file (e.g. `Pd_Gain.dll`) to the vst plugins directory
|
2) Copy your plugin `.dll` file (e.g. `Pd_Gain.dll`) to the vst plugins directory
|
||||||
@ -49,9 +58,9 @@ Copy `vstschedlib.dll` to `\bin` directory of your current pure-data installatio
|
|||||||
files (`.pd` files, external Pd library `.dll` files, etc.) as specified above (section
|
files (`.pd` files, external Pd library `.dll` files, etc.) as specified above (section
|
||||||
"Installation").
|
"Installation").
|
||||||
|
|
||||||
* Make a copy of the `pdvst-template32.dll` / `pdvst-template64.dll` file and
|
* Make a copy of the `pdvst-template.dll` file and
|
||||||
rename the same as the plugin and `.pdv` file (e.g. for a plugin named
|
rename the same as the plugin and `.pdv` file (e.g. for a plugin named
|
||||||
Pd_Gain you would copy `pdvst-template32.dll` to a new file named `Pd_Gain.dll`).
|
Pd_Gain you would copy `pdvst-template.dll` to a new file named `Pd_Gain.dll`).
|
||||||
Move your new plugin `.dll` file to the vst plugins folder of the application.
|
Move your new plugin `.dll` file to the vst plugins folder of the application.
|
||||||
|
|
||||||
# The .pdv Setup File-
|
# The .pdv Setup File-
|
||||||
@ -106,6 +115,13 @@ For an example, see Pd_Gain.pdv.
|
|||||||
Defines the parameter values for the last declared program. <float> must be
|
Defines the parameter values for the last declared program. <float> must be
|
||||||
between 0 and 1 inclusive.
|
between 0 and 1 inclusive.
|
||||||
|
|
||||||
|
PROGRAMSARECHUNKS = <TRUE/FALSE>
|
||||||
|
All vst parameters are saved in the host session and additionally
|
||||||
|
you can set/get some "Pd list" in the session or to a .fxp/.fxb file
|
||||||
|
via [s svstdata] and [r rvstdata]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Pd/VST audio/midi Communication
|
# Pd/VST audio/midi Communication
|
||||||
|
|
||||||
When the plugin is opened, the .pd patch file declared in the .pdv setup file's MAIN key
|
When the plugin is opened, the .pd patch file declared in the .pdv setup file's MAIN key
|
||||||
@ -128,16 +144,20 @@ For purposes such as GUI interaction and VST automation, your patch may need to
|
|||||||
further with the VST host. Special Pd send/receive symbols can be used in your Pd patch.
|
further with the VST host. Special Pd send/receive symbols can be used in your Pd patch.
|
||||||
For an example, see the pd-gain.pd file.
|
For an example, see the pd-gain.pd file.
|
||||||
|
|
||||||
* rvstparameter<integer> : Use this symbol to receive parameter values from the VST host. Values will be floats between 0 and 1 inclusive.
|
* `rvstparameter<integer>` : Use this symbol to receive parameter values from the VST host. Values will be floats between 0 and 1 inclusive.
|
||||||
* svstparameter<integer> : Use this symbol to send parameter values to the VST host. Values should be floats between 0 and 1 inclusive.
|
* `svstparameter<integer>` : Use this symbol to send parameter values to the VST host. Values should be floats between 0 and 1 inclusive.
|
||||||
* rvstopengui : Use this symbol to receive notification that the patch's GUI should be opened or closed. The value will be either 1 or 0.
|
* `svstdata` : Use this symbol to save a Pd list as "chunk" data in the host DAW's save file (see `PROGRAMSARECHUNKS` setting above).
|
||||||
* rvstplugname : Use this symbol to receive plug & instance name from host
|
* `rvstdata` : Use this symbol to receive a Pd list of "chunk" data that was saved into the DAW file by your patch. Triggered at load time.
|
||||||
* vstTimeInfo (play head information support) :
|
* `rvstopengui` : Use this symbol to receive notification that the patch's GUI should be opened or closed. The value will be either 1 or 0.
|
||||||
|
* `rvstprognumber`: Use this symbol to receive program number changes from host.
|
||||||
|
* `rvstprogname`: Use this symbol to receive program name changes from host.
|
||||||
|
* `rvstplugname`: Use this symbol to receive plug & instance name from host
|
||||||
|
* `vstTimeInfo`: (play head information support) :
|
||||||
|
|
||||||
vstTimeInfo.ppqPos, vstTimeInfo.tempo, vstTimeInfo.timeSigNumerator, vstTimeInfo.timeSigDenominator, vstTimeInfo.flags are experimental receivers for getting time infos from host. Names should change in the future.
|
`vstTimeInfo.ppqPos`, `vstTimeInfo.tempo`, `vstTimeInfo.timeSigNumerator`, `vstTimeInfo.timeSigDenominator`, `vstTimeInfo.flags` are experimental receivers for getting time infos from host. Names should change in the future.
|
||||||
|
|
||||||
* EXPERIMENTAL
|
* EXPERIMENTAL
|
||||||
guiName : use this symbol to send and signal to the host the name of the gui-extra window to embed (see Pd_Gain(gui) example).
|
`guiName` : use this symbol to send and signal to the host the name of the gui-extra window to embed (see Pd_Gain(gui) example).
|
||||||
|
|
||||||
Note: for most VST hosts, parameters for VST instruments are recorded as sysex data, so be
|
Note: for most VST hosts, parameters for VST instruments are recorded as sysex data, so be
|
||||||
sure to disable any MIDI message filtering in the VST host.
|
sure to disable any MIDI message filtering in the VST host.
|
||||||
@ -146,11 +166,11 @@ sure to disable any MIDI message filtering in the VST host.
|
|||||||
|
|
||||||
* Windows x32 and x64 only
|
* Windows x32 and x64 only
|
||||||
* Support for embedding external gui window into host
|
* Support for embedding external gui window into host
|
||||||
* multichannel audio in/out support
|
* Multichannel audio in/out support
|
||||||
* integrated vst midi-in, experimental midi-out
|
* Integrated CST MIDI-in, experimental MIDI-out
|
||||||
* added play head information support (see examples)
|
* Play head information support (see examples)
|
||||||
|
* Save chunk data to host DAW
|
||||||
|
|
||||||
#TODO
|
#TODO
|
||||||
|
|
||||||
* optimize plugin loading
|
* optimize plugin loading
|
||||||
* use of chunks for preset saving
|
|
78
build/Release32/Pd_Chunks-test/Pd_Chunks-test.pd
Normal file
78
build/Release32/Pd_Chunks-test/Pd_Chunks-test.pd
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
#N canvas 19 118 947 544 12;
|
||||||
|
#X obj 78 87 adc~, f 6;
|
||||||
|
#X obj 73 241 loadbang;
|
||||||
|
#X msg 73 271 \; pd dsp 1 \;;
|
||||||
|
#X obj 77 162 dac~, f 6;
|
||||||
|
#X msg 142 52 \$1 30;
|
||||||
|
#X obj 142 87 line~;
|
||||||
|
#X obj 122 127 *~;
|
||||||
|
#X obj 78 127 *~;
|
||||||
|
#X obj 142 11 r gain;
|
||||||
|
#X obj 242 8 r rvstparameter0;
|
||||||
|
#X obj 239 279 * 100;
|
||||||
|
#X obj 239 307 dbtorms;
|
||||||
|
#X obj 239 334 s gain;
|
||||||
|
#X obj 297 269 s svstparameter0;
|
||||||
|
#X obj 242 72 vsl 50 128 0 1 0 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000 0 1;
|
||||||
|
#X msg 242 39 set \$1;
|
||||||
|
#X text 320 114 range is 0..1;
|
||||||
|
#X obj 64 393 r rvstplugname;
|
||||||
|
#X symbolatom 64 425 26 0 0 0 - - - 0;
|
||||||
|
#X obj 478 447 r rvstdata;
|
||||||
|
#X obj 476 356 s svstdata;
|
||||||
|
#X obj 478 479 print;
|
||||||
|
#X symbolatom 673 132 26 0 0 0 - - - 0;
|
||||||
|
#X obj 673 100 r rvstprogname;
|
||||||
|
#X obj 503 100 r rvstprognumber;
|
||||||
|
#X floatatom 503 124 5 0 0 0 - - - 0;
|
||||||
|
#X msg 476 324 hello world 1.2;
|
||||||
|
#N canvas 182 182 450 300 additionally 0;
|
||||||
|
#X msg 121 99 12 34 56 hello;
|
||||||
|
#X msg 150 136 0.2 0.4 0.78 foo;
|
||||||
|
#X msg 190 179 0.2 0.4 0.78 bar;
|
||||||
|
#X msg 211 208 0.7 0.5 10 something;
|
||||||
|
#X obj 117 49 sel 0 1 2 3;
|
||||||
|
#X obj 136 250 list;
|
||||||
|
#X obj 136 274 outlet;
|
||||||
|
#X obj 117 15 inlet;
|
||||||
|
#X connect 0 0 5 0;
|
||||||
|
#X connect 1 0 5 0;
|
||||||
|
#X connect 2 0 5 0;
|
||||||
|
#X connect 3 0 5 0;
|
||||||
|
#X connect 4 0 0 0;
|
||||||
|
#X connect 4 1 1 0;
|
||||||
|
#X connect 4 2 2 0;
|
||||||
|
#X connect 4 3 3 0;
|
||||||
|
#X connect 5 0 6 0;
|
||||||
|
#X connect 7 0 4 0;
|
||||||
|
#X restore 503 154 pd additionally;
|
||||||
|
#X listbox 503 182 23 0 0 0 - - - 0;
|
||||||
|
#X text 466 223 Experimental. Not all hosts supports it correctly. See the .pdv file. This only works if PROGRAMSARECHUNKS = TRUE is set., f 50;
|
||||||
|
#X obj 242 213 t f f;
|
||||||
|
#X text 464 273 1 all vstparameters are tracked and additionally you can send some Pd list to the host's data chunk;
|
||||||
|
#X text 463 383 2 from the host save your current session (or to a file as .fxp or .fxb);
|
||||||
|
#X text 462 417 3 from the host open your session (or the file you saved);
|
||||||
|
#X text 500 11 When the host chamges the program these 2 are updated. Additionally you can use this to set lots of parameters that are not exposed to the host. The program used is stored and recalled in the host/DAW project., f 52;
|
||||||
|
#X connect 0 0 7 0;
|
||||||
|
#X connect 0 1 6 0;
|
||||||
|
#X connect 1 0 2 0;
|
||||||
|
#X connect 4 0 5 0;
|
||||||
|
#X connect 5 0 6 1;
|
||||||
|
#X connect 5 0 7 1;
|
||||||
|
#X connect 6 0 3 1;
|
||||||
|
#X connect 7 0 3 0;
|
||||||
|
#X connect 8 0 4 0;
|
||||||
|
#X connect 9 0 15 0;
|
||||||
|
#X connect 10 0 11 0;
|
||||||
|
#X connect 11 0 12 0;
|
||||||
|
#X connect 14 0 30 0;
|
||||||
|
#X connect 15 0 14 0;
|
||||||
|
#X connect 17 0 18 0;
|
||||||
|
#X connect 19 0 21 0;
|
||||||
|
#X connect 23 0 22 0;
|
||||||
|
#X connect 24 0 25 0;
|
||||||
|
#X connect 25 0 27 0;
|
||||||
|
#X connect 26 0 20 0;
|
||||||
|
#X connect 27 0 28 0;
|
||||||
|
#X connect 30 0 10 0;
|
||||||
|
#X connect 30 1 13 0;
|
57
build/Release32/Pd_Chunks-test/Pd_Chunks-test.pdv
Normal file
57
build/Release32/Pd_Chunks-test/Pd_Chunks-test.pdv
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
# Number of audio input and output channels
|
||||||
|
CHANNELS = 2
|
||||||
|
|
||||||
|
# installation directory of puredata (optional)
|
||||||
|
# If non specified, will search in <host_exec_dir>\pdvst\pd\
|
||||||
|
# then in <vst_dir>\.pd\
|
||||||
|
#PDPATH = D:\Programs\pd-0.48-1-test\
|
||||||
|
|
||||||
|
# Main Pd patch of the plugin
|
||||||
|
MAIN = Pd_Chunks-test.pd
|
||||||
|
|
||||||
|
# Unique four character VST plugin ID
|
||||||
|
ID = pdch
|
||||||
|
|
||||||
|
# Whether this is a VSTi
|
||||||
|
SYNTH = FALSE
|
||||||
|
|
||||||
|
# Whether there is a custom GUI (e.g. GrIPD)
|
||||||
|
CUSTOMGUI = FALSE
|
||||||
|
|
||||||
|
# Display Pd GUI or not
|
||||||
|
DEBUG = TRUE
|
||||||
|
|
||||||
|
# External libraries (comma delimited list, relative to pdvst/)
|
||||||
|
# ***OBSOLETE, use [declare] inside patch instead***
|
||||||
|
#LIB =
|
||||||
|
|
||||||
|
# All vst parameters are saved in the host session and additionally
|
||||||
|
# you can set/get some "Pd list" in the session or to a .fxp/.fxb file
|
||||||
|
# via [s svstdata] and [r rvstdata]
|
||||||
|
PROGRAMSARECHUNKS = TRUE
|
||||||
|
|
||||||
|
# Number of VST parameters (up to 128)
|
||||||
|
PARAMETERS = 1
|
||||||
|
|
||||||
|
# Name of first VST parameter
|
||||||
|
# used when CUSTOMGUI is false or VST host doesn't support custom editors
|
||||||
|
NAMEPARAMETER0 = Level
|
||||||
|
|
||||||
|
# Define a program (up to 128)
|
||||||
|
PROGRAM = Full Blast
|
||||||
|
|
||||||
|
# Set first parameter value for this program
|
||||||
|
PARAMETER0 = 1.0
|
||||||
|
|
||||||
|
#another program
|
||||||
|
PROGRAM = Muted
|
||||||
|
|
||||||
|
PARAMETER0 = 0.0
|
||||||
|
|
||||||
|
#another program
|
||||||
|
PROGRAM = -6dB
|
||||||
|
|
||||||
|
PARAMETER0 = 0.5
|
||||||
|
|
||||||
|
#another program
|
||||||
|
PROGRAM = test empty param
|
@ -1,4 +1,4 @@
|
|||||||
#N canvas 0 265 818 358 12;
|
#N canvas 19 118 947 544 12;
|
||||||
#X obj 78 87 adc~, f 6;
|
#X obj 78 87 adc~, f 6;
|
||||||
#X obj 73 241 loadbang;
|
#X obj 73 241 loadbang;
|
||||||
#X msg 73 271 \; pd dsp 1 \;;
|
#X msg 73 271 \; pd dsp 1 \;;
|
||||||
@ -9,19 +9,50 @@
|
|||||||
#X obj 78 127 *~;
|
#X obj 78 127 *~;
|
||||||
#X obj 142 11 r gain;
|
#X obj 142 11 r gain;
|
||||||
#X obj 242 8 r rvstparameter0;
|
#X obj 242 8 r rvstparameter0;
|
||||||
#X obj 242 235 * 100;
|
#X obj 239 279 * 100;
|
||||||
#X obj 242 263 dbtorms;
|
#X obj 239 307 dbtorms;
|
||||||
#X obj 242 290 s gain;
|
#X obj 239 334 s gain;
|
||||||
#X obj 300 225 s svstparameter0;
|
#X obj 297 269 s svstparameter0;
|
||||||
#X obj 277 75 vsl 50 128 0 1 0 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000 0 1;
|
#X obj 242 72 vsl 50 128 0 1 0 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000 0 1;
|
||||||
#X msg 277 42 set \$1;
|
#X msg 242 39 set \$1;
|
||||||
#X text 355 117 range is 0..1;
|
#X text 320 114 range is 0..1;
|
||||||
#X obj 498 10 r rvstplugname;
|
#X obj 64 393 r rvstplugname;
|
||||||
#X symbolatom 498 48 17 0 0 0 - - - 0;
|
#X symbolatom 64 425 26 0 0 0 - - - 0;
|
||||||
#X obj 516 102 r rvstdata;
|
#X obj 478 447 r rvstdata;
|
||||||
#X symbolatom 516 136 17 0 0 0 - - - 0;
|
#X obj 476 356 s svstdata;
|
||||||
#X obj 516 265 s svstdata;
|
#X obj 478 479 print;
|
||||||
#X msg 547 216 symbol hello\ world\ 2;
|
#X symbolatom 673 132 26 0 0 0 - - - 0;
|
||||||
|
#X obj 673 100 r rvstprogname;
|
||||||
|
#X obj 503 100 r rvstprognumber;
|
||||||
|
#X floatatom 503 124 5 0 0 0 - - - 0;
|
||||||
|
#X msg 476 324 hello world 1.2;
|
||||||
|
#N canvas 182 182 450 300 additionally 0;
|
||||||
|
#X msg 121 99 12 34 56 hello;
|
||||||
|
#X msg 150 136 0.2 0.4 0.78 foo;
|
||||||
|
#X msg 190 179 0.2 0.4 0.78 bar;
|
||||||
|
#X msg 211 208 0.7 0.5 10 something;
|
||||||
|
#X obj 117 49 sel 0 1 2 3;
|
||||||
|
#X obj 136 250 list;
|
||||||
|
#X obj 136 274 outlet;
|
||||||
|
#X obj 117 15 inlet;
|
||||||
|
#X connect 0 0 5 0;
|
||||||
|
#X connect 1 0 5 0;
|
||||||
|
#X connect 2 0 5 0;
|
||||||
|
#X connect 3 0 5 0;
|
||||||
|
#X connect 4 0 0 0;
|
||||||
|
#X connect 4 1 1 0;
|
||||||
|
#X connect 4 2 2 0;
|
||||||
|
#X connect 4 3 3 0;
|
||||||
|
#X connect 5 0 6 0;
|
||||||
|
#X connect 7 0 4 0;
|
||||||
|
#X restore 503 154 pd additionally;
|
||||||
|
#X listbox 503 182 23 0 0 0 - - - 0;
|
||||||
|
#X text 466 223 Experimental. Not all hosts supports it correctly. See the .pdv file. This only works if PROGRAMSARECHUNKS = TRUE is set., f 50;
|
||||||
|
#X obj 242 213 t f f;
|
||||||
|
#X text 464 273 1 all vstparameters are tracked and additionally you can send some Pd list to the host's data chunk;
|
||||||
|
#X text 463 383 2 from the host save your current session (or to a file as .fxp or .fxb);
|
||||||
|
#X text 462 417 3 from the host open your session (or the file you saved);
|
||||||
|
#X text 500 11 When the host chamges the program these 2 are updated. Additionally you can use this to set lots of parameters that are not exposed to the host. The program used is stored and recalled in the host/DAW project., f 52;
|
||||||
#X connect 0 0 7 0;
|
#X connect 0 0 7 0;
|
||||||
#X connect 0 1 6 0;
|
#X connect 0 1 6 0;
|
||||||
#X connect 1 0 2 0;
|
#X connect 1 0 2 0;
|
||||||
@ -31,13 +62,17 @@
|
|||||||
#X connect 6 0 3 1;
|
#X connect 6 0 3 1;
|
||||||
#X connect 7 0 3 0;
|
#X connect 7 0 3 0;
|
||||||
#X connect 8 0 4 0;
|
#X connect 8 0 4 0;
|
||||||
#X connect 9 0 10 0;
|
|
||||||
#X connect 9 0 15 0;
|
#X connect 9 0 15 0;
|
||||||
#X connect 10 0 11 0;
|
#X connect 10 0 11 0;
|
||||||
#X connect 11 0 12 0;
|
#X connect 11 0 12 0;
|
||||||
#X connect 14 0 13 0;
|
#X connect 14 0 30 0;
|
||||||
#X connect 14 0 10 0;
|
|
||||||
#X connect 15 0 14 0;
|
#X connect 15 0 14 0;
|
||||||
#X connect 17 0 18 0;
|
#X connect 17 0 18 0;
|
||||||
#X connect 19 0 20 0;
|
#X connect 19 0 21 0;
|
||||||
#X connect 22 0 21 0;
|
#X connect 23 0 22 0;
|
||||||
|
#X connect 24 0 25 0;
|
||||||
|
#X connect 25 0 27 0;
|
||||||
|
#X connect 26 0 20 0;
|
||||||
|
#X connect 27 0 28 0;
|
||||||
|
#X connect 30 0 10 0;
|
||||||
|
#X connect 30 1 13 0;
|
||||||
|
@ -25,6 +25,11 @@ DEBUG = TRUE
|
|||||||
# ***OBSOLETE, use [declare] inside patch instead***
|
# ***OBSOLETE, use [declare] inside patch instead***
|
||||||
#LIB =
|
#LIB =
|
||||||
|
|
||||||
|
# All vst parameters are saved in the host session and additionally
|
||||||
|
# you can set/get some "Pd list" in the session or to a .fxp/.fxb file
|
||||||
|
# via [s svstdata] and [r rvstdata]
|
||||||
|
PROGRAMSARECHUNKS = TRUE
|
||||||
|
|
||||||
# Number of VST parameters (up to 128)
|
# Number of VST parameters (up to 128)
|
||||||
PARAMETERS = 1
|
PARAMETERS = 1
|
||||||
|
|
||||||
@ -46,4 +51,7 @@ PARAMETER0 = 0.0
|
|||||||
#another program
|
#another program
|
||||||
PROGRAM = -6dB
|
PROGRAM = -6dB
|
||||||
|
|
||||||
PARAMETER0 = 0.94
|
PARAMETER0 = 0.5
|
||||||
|
|
||||||
|
#another program
|
||||||
|
PROGRAM = test empty param
|
||||||
|
Binary file not shown.
@ -18,4 +18,5 @@ ALL: vstschedlib.c
|
|||||||
-shared -L$(PDDIR)bin -l:pd.dll -o vstschedlib.dll
|
-shared -L$(PDDIR)bin -l:pd.dll -o vstschedlib.dll
|
||||||
strip vstschedlib.dll
|
strip vstschedlib.dll
|
||||||
#cp vstschedlib.dll ../build/pd-scheduler$(arch)/vstschedlib.dll
|
#cp vstschedlib.dll ../build/pd-scheduler$(arch)/vstschedlib.dll
|
||||||
cp vstschedlib.dll ../build/Release$(arch)/.pd/bin/vstschedlib.dll
|
#cp vstschedlib.dll ../build/Release$(arch)/.pd/bin/vstschedlib.dll
|
||||||
|
cp vstschedlib.dll ../build/Release$(arch)/vstschedlib.dll
|
@ -205,17 +205,52 @@ int setPdvstPlugName(char* instanceName)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int setPdvstChunk(char* instanceName)
|
/*receive data chunk from host*/
|
||||||
|
int setPdvstChunk(const char *amsg)
|
||||||
{
|
{
|
||||||
t_symbol *tempSym;
|
t_symbol *tempSym;
|
||||||
tempSym = gensym("rvstdata");
|
tempSym = gensym("rvstdata");
|
||||||
|
|
||||||
if (tempSym->s_thing)
|
if (tempSym->s_thing)
|
||||||
{
|
{
|
||||||
pd_symbol(tempSym->s_thing, gensym(instanceName));
|
size_t len = strlen(amsg);
|
||||||
|
t_binbuf* bbuf = binbuf_new();
|
||||||
|
binbuf_text(bbuf, amsg, len);
|
||||||
|
|
||||||
|
int msg, natom = binbuf_getnatom(bbuf);
|
||||||
|
t_atom *at = binbuf_getvec(bbuf);
|
||||||
|
|
||||||
|
for (msg = 0; msg < natom;) {
|
||||||
|
int emsg;
|
||||||
|
for (emsg = msg; emsg < natom && at[emsg].a_type != A_COMMA
|
||||||
|
&& at[emsg].a_type != A_SEMI; emsg++);
|
||||||
|
if (emsg > msg) {
|
||||||
|
int i;
|
||||||
|
/* check for illegal atoms */
|
||||||
|
for (i = msg; i < emsg; i++)
|
||||||
|
if (at[i].a_type == A_DOLLAR || at[i].a_type == A_DOLLSYM) {
|
||||||
|
pd_error(NULL, "rvstdata: got dollar sign in message");
|
||||||
|
goto nodice;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (at[msg].a_type == A_FLOAT) {
|
||||||
|
if (emsg > msg + 1)
|
||||||
|
pd_list(tempSym->s_thing, 0, emsg-msg, at + msg);
|
||||||
|
else pd_float(tempSym->s_thing, at[msg].a_w.w_float);
|
||||||
|
}
|
||||||
|
else if (at[msg].a_type == A_SYMBOL) {
|
||||||
|
pd_anything(tempSym->s_thing, at[msg].a_w.w_symbol, emsg-msg-1, at + msg + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
nodice:
|
||||||
|
msg = emsg + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
binbuf_free(bbuf);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -250,15 +285,30 @@ void sendPdVstFloatParameter(t_vstParameterReceiver *x, t_float floatValue)
|
|||||||
ReleaseMutex(pdvstTransferMutex);
|
ReleaseMutex(pdvstTransferMutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendPdVstChunk(t_vstChunkReceiver *x, t_symbol *sym)
|
/*send data chunk to host*/
|
||||||
|
void sendPdVstChunk(t_vstChunkReceiver *x, t_symbol *s, int argc, t_atom *argv)
|
||||||
{
|
{
|
||||||
|
char *buf;
|
||||||
|
int length;
|
||||||
|
t_atom at;
|
||||||
|
t_binbuf*bbuf = binbuf_new();
|
||||||
|
|
||||||
|
SETSYMBOL(&at, s);
|
||||||
|
binbuf_add(bbuf, 1, &at);
|
||||||
|
binbuf_add(bbuf, argc, argv);
|
||||||
|
binbuf_gettext(bbuf, &buf, &length);
|
||||||
|
binbuf_free(bbuf);
|
||||||
|
|
||||||
WaitForSingleObject(pdvstTransferMutex, INFINITE);
|
WaitForSingleObject(pdvstTransferMutex, INFINITE);
|
||||||
|
memset(&pdvstData->datachunk.value.stringData, '\0', MAXSTRINGSIZE);
|
||||||
pdvstData->datachunk.type = STRING_TYPE;
|
pdvstData->datachunk.type = STRING_TYPE;
|
||||||
pdvstData->datachunk.direction = PD_SEND;
|
pdvstData->datachunk.direction = PD_SEND;
|
||||||
pdvstData->datachunk.updated = 1;
|
pdvstData->datachunk.updated = 1;
|
||||||
strcpy(pdvstData->datachunk.value.stringData,sym->s_name);
|
//strcpy(pdvstData->datachunk.value.stringData,buf);
|
||||||
|
memcpy(pdvstData->datachunk.value.stringData, buf, length);
|
||||||
ReleaseMutex(pdvstTransferMutex);
|
ReleaseMutex(pdvstTransferMutex);
|
||||||
|
|
||||||
|
freebytes(buf, length+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendPdVstGuiName(t_vstGuiNameReceiver *x, t_symbol *symbolValue)
|
void sendPdVstGuiName(t_vstGuiNameReceiver *x, t_symbol *symbolValue)
|
||||||
@ -268,9 +318,7 @@ void sendPdVstGuiName(t_vstGuiNameReceiver *x, t_symbol *symbolValue)
|
|||||||
pdvstData->guiName.direction = PD_SEND;
|
pdvstData->guiName.direction = PD_SEND;
|
||||||
pdvstData->guiName.updated = 1;
|
pdvstData->guiName.updated = 1;
|
||||||
strcpy(pdvstData->guiName.value.stringData,symbolValue->s_name);
|
strcpy(pdvstData->guiName.value.stringData,symbolValue->s_name);
|
||||||
|
|
||||||
ReleaseMutex(pdvstTransferMutex);
|
ReleaseMutex(pdvstTransferMutex);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void makePdvstParameterReceivers()
|
void makePdvstParameterReceivers()
|
||||||
@ -292,20 +340,14 @@ void makePdvstGuiNameReceiver()
|
|||||||
{
|
{
|
||||||
vstGuiNameReceiver = (t_vstGuiNameReceiver *)pd_new(vstGuiNameReceiver_class);
|
vstGuiNameReceiver = (t_vstGuiNameReceiver *)pd_new(vstGuiNameReceiver_class);
|
||||||
pd_bind(&vstGuiNameReceiver->x_obj.ob_pd, gensym("guiName"));
|
pd_bind(&vstGuiNameReceiver->x_obj.ob_pd, gensym("guiName"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void makevstChunkReceiver()
|
void makevstChunkReceiver()
|
||||||
{
|
{
|
||||||
vstChunkReceiver = (t_vstChunkReceiver *)pd_new(vstChunkReceiver_class);
|
vstChunkReceiver = (t_vstChunkReceiver *)pd_new(vstChunkReceiver_class);
|
||||||
pd_bind(&vstChunkReceiver->x_obj.ob_pd, gensym("svstdata"));
|
pd_bind(&vstChunkReceiver->x_obj.ob_pd, gensym("svstdata"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void send_dacs(void)
|
void send_dacs(void)
|
||||||
{
|
{
|
||||||
int i, j, sampleCount, nChannels, blockSize;
|
int i, j, sampleCount, nChannels, blockSize;
|
||||||
@ -384,7 +426,7 @@ int scheduler()
|
|||||||
0,
|
0,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
class_addsymbol(vstChunkReceiver_class,(t_method)sendPdVstChunk);
|
class_addanything(vstChunkReceiver_class,(t_method)sendPdVstChunk);
|
||||||
makevstChunkReceiver();
|
makevstChunkReceiver();
|
||||||
|
|
||||||
|
|
||||||
@ -448,7 +490,7 @@ int scheduler()
|
|||||||
pdvstData->plugName.updated=0;
|
pdvstData->plugName.updated=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// lucarda get data chunk from file
|
// check for data chunk from file
|
||||||
if (pdvstData->datachunk.direction == PD_RECEIVE && \
|
if (pdvstData->datachunk.direction == PD_RECEIVE && \
|
||||||
pdvstData->datachunk.updated)
|
pdvstData->datachunk.updated)
|
||||||
{
|
{
|
||||||
@ -456,6 +498,29 @@ int scheduler()
|
|||||||
pdvstData->datachunk.updated=0;
|
pdvstData->datachunk.updated=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check for vst program name changed
|
||||||
|
if (pdvstData->prognumber2pd.direction == PD_RECEIVE && \
|
||||||
|
pdvstData->prognumber2pd.updated)
|
||||||
|
{
|
||||||
|
t_symbol *tempSym;
|
||||||
|
tempSym = gensym("rvstprognumber");
|
||||||
|
if (tempSym->s_thing)
|
||||||
|
pd_float(tempSym->s_thing, (t_float)pdvstData->prognumber2pd.value.floatData);
|
||||||
|
pdvstData->prognumber2pd.updated=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check for vst program number changed
|
||||||
|
if (pdvstData->progname2pd.direction == PD_RECEIVE && \
|
||||||
|
pdvstData->progname2pd.updated)
|
||||||
|
{
|
||||||
|
t_symbol *tempSym;
|
||||||
|
tempSym = gensym("rvstprogname");
|
||||||
|
if (tempSym->s_thing)
|
||||||
|
pd_symbol(tempSym->s_thing, \
|
||||||
|
gensym(pdvstData->progname2pd.value.stringData));
|
||||||
|
pdvstData->progname2pd.updated=0;
|
||||||
|
}
|
||||||
|
|
||||||
if (pdvstData->hostTimeInfo.updated)
|
if (pdvstData->hostTimeInfo.updated)
|
||||||
{
|
{
|
||||||
pdvstData->hostTimeInfo.updated=0;
|
pdvstData->hostTimeInfo.updated=0;
|
||||||
|
@ -56,6 +56,7 @@ extern char globalHostPdvstPath[MAXFILENAMELEN];
|
|||||||
extern bool globalCustomGui;
|
extern bool globalCustomGui;
|
||||||
extern int globalCustomGuiWidth;
|
extern int globalCustomGuiWidth;
|
||||||
extern int globalCustomGuiHeight;
|
extern int globalCustomGuiHeight;
|
||||||
|
extern bool globalProgramsAreChunks;
|
||||||
|
|
||||||
extern bool globalIsASynth;
|
extern bool globalIsASynth;
|
||||||
extern pdvstProgram globalProgram[MAXPROGRAMS];
|
extern pdvstProgram globalProgram[MAXPROGRAMS];
|
||||||
@ -226,7 +227,7 @@ pdvst::pdvst(audioMasterCallback audioMaster)
|
|||||||
// {JYG see pdvst::setProgram below for explanation
|
// {JYG see pdvst::setProgram below for explanation
|
||||||
timeFromStartup=GetTickCount();
|
timeFromStartup=GetTickCount();
|
||||||
// JYG }
|
// JYG }
|
||||||
programsAreChunks(true);
|
programsAreChunks(globalProgramsAreChunks);
|
||||||
sendPlugName(globalPluginName);
|
sendPlugName(globalPluginName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -492,6 +493,25 @@ void pdvst::resume()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pdvst::sendProgChange(VstInt32 prgm)
|
||||||
|
{
|
||||||
|
|
||||||
|
WaitForSingleObject(pdvstTransferMutex, 10);
|
||||||
|
{
|
||||||
|
pdvstData->prognumber2pd.direction = PD_RECEIVE;
|
||||||
|
pdvstData->prognumber2pd.type = FLOAT_TYPE;
|
||||||
|
pdvstData->prognumber2pd.value.floatData = (float)prgm;
|
||||||
|
pdvstData->prognumber2pd.updated = 1;
|
||||||
|
|
||||||
|
pdvstData->progname2pd.direction = PD_RECEIVE;
|
||||||
|
pdvstData->progname2pd.type = STRING_TYPE;
|
||||||
|
strcpy(pdvstData->progname2pd.value.stringData, program[prgm].name);
|
||||||
|
pdvstData->progname2pd.updated = 1;
|
||||||
|
|
||||||
|
ReleaseMutex(pdvstTransferMutex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void pdvst::setProgram(VstInt32 prgmNum)
|
void pdvst::setProgram(VstInt32 prgmNum)
|
||||||
{
|
{
|
||||||
debugLog("appel de setProgram %d", prgmNum);
|
debugLog("appel de setProgram %d", prgmNum);
|
||||||
@ -499,6 +519,7 @@ void pdvst::setProgram(VstInt32 prgmNum)
|
|||||||
if (prgmNum >= 0 && prgmNum < nPrograms)
|
if (prgmNum >= 0 && prgmNum < nPrograms)
|
||||||
{
|
{
|
||||||
curProgram = prgmNum;
|
curProgram = prgmNum;
|
||||||
|
sendProgChange(prgmNum);
|
||||||
|
|
||||||
|
|
||||||
// {JYG to prevent host call of setProgram to override current param settings
|
// {JYG to prevent host call of setProgram to override current param settings
|
||||||
@ -604,25 +625,55 @@ bool pdvst::getOutputProperties(VstInt32 index, VstPinProperties* properties)
|
|||||||
|
|
||||||
VstInt32 pdvst::getChunk (void** data, bool isPreset)
|
VstInt32 pdvst::getChunk (void** data, bool isPreset)
|
||||||
{
|
{
|
||||||
MessageBox(0,"getchunk","debug",MB_OK);
|
|
||||||
strcpy ((char *)*data, pdvstData->datachunk.value.stringData);
|
Chunk = new pdvstProgramAreChunks;
|
||||||
return strlen(pdvstData->datachunk.value.stringData);
|
//MessageBoxA(NULL, "getchunk call", "debug", MB_OK); // all host gets here
|
||||||
|
for (int i = 0; i < nParameters; i++)
|
||||||
|
{
|
||||||
|
Chunk->vstParam[i] = vstParam[i];
|
||||||
|
}
|
||||||
|
//MessageBoxA(NULL, "getchunk if data", "debug", MB_OK); // not all hosts gets here
|
||||||
|
WaitForSingleObject(pdvstTransferMutex, 10);
|
||||||
|
{
|
||||||
|
memset(&Chunk->Data, '\0', MAXSTRLEN);
|
||||||
|
strcpy (Chunk->Data, pdvstData->datachunk.value.stringData);
|
||||||
|
ReleaseMutex(pdvstTransferMutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
debugLog("luc:debug-size-of-chunk %d", sizeof(*Chunk));
|
||||||
|
*data = (void*)Chunk;
|
||||||
|
return sizeof(*Chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
VstInt32 pdvst::setChunk (void* data, VstInt32 byteSize, bool isPreset)
|
VstInt32 pdvst::setChunk (void* data, VstInt32 byteSize, bool isPreset)
|
||||||
{
|
{
|
||||||
|
//MessageBoxA(NULL, "setchunk call", "debug", MB_OK);
|
||||||
WaitForSingleObject(pdvstTransferMutex, 10);
|
if(byteSize)
|
||||||
{
|
{
|
||||||
pdvstData->datachunk.direction = PD_RECEIVE;
|
Chunk = (pdvstProgramAreChunks*)data;
|
||||||
pdvstData->datachunk.type = STRING_TYPE;
|
//MessageBoxA(NULL, "setchunk call if bytesize", "debug", MB_OK);
|
||||||
strcpy(pdvstData->datachunk.value.stringData,(char *)data);
|
WaitForSingleObject(pdvstTransferMutex, 10);
|
||||||
pdvstData->datachunk.updated = 1;
|
{
|
||||||
ReleaseMutex(pdvstTransferMutex);
|
pdvstData->datachunk.direction = PD_RECEIVE;
|
||||||
|
pdvstData->datachunk.type = STRING_TYPE;
|
||||||
|
memset(&pdvstData->datachunk.value.stringData, '\0', MAXSTRLEN);
|
||||||
|
strcpy(pdvstData->datachunk.value.stringData, Chunk->Data);
|
||||||
|
pdvstData->datachunk.updated = 1;
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = 0; i < nParameters; i++)
|
||||||
|
{
|
||||||
|
pdvstData->vstParameters[i].type = FLOAT_TYPE;
|
||||||
|
pdvstData->vstParameters[i].value.floatData = Chunk->vstParam[i];
|
||||||
|
pdvstData->vstParameters[i].direction = PD_RECEIVE;
|
||||||
|
pdvstData->vstParameters[i].updated = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReleaseMutex(pdvstTransferMutex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
MessageBox(0,"setchunk","debug",MB_OK);
|
|
||||||
debugLog("setchunk: %s", data);
|
return 0;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VstInt32 pdvst::canDo(char* text)
|
VstInt32 pdvst::canDo(char* text)
|
||||||
@ -1120,7 +1171,7 @@ void pdvst::updatePdvstParameters()
|
|||||||
if (pdvstData->datachunk.direction == PD_SEND && \
|
if (pdvstData->datachunk.direction == PD_SEND && \
|
||||||
pdvstData->datachunk.updated)
|
pdvstData->datachunk.updated)
|
||||||
{
|
{
|
||||||
if (pdvstData->datachunk.type = STRING_TYPE)
|
if (pdvstData->datachunk.type == STRING_TYPE)
|
||||||
{
|
{
|
||||||
pdvstData->datachunk.updated=0;
|
pdvstData->datachunk.updated=0;
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,13 @@ typedef struct _pdvstProgram
|
|||||||
float paramValue[MAXPARAMETERS];
|
float paramValue[MAXPARAMETERS];
|
||||||
} pdvstProgram;
|
} pdvstProgram;
|
||||||
|
|
||||||
|
/* for programsarechunks*/
|
||||||
|
typedef struct _pdvstProgramAreChunks
|
||||||
|
{
|
||||||
|
float vstParam[MAXPARAMETERS];
|
||||||
|
char Data[MAXSTRLEN];
|
||||||
|
} pdvstProgramAreChunks;
|
||||||
|
|
||||||
class pdVstBuffer
|
class pdVstBuffer
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -99,15 +106,16 @@ public:
|
|||||||
// virtual VstInt32 canMono ();
|
// virtual VstInt32 canMono ();
|
||||||
virtual void suspend();
|
virtual void suspend();
|
||||||
virtual void resume();
|
virtual void resume();
|
||||||
void sendGuiAction(int action);
|
void sendGuiAction(int action);
|
||||||
void sendPlugName(char * name ); // JYG : to send plug name to puredatapatch
|
void sendPlugName(char * name ); // JYG : to send plug name to puredatapatch
|
||||||
|
void sendProgChange(VstInt32 prgm); // send vst prog name and number to patch
|
||||||
|
|
||||||
LPTSTR displayString;//= new TCHAR[MAXSTRINGSIZE];
|
LPTSTR displayString;//= new TCHAR[MAXSTRINGSIZE];
|
||||||
|
|
||||||
HWND pdGui;
|
HWND pdGui;
|
||||||
|
|
||||||
virtual VstInt32 getChunk (void** data, bool isPreset = false);
|
virtual VstInt32 getChunk (void** data, bool isPreset);
|
||||||
virtual VstInt32 setChunk (void* data, VstInt32 byteSize, bool isPreset = false);
|
virtual VstInt32 setChunk (void* data, VstInt32 byteSize, bool isPreset);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static int referenceCount;
|
static int referenceCount;
|
||||||
@ -127,6 +135,7 @@ protected:
|
|||||||
char **vstParamName;
|
char **vstParamName;
|
||||||
int nParameters;
|
int nParameters;
|
||||||
pdvstProgram *program;
|
pdvstProgram *program;
|
||||||
|
pdvstProgramAreChunks *Chunk;
|
||||||
int nPrograms;
|
int nPrograms;
|
||||||
int nChannels;
|
int nChannels;
|
||||||
int nExternalLibs;
|
int nExternalLibs;
|
||||||
@ -173,7 +182,6 @@ protected:
|
|||||||
|
|
||||||
|
|
||||||
// JYG }
|
// JYG }
|
||||||
//void programsAreChunks (bool) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -44,6 +44,7 @@ bool globalCustomGui = false;
|
|||||||
int globalCustomGuiWidth= 320;
|
int globalCustomGuiWidth= 320;
|
||||||
int globalCustomGuiHeight= 150;
|
int globalCustomGuiHeight= 150;
|
||||||
pdvstProgram globalProgram[MAXPROGRAMS];
|
pdvstProgram globalProgram[MAXPROGRAMS];
|
||||||
|
bool globalProgramsAreChunks = false;
|
||||||
|
|
||||||
char *trimWhitespace(char *str);
|
char *trimWhitespace(char *str);
|
||||||
void parseSetupFile();
|
void parseSetupFile();
|
||||||
@ -376,6 +377,18 @@ void parseSetupFile()
|
|||||||
globalProgram[progNum].paramValue[paramNum] = \
|
globalProgram[progNum].paramValue[paramNum] = \
|
||||||
(float)atof(value);
|
(float)atof(value);
|
||||||
}
|
}
|
||||||
|
// programsarechunks (save custom data in .fxp or .fxb file)
|
||||||
|
if (strcmp(param, "programsarechunks") == 0)
|
||||||
|
{
|
||||||
|
if (strcmp(strlwr(value), "true") == 0)
|
||||||
|
{
|
||||||
|
globalProgramsAreChunks = true;
|
||||||
|
}
|
||||||
|
else if (strcmp(strlwr(value), "false") == 0)
|
||||||
|
{
|
||||||
|
globalProgramsAreChunks = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -121,7 +121,9 @@ typedef struct _pdvstTransferData
|
|||||||
pdvstMidiMessage midiQueue[MAXMIDIQUEUESIZE];
|
pdvstMidiMessage midiQueue[MAXMIDIQUEUESIZE];
|
||||||
pdvstParameter guiState;
|
pdvstParameter guiState;
|
||||||
pdvstParameter plugName; // transmitted by host
|
pdvstParameter plugName; // transmitted by host
|
||||||
pdvstParameter datachunk; // get/set chunk from .fxp file
|
pdvstParameter datachunk; // get/set chunk from .fxp .fxb files
|
||||||
|
pdvstParameter progname2pd; // send program name to Pd
|
||||||
|
pdvstParameter prognumber2pd; // send program name to Pd
|
||||||
pdvstParameter guiName; // transmitted by pd : name of gui window to be embedded
|
pdvstParameter guiName; // transmitted by pd : name of gui window to be embedded
|
||||||
// #ifdef VSTMIDIOUTENABLE
|
// #ifdef VSTMIDIOUTENABLE
|
||||||
int midiOutQueueSize;
|
int midiOutQueueSize;
|
||||||
|
Loading…
Reference in New Issue
Block a user