This is the Disposable Soft Synth Interface specification & example
You'll find here:
doc/RFC.txt -- proposed DSSI specification -- read this first
dssi/dssi.h -- DSSI header file -- the comments define those parts
of the spec dealing with host/plugin interaction (not covered in RFC)
examples/dssi_osc_update.c -- simple DSSI OSC test programs
examples/dssi_example_host.c -- a basic example host implementation
examples/trivial_synth.c -- a quite useless but fairly clear
illustrative synth plugin
examples/less_trivial_synth.c -- a synth that actually does some
examples/less_trivial_synth_qt_gui.cpp -- a very simple Qt GUI
for the above
fluidsynth-dssi/ -- an example DSSI implementation of FluidSynth,
with a GTK+ GUI
To build the example code you will need:
liblo-0.5 or above: http://www.plugin.org.uk/liblo/
pkgconfig with PKG_CONFIG_PATH set appropriately to pick up liblo
To build the less_trivial_synth Qt GUI, you will need:
Qt 3 with QTDIR set appropriately
To build the fluidsynth-dssi plugin and GUI, you will need:
FluidSynth 1.0.3 (libraries, headers, and source code)
So long as PKG_CONFIG_PATH and QTDIR are set appropriately, a "make"
and "make install" in the top level directory should install the
dssi.h header file and dssi.pc pkgconfig file, plus build and
install everything in the examples directory.
To build FluidSynth-DSSI, you must first edit the Makefile in the
fluidsynth-dssi directory. Then "make" and "make install" will
build and install it.
Make sure JACK is running, cd to ./examples and run:
$ export DSSI_PATH=`pwd`
$ ./dssi_example_host less_trivial_synth.so
A synth GUI should pop up, with an ALSA sequencer input and JACK
output (connected by default to the first alsa_pcm out). If you
connect a MIDI keyboard (or vkeybd) to its ALSA MIDI input, you should
be able to play it and use MIDI controllers to adjust its parameters:
MIDI CC1 (the modulation wheel) controls timbre, and controllers 72,
73, 75 and 79 control release, attack, decay and sustain respectively
(some keyboards already have controls set up for these values).
What has actually happened (if it worked) is that the host process has
been started, has loaded the first synth plugin (labelled LTS) found
in the given .so file, has located the GUI executable that the make
procedure installed into examples/less_trivial_synth/LTS_qt,
instantiated the plugin, started the GUI and is now managing the MIDI
input from ALSA, control changes from the GUI and audio out to JACK.
You may also run multiple synth instances simultaneously with the
example host. If you have built both the examples and
FluidSynth-DSSI, and installed them to /usr/local, you may run:
$ export DSSI_PATH=/usr/local/lib/dssi
$ export PATH=$PATH:/usr/local/bin # if it's not there already
$ dssi_example_host -2 less_trivial_synth.so -3 fluidsynth-dssi.so
This will create two less_trivial_synth instances and three
FluidSynth-DSSI instances. Note that the instances are assigned
consecutive MIDI channels, and their outputs are spread across all
of the available JACK physical outputs.
The DSSI API itself (dssi.h) is licensed under the GNU Lesser General
Public License. See COPYING for details.
Licensing for the files in the examples directory may vary: please
check the individual files for details. Most of them are in the
public domain, which means you can use them for anything you want.
FluidSynth-DSSI is licensed under the GNU General Public License.
See fluidsynth-dssi/COPYING for details.