1
2DSSI
3----
4
5This is the DSSI Soft Synth Interface specification & example
6code repository.
7
8You'll find here:
9
10  doc/RFC.txt -- proposed DSSI specification -- read this first
11
12  dssi/dssi.h -- DSSI header file -- the comments define those parts
13  of the spec dealing with host/plugin interaction (not covered in RFC)
14
15  jack-dssi-host/jack-dssi-host.c -- a simple JACK/ALSA-sequencer plugin host
16
17  examples/dssi_osc_send.c
18  examples/dssi_osc_update.c -- simple DSSI OSC test programs
19
20  examples/dssi_list_plugins.c -- a program to list available plugins
21  examples/dssi_analyse_plugin.c -- a program to describe a plugin
22
23  examples/trivial_synth.c -- a quite useless but fairly clear
24  illustrative synth plugin
25
26  examples/less_trivial_synth.c -- a synth that actually does some
27  basic synthesis
28
29  examples/less_trivial_synth_qt_gui.cpp -- a very simple Qt GUI
30  for the above
31
32  examples/karplong.cpp -- a simple Karplus+Strong plucked string synth
33
34  examples/trivial_sampler.c -- a simple one-sample polyphonic
35  mono sampler (that doesn't do proper pitch scaling)
36
37  examples/trivial_sampler_qt_gui.cpp -- a very simple Qt GUI for
38  the above
39
40
41Requirements
42------------
43
44In order to install the development files (dssi.h and dssi.pc)
45needed to compile DSSI applications, you only need the following:
46
47  pkgconfig with PKG_CONFIG_PATH set appropriately
48  ALSA 0.9/1.0.x (or libdssialsacompat: see
49      http://smbolton.com/linux.html)
50  LADSPA SDK 1.x
51
52To build the included host and plugins, you will also need:
53
54  JACK
55  liblo-0.12 or above: http://liblo.sourceforge.net/
56  libsndfile: http://www.mega-nerd.com/libsndfile/
57  libsamplerate: http://www.mega-nerd.com/SRC/
58
59To build the less_trivial_synth and trivial_sampler Qt GUIs, you
60will need:
61
62  Qt 4
63
64Note that because DSSI itself is just an API, it is possible to use
65DSSI applications (say, Rosegarden with Xsynth-DSSI) without any of
66the hosts or plugins contained in this DSSI distribution.
67Furthermore, to compile DSSI applications, only the DSSI development
68files (dssi.h and dssi.pc) are needed. OS distribution maintainers
69are urged to keep these dependencies in mind when packaging DSSI,
70and not make their `dssi-devel' package dependent on JACK or Qt, for
71example.
72
73Build
74-----
75
76DSSI can be installed using the usual autoconf/automake `./configure
77&& make && make install' procedure.  See the included file INSTALL
78for generic installation instructions.
79
80You will need to ensure PKG_CONFIG_PATH is set correctly to locate
81the pkgconfig files for ALSA or libdssialsacompat, liblo, JACK,
82sndfile, samplerate, and Qt 4. If you do not have any of these, any
83DSSI programs or plugins dependent on them will not be built.
84
85For example, to build on Debian I use:
86
87  $ PKG_CONFIG_PATH=/usr/lib/pkgconfig
88  $ export PKG_CONFIG_PATH
89  $ ./configure
90  $ make && make check
91
92After compiling, optionally test the host and example plugins (see
93below) and then run `make install' from the top-level directory to
94install the dssi header, dssi.pc pkgconfig file, and the host and
95examples.  The default install prefix is /usr/local.
96
97Test
98----
99
100The quickest test (provided your system has all the required
101software, you've done `make install', and JACK is running) is just
102to run `less_trivial_synth' or `trivial_sampler', which should have
103been installed in your $PREFIX/bin.  These should simply start up a
104standalone sampler/synth with a GUI window.  If these both work,
105pretty much everything else should.
106
107Here's a more descriptive test:
108
109Assuming you've built the host and plugins, installed them to
110/usr/local, and JACK is running, you may run:
111
112  $ export DSSI_PATH=/usr/local/lib/dssi
113  $ /usr/local/bin/jack-dssi-host less_trivial_synth.so
114
115A synth GUI should pop up, with an ALSA sequencer input and JACK
116output (connected by default to the first alsa_pcm out).  If you
117connect a MIDI keyboard (or vkeybd) to its ALSA MIDI input, you should
118be able to play it and use MIDI controllers to adjust its parameters:
119MIDI CC1 (the modulation wheel) controls timbre, and controllers 72,
12073, 75 and 79 control release, attack, decay and sustain respectively
121(some keyboards already have controls set up for these values).
122
123What has actually happened (if it worked) is that the host has
124been started, has loaded the first synth plugin (labelled LTS) found
125in the given .so file, has located the GUI executable that the make
126procedure installed into examples/less_trivial_synth/LTS_qt,
127instantiated the plugin, started the GUI and is now managing the MIDI
128input from ALSA, control changes from the GUI and audio out to JACK.
129
130You may also run multiple synth instances simultaneously with this
131host:
132
133  $ export DSSI_PATH=/usr/local/lib/dssi
134  $ export PATH=$PATH:/usr/local/bin     # if it's not there already
135  $ jack-dssi-host -2 less_trivial_synth.so -3 trivial_sampler.so
136
137This will create two less_trivial_synth instances and three
138trivial_sampler instances.  Note that the instances are assigned
139consecutive MIDI channels, and their outputs are spread across all
140of the available JACK physical outputs.
141
142
143Licensing
144---------
145
146The DSSI API itself (dssi.h) is licensed under the GNU Lesser General
147Public License.  See COPYING for details.
148
149The jack-dssi-host is provided under a BSD-style license.  This means
150you can do anything you want with it so long as you retain the
151copyright attribution and license information.  See the source files
152for details.
153
154Licensing for the files in the examples directory may vary: please
155check the individual files for details.  Most of them are in the
156public domain, which means you can use them for anything you want.
157
158