ghostess and dssi


Another tutorial, this time on how to use ghostess with DSSI plugins and how to integrate all this into small session scripts.

The Disposable SoftSynth Interface (DSSI) is one of the plugin standards in Linux.

DSSI plugins can be hosted in sequencer applications like MusE, Qtractor or Rosegarden. Due to my bias towards modular systems and since I am using Seq24 for sequencing, my choice was ghostess,

Ghostess is a simple stand-alone DSSI host. It creates one Midi input port and audio I/O ports as specified by the plugins loaded. Those can then be connected to other applications using e.g. qjackctl. Though the code, according to its README file, claims to be ‘sloppy, hurried HACKWARE’ it runs just stable.

I highly recommend to obey to the README file’s name, you might even stop here and go right away to the original source. What follows is more a verbose description of some aspects regarding usage and workflow rather than the reference manual.

ghostess GUI

ghostess GUI

The user interface (UI) lives somewhat in between the worlds of command line interfaces (CLIs) and graphical user interfaces (GUIs).
To start ghostess the first time, a command line needs be assembled, defining the plugins to load and optionally some more properties.
While running, the UI is graphical; loading native plugin GUIs where present or creating generic ones otherwise. Just dynamic loading and removal of plugins is impossible.

A bit surprising at first: The File menu has only an option to ‘Save Configuration…’, no way to load anything. Loading is simply done by executing the saved configuration file.


Many Linux distributions provide a package for ghostess. If this is the case, the best and most simple way of installation is using the distribution’s package management tool.

Ghostess can be built for either Jack-Midi or Alsa-Midi support, so If the packagers choice differs from your preference it becomes necessary to manually compile the source code.

Download it from

unpack it,

$ tar xvjf ghostess-20100923.tar.bz2

then change to the newly created directory.

$ cd ghostess-20100923

Configure it, omit --with-jackmidi to build for Alsa-Midi,

$ ./configure --with-jackmidi

and build.

$ make

As root, (optionally) install it

$ make install

running ghostess

Start ghostess with fluidsynth-dssi and nekobee simply by this:

$ ghostess

The plugins reside in /usr/lib/dssi or /usr/local/lib/dssi. List all .so (shared object) files in these directories to find the plugin names.

$ ls /usr/lib/dssi/*.so /usr/local/lib/dssi*.so

the lsdssi script

To avoid hand editing too much I wrote a little ‘lsdssi’ script to list all plugins from /usr/lib/dssi in one line, seperated by whitespace.

echo `ls /usr/lib/dssi/*.so | \
sed 's/\/usr\/lib\/dssi\///' | \
tr "\n" " "`

ghostess could then be started with one instance of each installed plugin by typing

$ ghostess `./lsdssi`

However, this will usually not make much sence, except maybe for testing purposes.
In practise, you will more likely type ./lsdssi and copy paste from the output.

more options

An example, for loading more than one instance of each plugin:

$ ghostess \ \ \ \ \

which is just the same as this somewhat more elegant version:

$ ghostess \
-3 \

If not specified, ghostess assigns Midi channels counting from zero, following the order the plugins are given on the command line. Accordingly, in the case of the above command, the three instances of fluidsynth-dssi listen on channels zero to two, the sineshapers listen on channel three and four.
Custom Midi channels, deviating from this rule, are specified via the -chan option:

$ ghostess \
-3 -chan 4 \
-2 -chan 10

Look at the output of the command to see how the assignment is done.

configuration files

Since the configuration files ghostess saves are human readable Bourne shell scripts, saved plugin configurations can be recombined by hand editing.

The first lines of a saved ghostess configuration file starting with nekobee, fluidsynth-dssi and sineshaper:

export DSSI_PATH
exec ghostess \
-comment 'nekobee/nekobee/inst00' \
-chan 1 \
-prog 0 0 \
-port 1 1.0001 \
-port 2 1 \
-port 3 26.9828 \
-port 4 0.475025 \
-port 5 0 \
-port 6 0.0005 \
-port 7 0.829218 \
-port 8 1.01 \
'':'nekobee' \
-comment 'fluidsynth-dssi/FluidSynth-DSSI/inst01' \
-chan 2 \
-conf 'load' '/home/epikur/audio/soundfonts/hs_techno_drums.sf2' \
-prog 0 0 \
'':'FluidSynth-DSSI' \
-comment 'sineshaper/ll-sineshaper/inst02' \
-chan 3 \
-conf 'reloadprograms' '' \
-prog 1 2 \

The sections belonging to each plugin begin with the -comment line, so splitting or combining them is reasonably easy. Make sure you adapt the number following inst and the -chan values.

ghostess in session scripts

Finally, an example of how ghostess can be invoked from within a shell script; extending the last example from this tutorial.

seq24 --manual_alsa_ports \
--priority \
--jack_transport \
--file seq24/seq24.mid &
sleep 2
yoshimi -l yoshimi/yoshimi01.xmz &
sleep 2
## the ghostess startup command initially used:
#ghostess \
# -chan 8 \
# -2 \
# &
## now invoke the configuration script
./ghostess/ghostess.conf &
sleep 3
ardour ardour/ardoursession/ardoursession.ardour &
sleep 4
jack_snapshot restore jsnap/snapshotfile --noclear

Thanks to Sean Bolton for this smart little application.


3 Responses to “ghostess and dssi”

  1. Dan Capp Says:

    “ghostess creates one Jack-Midi or Alsa-Midi input port (which to be used is choosen at build time)”

    Thanks for this – the only info I can find anywhere about using Ghostess. But with regards to the above quote, it’d much appreciated if you could explain to us beginners how exactly you can choose between Jack and Alsa when using Ghostess.

    • mr. me Says:

      Thanks for pointing this out, I’ve added a new “installation” section that should explain things.

  2. Dan Capp Says:

    Excellent. I’ll give it a shot – ghostess might just be what I need to use soundfonts with Ardour3! Thanks!

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: