1 FluidSynth-DSSI 2 =============== 3 A software synthesizer plugin for the 4 DSSI Soft Synth Interface 5 6Introduction 7============ 8FluidSynth-DSSI is an implementation of the FluidSynth soundfont- 9playing software synthesizer as a plugin for the DSSI Soft Synth 10Interface. DSSI is a plugin API for software instruments (soft 11synths) with user interfaces, permitting them to be hosted 12in-process by audio applications. More information on DSSI can be 13found at: 14 15 http://dssi.sourceforge.net/ 16 17FluidSynth-DSSI makes use of DSSI's run_multiple_synths() interface 18to allow sharing of resources (like enormous soundfonts) between 19multiple plugin instances -- soundfont data is shared between 20instances, and FluidSynth's usual voice allocation methods are 21applied across multiple instances as if each were a FluidSynth 22channel. 23 24FluidSynth-DSSI is written by Sean Bolton, and is copyright (c)2009 25under the GNU General Public License, version 2 or later. See the 26enclosed file COPYING for details. 27 28FluidSynth itself is copyright (c)2006 Peter Hanappe and others, 29under the GNU Library General Public License. 30 31Requirements 32============ 33You need to have the following installed: 34 35 - DSSI version 0.9 or greater, available from the 36 dssi.sourceforge.net address above. 37 38 - liblo version 0.12 or later (0.23 or later recommended), a 39 library implementing the Open Sound Control (OSC) protocol, 40 available at: 41 42 http://liblo.sourceforge.net/ 43 44 - the FluidSynth library and header files, version 1.0.3 or later. 45 FluidSynth-DSSI will have additional capability (run-time 46 polyphony setting and more efficient operation) if FluidSynth 47 version 1.0.6 or later is used. 48 49 - the LADSPA v1.x SDK. 50 51 - the ALSA headers (DSSI plugins use ALSA structures, but not 52 the actual drivers, so you don't necessarily need the 53 drivers installed.) Users of non-Linux system can use 54 libdssialsacompat, available at: 55 56 http://smbolton.com/linux.html 57 58 - pkgconfig with PKG_CONFIG_PATH set appropriately to pick up 59 DSSI, liblo, and fluidsynth (plus libdssialsacompat if used). 60 61 - GTK+ version 1.2 or 2.x. (If GTK+ is not found, the plugin 62 will be built without the GUI.) 63 64 - a working DSSI host. Xsynth-DSSI has been tested with 65 jack-dssi-host, available in the DSSI distribution, and with 66 ghostess, available at: 67 68 http://smbolton.com/linux.html 69 70 - automake 1.7 and autoconf 2.59 or better if you wish to 71 recreate the build files. 72 73Installation 74============ 75The generic installation instructions in the enclosed file INSTALL 76aren't particularly helpful, so try this instead: 77 781. Unpack the tar file. 79 802. Make sure PKG_CONFIG_PATH is set correctly to locate the 81 dssi.pc and liblo.pc pkgconfig files. On many systems, this 82 will be: 83 84 $ PKG_CONFIG_PATH=/usr/local/lib/pkgconfig 85 $ export PKG_CONFIG_PATH 86 873. 'cd' into the package directory and execute './configure'. 88 configure will add '-Wall' and my favorite optimizations to 89 CFLAGS for you if you don't include any '-Wall' or '-O' options. 90 914. If you wish to change the maximum number of simultaneous 92 instances supported by FluidSynth-DSSI (currently 16), edit the 93 file src/fluidsynth-dssi.h and change the FSD_CHANNEL_COUNT 94 definition. 95 963. Enable debugging information if you desire: edit the files 97 src/fluidsynth-dssi.h and src/FluidSynth-DSSI_gtk.c, and define 98 DEBUG_DSSI or DEBUG_AUDIO as explained in the comments. 99 1004. Do 'make'. Hopefully it should build without warnings (or 101 errors.) 102 1035. 'make install' will install the following: 104 105 $(PREFIX)/lib/dssi/fluidsynth-dssi.so 106 $(PREFIX)/lib/dssi/fluidsynth-dssi/FluidSynth-DSSI_gtk 107 108Feedback on your experiences building FluidSynth-DSSI is appreciated. 109 110Operation 111========= 112Start your DSSI host and create an instance of the FluidSynth-DSSI 113plugin. See the 'Example' section below for how to do this with 114jack-dssi-host. 115 116Initially, no soundfont will be loaded. Use the 'Select Soundfont' 117button to select a soundfont. Each instance may use only one 118soundfont at a time, but when multiple instances use the same 119soundfont, it is only loaded once. FluidSynth-DSSI will use the 120the DSSI project directory and the SF2_PATH enviroment variable, 121if set, to search for soundfonts. 122 123The available soundfont presets will be displayed in the 'Preset' 124window. Clicking on one will select that preset. 125 126Under 'Global Settings', the 'gain (dB)' setting affects the output 127level of all running FluidSynth-DSSI instances. 128 129If you're using FluidSynth version 1.0.6 or later, then you will 130have the ability to manage the maximum polyphony used by 131FluidSynth-DSSI. There will be a 'polyphony' setting under 'Global 132Settings' in the FluidSynth-DSSI GUI, which sets the maximum number 133of voices that will be played by all instances. 134 135Test notes may be generated using the 'Send Test Note' button. You 136may select the pitch and velocity of the note using the 'Test Note' 137sliders. 138 139When you create more than one instance of the plugin, you should be 140able to tell their GUIs apart by unique window titles of each 141(provided your host correctly supplies each with the proper 142identifier.) 143 144Example 145======= 1461. Start JACK. 147 1482. Run jack-dssi-host, starting 16 FluidSynth-DSSI instances, one 149 for each MIDI channel: 150 151 $ DSSI_PATH=/usr/local/lib/dssi sudo jack-dssi-host -16 fluidsynth-dssi.so 152 1533. Load a soundfont for each instance. You may do this using the 154 GUI, or via the command line (replace the '19383' with the port 155 number your DSSI host is using): 156 157 $ for ee in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 158 > do dssi_osc_send -C osc.udp://localhost:19383/dssi/fluidsynth-dssi/FluidSynth-DSSI/chan$ee \ 159 > load /t/soundfonts/Reality_GMGS.sf2 160 > done 161 1624. Make some noise: 163 164 $ pmidi -p128:0 /t/smf/simpsons_theme.mid 165 166Bugs in FluidSynth prior to version 1.0.6 167========================================= 168FluidSynth versions up through 1.0.5 have a bug in the 169fluid_synth_nwrite_float() function that FluidSynth-DSSI uses, which 170prevents it from working correctly with block sizes less than 64. 171FluidSynth-DSSI will still work with these earlier versions, but 172working around the bug requires an extra buffer copy per process 173cycle, so it is not as efficient as when FluidSynth versions 1.0.6 174or later are used. 175 176FluidSynth versions up through 1.0.5 have a bug in the code enabled 177by the '--enable-longlong' configure option, so that it will only 178work correctly on little-endian (e.g. x86) systems. It is 179recommended that users of big-endian (e.g. PowerPC) systems upgrade 180to 1.0.6 or later. (FluidSynth 1.0.8 no longer has the 181'--enable-longlong' configure option, and uses the long long type by 182default.) 183 184