lbajardsilogic@0: libdssialsacompat 1.0.8a lbajardsilogic@0: ======================== lbajardsilogic@0: libdssialsacompat is simply an extraction from and repackaging of lbajardsilogic@0: the code from alsa-lib 1.0.8, necessary to support DSSI on non-ALSA lbajardsilogic@0: systems. It is copyright (c)2005 under the GNU Lesser General lbajardsilogic@0: Public License, version 2.1 or later. See the enclosed file COPYING lbajardsilogic@0: for details. lbajardsilogic@0: lbajardsilogic@0: More information on DSSI can be found at: lbajardsilogic@0: lbajardsilogic@0: http://dssi.sourceforge.net/ lbajardsilogic@0: lbajardsilogic@0: Introduction lbajardsilogic@0: ============ lbajardsilogic@0: The DSSI specification makes use of the ALSA snd_seq_event_t lbajardsilogic@0: structure for passing MIDI events. This has the advantage of making lbajardsilogic@0: it immediately familiar to developers familiar with ALSA, but the lbajardsilogic@0: disadvantage of making porting DSSI applications and plugins to lbajardsilogic@0: systems that lack ALSA more difficult. lbajardsilogic@0: lbajardsilogic@0: libdssialsacompat is intended to provide the snd_seq_event_t lbajardsilogic@0: declarations and handling code necessary to compile and use DSSI on lbajardsilogic@0: non-ALSA systems. It aims to allows compiling DSSI code with as lbajardsilogic@0: little change as possible, while not presenting itself in such a way lbajardsilogic@0: as to fool other autoconf-enabled code into thinking a system has lbajardsilogic@0: ALSA. lbajardsilogic@0: lbajardsilogic@0: libdssialsacompat is simply an extraction of the relevant lbajardsilogic@0: snd_seq_event_t declarations, and raw MIDI stream to snd_seq_event_t lbajardsilogic@0: encoder code, from alsa-lib version 1.0.8, packaged into a lbajardsilogic@0: convenient library. lbajardsilogic@0: lbajardsilogic@0: This library does NOT provide any sort of emulation of the ALSA lbajardsilogic@0: audio, MIDI, or sequencer devices. The only part of ALSA that is lbajardsilogic@0: required by the DSSI specification is the snd_seq_event_t definition lbajardsilogic@0: and handling, and that is all libdssialsacompat is intended to lbajardsilogic@0: replace. Other ALSA code should be ported to native facilities. lbajardsilogic@0: lbajardsilogic@0: Installation lbajardsilogic@0: ============ lbajardsilogic@0: libdssialsacompat uses GNU autoconf and automake, so installation can lbajardsilogic@0: be a simple as `./configure && make && make install'. See the lbajardsilogic@0: enclosed file INSTALL for more information. lbajardsilogic@0: lbajardsilogic@0: The library itself is installed to /lib; for example, on Mac lbajardsilogic@0: OS X, the following files are installed: lbajardsilogic@0: lbajardsilogic@0: /lib/libdssialsacompat.0.0.0.dylib lbajardsilogic@0: /lib/libdssialsacompat.0.dylib lbajardsilogic@0: /lib/libdssialsacompat.a lbajardsilogic@0: /lib/libdssialsacompat.dylib lbajardsilogic@0: /lib/libdssialsacompat.la lbajardsilogic@0: lbajardsilogic@0: The header files are installed to /include/dssi/alsa: lbajardsilogic@0: lbajardsilogic@0: /include/dssi/alsa/asoundef.h lbajardsilogic@0: /include/dssi/alsa/asoundlib.h lbajardsilogic@0: /include/dssi/alsa/seq.h lbajardsilogic@0: /include/dssi/alsa/seq_event.h lbajardsilogic@0: /include/dssi/alsa/seq_midi_event.h lbajardsilogic@0: /include/dssi/alsa/sound/asequencer.h lbajardsilogic@0: lbajardsilogic@0: Note that they are NOT installed to /include/alsa, which lbajardsilogic@0: could make them visible to non-libdssialsacompat-aware autoconf lbajardsilogic@0: configure scripts, possibly fooling them into thinking the full ALSA lbajardsilogic@0: was available. lbajardsilogic@0: lbajardsilogic@0: Finally, a pkgconfig configuration file is installed: lbajardsilogic@0: lbajardsilogic@0: /lib/pkgconfig/libdssialsacompat.pc lbajardsilogic@0: lbajardsilogic@0: Use lbajardsilogic@0: === lbajardsilogic@0: At its most basic, compiling with gcc and libdssialsacompat consists lbajardsilogic@0: of adding '-I/include/dssi -L/lib -ldssialsacompat' lbajardsilogic@0: to your gcc command line. Note that the '-I' directive will cause lbajardsilogic@0: code like to following: lbajardsilogic@0: lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: lbajardsilogic@0: to find the libdssialsacompat header files, even though they are not lbajardsilogic@0: installed in the usual location for ALSA headers. lbajardsilogic@0: lbajardsilogic@0: libdssialsacompat is easiest to use with autoconf/automake/pkgconfig- lbajardsilogic@0: enabled code. In which case, editing the configure.in or configure.ac lbajardsilogic@0: file and changing: lbajardsilogic@0: lbajardsilogic@0: PKG_CHECK_MODULES(ALSA, alsa) lbajardsilogic@0: lbajardsilogic@0: to: lbajardsilogic@0: lbajardsilogic@0: PKG_CHECK_MODULES(ALSA, alsa, , [PKG_CHECK_MODULES(ALSA, libdssialsacompat)]) lbajardsilogic@0: lbajardsilogic@0: then doing 'autoreconf', may be all that is needed to get the lbajardsilogic@0: snd_seq_event_t-using code to compile cleanly. Of course, if the lbajardsilogic@0: code uses other ALSA features, libdssialsacompat won't help with lbajardsilogic@0: them.... lbajardsilogic@0: lbajardsilogic@0: DSSI Installation lbajardsilogic@0: ================= lbajardsilogic@0: Installation of DSSI itself (at least as recently as 2005/4/6 CVS) lbajardsilogic@0: must be done by hand, which goes something like this (assuming lbajardsilogic@0: you're running OS X 10.3 and want to install to /usr/local): lbajardsilogic@0: lbajardsilogic@0: $ tar xpzf dssi-0.9.tar.gz lbajardsilogic@0: $ cd dssi-0.9 lbajardsilogic@0: $ sudo mkdir -p /usr/local/include lbajardsilogic@0: $ sudo cp dssi/dssi.h /usr/local/include/ lbajardsilogic@0: $ sed s:.PREFIX.:/usr/local: dssi.pc >dssi.pc.new lbajardsilogic@0: $ sudo mkdir -p /usr/local/lib/pkgconfig lbajardsilogic@0: $ sudo mv dssi.pc.new /usr/local/lib/pkgconfig/dssi.pc lbajardsilogic@0: lbajardsilogic@0: (You may stop here if you're not interested in the example plugins.) lbajardsilogic@0: lbajardsilogic@0: $ cd examples lbajardsilogic@0: $ PKG_CONFIG_PATH=/usr/local/lib/pkgconfig lbajardsilogic@0: $ export PKG_CONFIG_PATH lbajardsilogic@0: $ make dssi_osc_send lbajardsilogic@0: $ sudo cp -p dssi_osc_send /usr/local/bin lbajardsilogic@0: $ gcc -Wall -fno-common -O2 `pkg-config libdssialsacompat dssi --cflags` \ lbajardsilogic@0: trivial_synth.c -c -o trivial_synth.o lbajardsilogic@0: $ gcc -Wall -fno-common -O2 -c -o message_buffer.o \ lbajardsilogic@0: ../message_buffer/message_buffer.c lbajardsilogic@0: $ gcc -bundle -flat_namespace -undefined suppress -o trivial_synth.so \ lbajardsilogic@0: trivial_synth.o message_buffer.o \ lbajardsilogic@0: `pkg-config libdssialsacompat dssi --libs` lbajardsilogic@0: $ sudo mkdir -p /usr/local/lib/dssi lbajardsilogic@0: $ sudo cp -p trivial_synth.so /usr/local/lib/dssi lbajardsilogic@0: lbajardsilogic@0: Building the rest of the DSSI distribution's plugins is left as an lbajardsilogic@0: exercise to the reader. Note that (as of 2005/4/6) jack-dssi-host lbajardsilogic@0: will not build without patching since it uses the ALSA sequencer. lbajardsilogic@0: lbajardsilogic@0: What Works (Or Doesn't) lbajardsilogic@0: ======================= lbajardsilogic@0: libdssialsacompat 1.0.8a was tested on Mac OS X 10.3.8, using the lbajardsilogic@0: Apple Developer Tools, Gentoo-installed versions of pkgconfig and lbajardsilogic@0: liblo 0.18, hand-installed GTK+ 1.2 and LADSPA SDK, and JackOSX lbajardsilogic@0: 0.6.1. Under this configuration, the following are known to work: lbajardsilogic@0: lbajardsilogic@0: - ghostess (from the 20050411 release, which includes a clumsy but lbajardsilogic@0: working CoreMIDI driver.) ghostess can be found at: lbajardsilogic@0: lbajardsilogic@0: http://home.jps.net/~musound/ lbajardsilogic@0: lbajardsilogic@0: - trivial_synth.so (DSSI 0.9 release) lbajardsilogic@0: lbajardsilogic@0: - fluidsynth-dssi.so and FluidSynth-DSSI_gtk (DSSI 0.9 release, lbajardsilogic@0: using a statically compiled libfluidsynth 1.0.3) lbajardsilogic@0: lbajardsilogic@0: - Xsynth-DSSI (CVS as of 2005/4/11) lbajardsilogic@0: lbajardsilogic@0: - hexter (CVS as of 2005/4/11, note that sys-ex patch editing isn't lbajardsilogic@0: supported on non-ALSA systems) lbajardsilogic@0: lbajardsilogic@0: The following problems are known to exist: lbajardsilogic@0: lbajardsilogic@0: - less_trivial_synth.so (DSSI 0.9) plays at the wrong pitch on lbajardsilogic@0: big-endian systems due the little-endian assumption of the lbajardsilogic@0: typedef union fixp in less_trivial_synth.c (line 69). Otherwise lbajardsilogic@0: works fine. lbajardsilogic@0: lbajardsilogic@0: - I have not tested any of the DSSI 0.9 Qt GUIs, or lbajardsilogic@0: trivial_sampler.so. lbajardsilogic@0: lbajardsilogic@0: - jack-dssi-host (DSSI 0.9) works as an OSC-driven host if you lbajardsilogic@0: comment out all the ALSA seqeuncer code. lbajardsilogic@0: