diff plugin/api/alsa/README @ 0:da6937383da8

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