Tree [241082] /
History



File Date Author Commit
doc 2005-01-25 Chris Cannam Chris Cannam [241082]
dssi 2005-01-23 Chris Cannam Chris Cannam [4e5ce5]
examples 2004-11-05 Chris Cannam Chris Cannam [c3462b]
jack-dssi-host 2005-01-23 Chris Cannam Chris Cannam [fd1a1d]
message_buffer 2004-10-01 Chris Cannam Chris Cannam [092325]
scripts 2004-10-28 Chris Cannam Chris Cannam [c91f7e]
tests 2004-03-15 Chris Cannam Chris Cannam [2b018c]
COPYING 2004-10-01 Chris Cannam Chris Cannam [092325]
Makefile 2004-11-02 Sean Bolton Sean Bolton [775e88] dssi.pc version and prefix fix
README 2004-11-01 Sean Bolton Sean Bolton [201e6a] * jack-dssi-host: remove program change forced ...
dssi.pc 2004-11-02 Sean Bolton Sean Bolton [775e88] dssi.pc version and prefix fix

Read Me

DSSI
----

This is the Disposable Soft Synth Interface specification & example
code repository.

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)

  jack-dssi-host/jack-dssi-host.c -- a simple JACK/ALSA-sequencer plugin host

  examples/dssi_osc_send.c
  examples/dssi_osc_update.c -- simple DSSI OSC test programs

  examples/trivial_synth.c -- a quite useless but fairly clear
  illustrative synth plugin

  examples/less_trivial_synth.c -- a synth that actually does some
  basic synthesis

  examples/less_trivial_synth_qt_gui.cpp -- a very simple Qt GUI
  for the above

  examples/trivial_sampler.c -- a simple one-sample polyphonic
  mono sampler (that doesn't do proper pitch scaling)

  examples/trivial_sampler_qt_gui.cpp -- a very simple Qt GUI for
  the above

  fluidsynth-dssi/ -- an example DSSI implementation of FluidSynth,
  with a GTK+ GUI


Requirements
------------

To build the example code you will need:

  ALSA 0.9/1.0.x
  JACK
  LADSPA
  liblo-0.12 or above: http://www.plugin.org.uk/liblo/
  libsndfile: http://www.mega-nerd.com/libsndfile/
  libsamplerate: http://www.mega-nerd.com/SRC/
  pkgconfig with PKG_CONFIG_PATH set appropriately to pick up liblo

To build the less_trivial_synth and trivial_sampler Qt GUIs, you
will need:

  Qt 3

To build the fluidsynth-dssi plugin and GUI, you will need:

  FluidSynth 1.0.3 or newer (libraries, headers, and source code)
  GTK+ 1.2.x

Build
-----

Run "make" from the top-level directory.  There is no configure script.

You will need to ensure PKG_CONFIG_PATH is set correctly to locate the
liblo.pc pkgconfig file.  You may also need to set the QTDIR and/or
QTINCDIR variables, and FLUID for the location of the Fluidsynth
sources if you want to build fluidsynth-dssi.  (FLUID should not be a
relative path, and you _must_ build against the same version of
fluidsynth as you have the library for installed.)

For example, to build on Debian with my local fluidsynth source
installation I use

  FLUID=`pwd`/../fluidsynth-1.0.4-2 QTDIR=/usr QTINCDIR=/usr/include/qt3 make

After compiling, optionally test the host and example plugins (see
below) and then run "make install" from the top-level directory to
install the dssi header, dssi.pc pkgconfig file, and the host and
examples.  The default install prefix is /usr/local.

Test
----

The quickest test (provided you've carried out the "make install"
step) is just to run "trivial_sampler" or "fluidsynth-dssi", which
should have been installed in your $PREFIX/bin.  Provided JACK is
running, these should simply start up a standalone sampler/synth with
a GUI window.  If these both work, pretty much everything else should.

Here's a more descriptive test:

Make sure JACK is running.  cd to ./examples and run:

  $ export DSSI_PATH=`pwd`
  $ ../jack-dssi-host/jack-dssi-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 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 this
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
  $ jack-dssi-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.


Licensing
---------

The DSSI API itself (dssi.h) is licensed under the GNU Lesser General
Public License.  See COPYING for details.

The jack-dssi-host is provided under a BSD-style license.  This means
you can do anything you want with it so long as you retain the
copyright attribution and license information.  See the source files
for details.

FluidSynth-DSSI is provided under the GNU General Public License.  See
fluidsynth-dssi/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.