156 lines
7.1 KiB
Markdown
156 lines
7.1 KiB
Markdown
# Pdvst-0.52
|
|
|
|
|
|
Based on https://github.com/jyg/pure-data/tree/master/pdvst but updated to load with Pd-0.52
|
|
or higher.
|
|
|
|
|
|
# How does it work ?
|
|
|
|
PdVst consists of two main parts :
|
|
* a vst-plugin (pdvst-template32.dll, pdvst-template64.dll) to place in your favorite vst 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
|
|
information about the plugin, such as the Pd patch file to use, the number of parameters, etc...
|
|
An instance of Pd.exe is started and opens the Pd patch file whose name was found in the setup file.
|
|
|
|
# Installation
|
|
|
|
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).
|
|
|
|
1) According to your pd version (32 or 64 bits), go to the folder pd-scheduler32 or pd-scheduler64.
|
|
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
|
|
for the application (e.g. `c:/Program Files (x86)/Steinberg/Cubase VST/VstPlugins/`)
|
|
|
|
3) New way : in the vst plugin directory, create a subdir with the name of your plugin
|
|
(e.g. `c:/Program Files (x86)/Steinberg/Cubase VST/VstPlugins/Pd_Gain/`).
|
|
This folder will contain the `.pdv` and `.pd` files associated to your plugin.
|
|
|
|
NOTE (advanced) : if you choose the new way, you can also include an standalone version of
|
|
puredata in the vst directory, simply paste it in the subfolder `.pd/`
|
|
(e.g. `c:/Program Files (x86)/Steinberg/Cubase VST/VstPlugins/.pd/`)
|
|
|
|
3bis) Old way : create a pdvst folder in the directory that contains the
|
|
application (e.g. `Reaper.exe`) that you want to use PdVst with.
|
|
(e.g. `c:/Program Files/REAPER/pdvst/`). This folder will contain the `.pdv` and `.pd` files, and
|
|
optionnally a copy of pure-data application (inside `c:/Program Files/REAPER/pdvst/pd/`).
|
|
|
|
|
|
|
|
# Creating VST Plugins from Pd Patches
|
|
|
|
* Create a new `.pdv` setup file (see the `.pdv` Setup File section). The file
|
|
must be named the same as the plugin (e.g. for a plugin named Pd_Gain you
|
|
would create a file named `Pd_Gain.pdv`). Place this file and all dependant
|
|
files (`.pd` files, external Pd library `.dll` files, etc.) as specified above (section
|
|
"Installation").
|
|
|
|
* Make a copy of the `pdvst-template32.dll` / `pdvst-template64.dll` file and
|
|
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`).
|
|
Move your new plugin `.dll` file to the vst plugins folder of the application.
|
|
|
|
# The .pdv Setup File-
|
|
|
|
This file contains all of the information about your plugin. The format is ASCII
|
|
text with keys and values separated by an '=' character and each key and value
|
|
pair separated by a carriage return. Comments are demarked with a '#' character.
|
|
For an example, see Pd_Gain.pdv.
|
|
|
|
-Keys-
|
|
|
|
CHANNELS = <integer>
|
|
Number of audio input and output channels. Tested with 2 and 4.
|
|
Should work with larger values.
|
|
|
|
PDPATH = <string>
|
|
Path to the installation directory of pure-data program.
|
|
(example : PDPATH = C:/Program Files (x86)/pd-0.47-1/ )
|
|
If this line is not specified, for compatibility with older version, the program will first
|
|
look for pd.exe in <host_exec_dir>/pdvst/pd/bin.
|
|
If there is not an existing pd installation in <host_exec_dir>/pdvst/, the program will then
|
|
look for pd.exe in <VST_FOLDER>/.pd/
|
|
|
|
MAIN = <string>
|
|
The .pd file for Pd to open when the plugin is opened.
|
|
|
|
ID = <string[4]>
|
|
The 4-character unique ID for the VST plugin. This is required by VST and
|
|
just needs to be a unique string of four characters.
|
|
|
|
SYNTH = <TRUE/FALSE>
|
|
Boolean value stating whether this plugin is an instrument (VSTi) or an effect.
|
|
Both types of plugins can send/receive midi events.
|
|
|
|
CUSTOMGUI = <TRUE/FALSE>
|
|
Boolean value stating whether the Pd patch uses a custom GUI (e.g. GrIPD).
|
|
|
|
DEBUG = <TRUE/FALSE>
|
|
Boolean value stating whether to display the Pd GUI when the plugin is opened.
|
|
|
|
PARAMETERS = <integer>
|
|
Number of parameters the plugin uses (up to 128).
|
|
|
|
NAMEPARAMETER<integer> = <string>
|
|
Display name for parameters. Used when CUSTOMGUI is false or the VST host doesn't
|
|
support custom editors.
|
|
|
|
PROGRAM = <string>
|
|
Declares a new VST program and sets the name (up to 128 programs can be declared)
|
|
|
|
PARAMETER<integer> = <float>
|
|
Defines the parameter values for the last declared program. <float> must be
|
|
between 0 and 1 inclusive.
|
|
|
|
# Pd/VST audio/midi Communication
|
|
|
|
When the plugin is opened, the .pd patch file declared in the .pdv setup file's MAIN key
|
|
will be opened.
|
|
|
|
The Pd patch will receive its incoming audio stream from the adc~ object,
|
|
and incoming MIDI data from the Pd objects notein, ctlin, and pgmin.
|
|
|
|
Pd patches should output their audio stream to the dac~ object,
|
|
and their midi stream to the noteout, ctlout, pgmout objects.
|
|
|
|
REMARKS :
|
|
* The midi out feature is still experimental and not fully tested. It should work when host uses ASIO driver, more erratic with mmio. Midi out note on/off have been tested, other midi messages untested but should work.
|
|
* Inside puredata plugin, don't use "media/ASIO" or "media/standard" audio menu, you may crash pd & host.
|
|
* You can continue to use "media/midi settings" menu to select input and output midi devices independently from host.
|
|
|
|
# Pd/VST - further communications
|
|
|
|
For purposes such as GUI interaction and VST automation, your patch may need to communicate
|
|
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.
|
|
|
|
* 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.
|
|
* 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.
|
|
* 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.
|
|
|
|
* 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).
|
|
|
|
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.
|
|
|
|
#CURRENT FEATURES
|
|
|
|
* Windows x32 and x64 only
|
|
* Support for embedding external gui window into host
|
|
* multichannel audio in/out support
|
|
* integrated vst midi-in, experimental midi-out
|
|
* added play head information support (see examples)
|
|
|
|
#TODO
|
|
|
|
* optimize plugin loading
|
|
* use of chunks for preset saving |