A software synthesizer plugin for the
Disposable Soft Synth Interface
The files in this directory are an example implementation of the
FluidSynth soundfont-playing software synthesizer as a DSSI plugin.
It makes use of DSSI's run_multiple_synths() interface to allow
sharing of resources between multiple plugin instances -- soundfont
data is shared between instances, and FluidSynth's usual voice
allocation methods are applied across multiple instances as if each
were a FluidSynth channel.
FluidSynth-DSSI uses the FluidSynth library for all soundfont
handling and synthesis functions. However, because of the
architecture differences between DSSI and FluidSynth, this could not
be done using only the canonical API functions. As a result, the
FluidSynth source code is needed during FluidSynth-DSSI's
compilation to provide access to the non-API library functions.
FluidSynth-DSSI is written by Sean Bolton, and is copyright (c)2004
under the GNU General Public License, version 2 or later. See the
enclosed file COPYING for details.
FluidSynth itself is copyright (c)2003 Peter Hanappe and others,
also under the GNU General Public License.
You need to have the following installed:
- liblo 0.5 or later
- fluidsynth 1.0.3 or later (specifically, the fluidsynth headers
- a DSSI-capable host, such as Rosegarden or the jack-dssi-host
included with this package.
You must also have the fluidsynth source code unpacked somewhere
accessible (make sure it is the same version as what you have
Edit the Makefile, then do 'make' and 'make install'. The following
files are installed:
Start your DSSI host and create an instance of the FluidSynth-DSSI
plugin. See the 'Example' section below for how to do this with the
Initially, no soundfont will be loaded. Use the 'Select Soundfont'
button to select a soundfont. Each instance may use only one
soundfont at a time, but when multiple instances use the same
soundfont, it is only loaded once.
The available soundfont presets will be displayed in the 'Preset'
window. Clicking on one will select that preset.
Test notes may be generated using the 'Send Test Note' button. You
may select the pitch and velocity of the note using the 'Test Note'
When you create more than one instance of the plugin, you should be
able to tell their GUIs apart by unique window titles of each
(provided your host correctly supplies each with the proper
It is possible to set the FluidSynth 'synth.gain' parameter using an
OSC message to the plugin:
dssi_osc_send -C <osc-url> gain 0.5
Note that synth.gain is a global parameter, so you'd best send the
same gain to every instance if you want predictable results.
1. Start JACK.
2. Run the dssi_example_host, starting 16 FluidSynth-DSSI instances,
one for each MIDI channel:
$ DSSI_PATH=/home/smbolton/src/fluidsynth-dssi-0.1.0 sudo jack-dssi-host -16 fluidsynth-dssi.so
3. Load a soundfont for each instance. You may do this using the
GUI, or via the command line:
$ for ee in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
> do dssi_osc_send -C osc.udp://localhost:19383/dssi/fluidsynth-dssi/FluidSynth-DSSI/chan$ee \
> load /t/soundfonts/Reality_GMGS.sf2
4. Make some noise:
$ pmidi -p128:0 /t/smf/simpsons_theme.mid