| Chris@0 | 1 libdssialsacompat 1.0.8a | 
| Chris@0 | 2 ======================== | 
| Chris@0 | 3 libdssialsacompat is simply an extraction from and repackaging of | 
| Chris@0 | 4 the code from alsa-lib 1.0.8, necessary to support DSSI on non-ALSA | 
| Chris@0 | 5 systems.  It is copyright (c)2005 under the GNU Lesser General | 
| Chris@0 | 6 Public License, version 2.1 or later.  See the enclosed file COPYING | 
| Chris@0 | 7 for details. | 
| Chris@0 | 8 | 
| Chris@0 | 9 More information on DSSI can be found at: | 
| Chris@0 | 10 | 
| Chris@0 | 11   http://dssi.sourceforge.net/ | 
| Chris@0 | 12 | 
| Chris@0 | 13 Introduction | 
| Chris@0 | 14 ============ | 
| Chris@0 | 15 The DSSI specification makes use of the ALSA snd_seq_event_t | 
| Chris@0 | 16 structure for passing MIDI events.  This has the advantage of making | 
| Chris@0 | 17 it immediately familiar to developers familiar with ALSA, but the | 
| Chris@0 | 18 disadvantage of making porting DSSI applications and plugins to | 
| Chris@0 | 19 systems that lack ALSA more difficult. | 
| Chris@0 | 20 | 
| Chris@0 | 21 libdssialsacompat is intended to provide the snd_seq_event_t | 
| Chris@0 | 22 declarations and handling code necessary to compile and use DSSI on | 
| Chris@0 | 23 non-ALSA systems.  It aims to allows compiling DSSI code with as | 
| Chris@0 | 24 little change as possible, while not presenting itself in such a way | 
| Chris@0 | 25 as to fool other autoconf-enabled code into thinking a system has | 
| Chris@0 | 26 ALSA. | 
| Chris@0 | 27 | 
| Chris@0 | 28 libdssialsacompat is simply an extraction of the relevant | 
| Chris@0 | 29 snd_seq_event_t declarations, and raw MIDI stream to snd_seq_event_t | 
| Chris@0 | 30 encoder code, from alsa-lib version 1.0.8, packaged into a | 
| Chris@0 | 31 convenient library. | 
| Chris@0 | 32 | 
| Chris@0 | 33 This library does NOT provide any sort of emulation of the ALSA | 
| Chris@0 | 34 audio, MIDI, or sequencer devices.  The only part of ALSA that is | 
| Chris@0 | 35 required by the DSSI specification is the snd_seq_event_t definition | 
| Chris@0 | 36 and handling, and that is all libdssialsacompat is intended to | 
| Chris@0 | 37 replace.  Other ALSA code should be ported to native facilities. | 
| Chris@0 | 38 | 
| Chris@0 | 39 Installation | 
| Chris@0 | 40 ============ | 
| Chris@0 | 41 libdssialsacompat uses GNU autoconf and automake, so installation can | 
| Chris@0 | 42 be a simple as `./configure && make && make install'.  See the | 
| Chris@0 | 43 enclosed file INSTALL for more information. | 
| Chris@0 | 44 | 
| Chris@0 | 45 The library itself is installed to <prefix>/lib; for example, on Mac | 
| Chris@0 | 46 OS X, the following files are installed: | 
| Chris@0 | 47 | 
| Chris@0 | 48     <prefix>/lib/libdssialsacompat.0.0.0.dylib | 
| Chris@0 | 49     <prefix>/lib/libdssialsacompat.0.dylib | 
| Chris@0 | 50     <prefix>/lib/libdssialsacompat.a | 
| Chris@0 | 51     <prefix>/lib/libdssialsacompat.dylib | 
| Chris@0 | 52     <prefix>/lib/libdssialsacompat.la | 
| Chris@0 | 53 | 
| Chris@0 | 54 The header files are installed to <prefix>/include/dssi/alsa: | 
| Chris@0 | 55 | 
| Chris@0 | 56     <prefix>/include/dssi/alsa/asoundef.h | 
| Chris@0 | 57     <prefix>/include/dssi/alsa/asoundlib.h | 
| Chris@0 | 58     <prefix>/include/dssi/alsa/seq.h | 
| Chris@0 | 59     <prefix>/include/dssi/alsa/seq_event.h | 
| Chris@0 | 60     <prefix>/include/dssi/alsa/seq_midi_event.h | 
| Chris@0 | 61     <prefix>/include/dssi/alsa/sound/asequencer.h | 
| Chris@0 | 62 | 
| Chris@0 | 63 Note that they are NOT installed to <prefix>/include/alsa, which | 
| Chris@0 | 64 could make them visible to non-libdssialsacompat-aware autoconf | 
| Chris@0 | 65 configure scripts, possibly fooling them into thinking the full ALSA | 
| Chris@0 | 66 was available. | 
| Chris@0 | 67 | 
| Chris@0 | 68 Finally, a pkgconfig configuration file is installed: | 
| Chris@0 | 69 | 
| Chris@0 | 70     <prefix>/lib/pkgconfig/libdssialsacompat.pc | 
| Chris@0 | 71 | 
| Chris@0 | 72 Use | 
| Chris@0 | 73 === | 
| Chris@0 | 74 At its most basic, compiling with gcc and libdssialsacompat consists | 
| Chris@0 | 75 of adding '-I<prefix>/include/dssi -L<prefix>/lib -ldssialsacompat' | 
| Chris@0 | 76 to your gcc command line.  Note that the '-I' directive will cause | 
| Chris@0 | 77 code like to following: | 
| Chris@0 | 78 | 
| Chris@0 | 79     #include <alsa/asoundlib.h> | 
| Chris@0 | 80     #include <alsa/seq_event.h> | 
| Chris@0 | 81 | 
| Chris@0 | 82 to find the libdssialsacompat header files, even though they are not | 
| Chris@0 | 83 installed in the usual location for ALSA headers. | 
| Chris@0 | 84 | 
| Chris@0 | 85 libdssialsacompat is easiest to use with autoconf/automake/pkgconfig- | 
| Chris@0 | 86 enabled code.  In which case, editing the configure.in or configure.ac | 
| Chris@0 | 87 file and changing: | 
| Chris@0 | 88 | 
| Chris@0 | 89     PKG_CHECK_MODULES(ALSA, alsa) | 
| Chris@0 | 90 | 
| Chris@0 | 91 to: | 
| Chris@0 | 92 | 
| Chris@0 | 93     PKG_CHECK_MODULES(ALSA, alsa, , [PKG_CHECK_MODULES(ALSA, libdssialsacompat)]) | 
| Chris@0 | 94 | 
| Chris@0 | 95 then doing 'autoreconf', may be all that is needed to get the | 
| Chris@0 | 96 snd_seq_event_t-using code to compile cleanly.  Of course, if the | 
| Chris@0 | 97 code uses other ALSA features, libdssialsacompat won't help with | 
| Chris@0 | 98 them.... | 
| Chris@0 | 99 | 
| Chris@0 | 100 DSSI Installation | 
| Chris@0 | 101 ================= | 
| Chris@0 | 102 Installation of DSSI itself (at least as recently as 2005/4/6 CVS) | 
| Chris@0 | 103 must be done by hand, which goes something like this (assuming | 
| Chris@0 | 104 you're running OS X 10.3 and want to install to /usr/local): | 
| Chris@0 | 105 | 
| Chris@0 | 106 $ tar xpzf dssi-0.9.tar.gz | 
| Chris@0 | 107 $ cd dssi-0.9 | 
| Chris@0 | 108 $ sudo mkdir -p /usr/local/include | 
| Chris@0 | 109 $ sudo cp dssi/dssi.h /usr/local/include/ | 
| Chris@0 | 110 $ sed s:.PREFIX.:/usr/local: dssi.pc >dssi.pc.new | 
| Chris@0 | 111 $ sudo mkdir -p /usr/local/lib/pkgconfig | 
| Chris@0 | 112 $ sudo mv dssi.pc.new /usr/local/lib/pkgconfig/dssi.pc | 
| Chris@0 | 113 | 
| Chris@0 | 114 (You may stop here if you're not interested in the example plugins.) | 
| Chris@0 | 115 | 
| Chris@0 | 116 $ cd examples | 
| Chris@0 | 117 $ PKG_CONFIG_PATH=/usr/local/lib/pkgconfig | 
| Chris@0 | 118 $ export PKG_CONFIG_PATH | 
| Chris@0 | 119 $ make dssi_osc_send | 
| Chris@0 | 120 $ sudo cp -p dssi_osc_send /usr/local/bin | 
| Chris@0 | 121 $ gcc -Wall -fno-common -O2 `pkg-config libdssialsacompat dssi --cflags` \ | 
| Chris@0 | 122     trivial_synth.c -c -o trivial_synth.o | 
| Chris@0 | 123 $ gcc -Wall -fno-common -O2 -c -o message_buffer.o \ | 
| Chris@0 | 124     ../message_buffer/message_buffer.c | 
| Chris@0 | 125 $ gcc -bundle -flat_namespace -undefined suppress -o trivial_synth.so \ | 
| Chris@0 | 126     trivial_synth.o message_buffer.o \ | 
| Chris@0 | 127     `pkg-config libdssialsacompat dssi --libs` | 
| Chris@0 | 128 $ sudo mkdir -p /usr/local/lib/dssi | 
| Chris@0 | 129 $ sudo cp -p trivial_synth.so /usr/local/lib/dssi | 
| Chris@0 | 130 | 
| Chris@0 | 131 Building the rest of the DSSI distribution's plugins is left as an | 
| Chris@0 | 132 exercise to the reader.  Note that (as of 2005/4/6) jack-dssi-host | 
| Chris@0 | 133 will not build without patching since it uses the ALSA sequencer. | 
| Chris@0 | 134 | 
| Chris@0 | 135 What Works (Or Doesn't) | 
| Chris@0 | 136 ======================= | 
| Chris@0 | 137 libdssialsacompat 1.0.8a was tested on Mac OS X 10.3.8, using the | 
| Chris@0 | 138 Apple Developer Tools, Gentoo-installed versions of pkgconfig and | 
| Chris@0 | 139 liblo 0.18, hand-installed GTK+ 1.2 and LADSPA SDK, and JackOSX | 
| Chris@0 | 140 0.6.1.  Under this configuration, the following are known to work: | 
| Chris@0 | 141 | 
| Chris@0 | 142 - ghostess (from the 20050411 release, which includes a clumsy but | 
| Chris@0 | 143     working CoreMIDI driver.)  ghostess can be found at: | 
| Chris@0 | 144 | 
| Chris@0 | 145     http://home.jps.net/~musound/ | 
| Chris@0 | 146 | 
| Chris@0 | 147 - trivial_synth.so (DSSI 0.9 release) | 
| Chris@0 | 148 | 
| Chris@0 | 149 - fluidsynth-dssi.so and FluidSynth-DSSI_gtk (DSSI 0.9 release, | 
| Chris@0 | 150     using a statically compiled libfluidsynth 1.0.3) | 
| Chris@0 | 151 | 
| Chris@0 | 152 - Xsynth-DSSI (CVS as of 2005/4/11) | 
| Chris@0 | 153 | 
| Chris@0 | 154 - hexter (CVS as of 2005/4/11, note that sys-ex patch editing isn't | 
| Chris@0 | 155     supported on non-ALSA systems) | 
| Chris@0 | 156 | 
| Chris@0 | 157 The following problems are known to exist: | 
| Chris@0 | 158 | 
| Chris@0 | 159 - less_trivial_synth.so (DSSI 0.9) plays at the wrong pitch on | 
| Chris@0 | 160     big-endian systems due the little-endian assumption of the | 
| Chris@0 | 161     typedef union fixp in less_trivial_synth.c (line 69).  Otherwise | 
| Chris@0 | 162     works fine. | 
| Chris@0 | 163 | 
| Chris@0 | 164 - I have not tested any of the DSSI 0.9 Qt GUIs, or | 
| Chris@0 | 165     trivial_sampler.so. | 
| Chris@0 | 166 | 
| Chris@0 | 167 - jack-dssi-host (DSSI 0.9) works as an OSC-driven host if you | 
| Chris@0 | 168     comment out all the ALSA seqeuncer code. | 
| Chris@0 | 169 |