summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPepper <pepper@scannerjammer.com>2015-01-18 04:58:25 -0500
committerPepper <pepper@scannerjammer.com>2015-01-18 04:58:25 -0500
commitb0996c13f31b2e9cf62e7f565af1df1601d56889 (patch)
tree6de4f55f540a9e83803ea1e987ee4af69f5af532 /src
parent131832f418372c0654aa4169c4283f863cb96226 (diff)
first
Diffstat (limited to 'src')
-rw-r--r--src/.cli-dssi-host.c.swpbin0 -> 36864 bytes
-rw-r--r--src/.cli-dssi-host.h.swpbin0 -> 24576 bytes
-rw-r--r--src/.deps/cli-dssi-host.Po74
-rw-r--r--src/.deps/ladspa_run_synth.Po217
-rw-r--r--src/.ladspa_run_synth.c.swpbin0 -> 16384 bytes
-rw-r--r--src/.ladspa_run_synth.h.swpbin0 -> 12288 bytes
-rw-r--r--src/DSSI_NOTES59
-rw-r--r--src/Makefile309
-rw-r--r--src/Makefile.am5
-rw-r--r--src/Makefile.in285
-rwxr-xr-xsrc/cli-dssi-hostbin59514 -> 129195 bytes
-rw-r--r--src/cli-dssi-host.c425
-rw-r--r--src/cli-dssi-host.h42
-rw-r--r--src/cli-dssi-host.obin113264 -> 87696 bytes
-rw-r--r--src/dssi.h.txt426
-rw-r--r--src/example.midbin0 -> 62 bytes
-rw-r--r--src/ladspa_run_synth.c174
-rw-r--r--src/ladspa_run_synth.h6
-rw-r--r--src/ladspa_run_synth.obin0 -> 25864 bytes
-rw-r--r--src/midi/.deps/custom.Plo141
-rw-r--r--src/midi/.deps/fluid_list.Plo144
-rw-r--r--src/midi/.deps/fluid_midi.Plo165
-rw-r--r--src/midi/.deps/midi_loader.Plo144
-rw-r--r--src/midi/.deps/test_midi_loader.Po144
-rw-r--r--src/midi/.fluid_midi.c.swpbin0 -> 16384 bytes
-rw-r--r--src/midi/.libs/fluid_list.obin0 -> 16704 bytes
-rw-r--r--src/midi/.libs/fluid_midi.obin0 -> 79544 bytes
-rw-r--r--src/midi/.libs/libfluidmidi.abin0 -> 129392 bytes
l---------src/midi/.libs/libfluidmidi.la1
-rw-r--r--src/midi/.libs/midi_loader.obin0 -> 30440 bytes
-rw-r--r--src/midi/Makefile645
-rw-r--r--src/midi/Makefile.am7
-rw-r--r--src/midi/Makefile.in645
-rw-r--r--src/midi/fluid_list.lo12
-rw-r--r--src/midi/fluid_list.obin0 -> 17544 bytes
-rw-r--r--src/midi/fluid_midi.lo12
-rw-r--r--src/midi/fluid_midi.obin0 -> 86056 bytes
-rw-r--r--src/midi/fluid_midi_custom.h (renamed from src/midi/custom.h)3
-rw-r--r--src/midi/fluidsynth_priv.h3
-rw-r--r--src/midi/libfluidmidi.la41
-rw-r--r--src/midi/midi_loader.c (renamed from src/midi/custom.c)192
-rw-r--r--src/midi/midi_loader.h45
-rw-r--r--src/midi/midi_loader.lo12
-rw-r--r--src/midi/midi_loader.obin0 -> 30536 bytes
-rwxr-xr-xsrc/midi/test_midi_loaderbin0 -> 83526 bytes
-rw-r--r--src/midi/test_midi_loader.c5
-rw-r--r--src/midi/test_midi_loader.obin0 -> 10352 bytes
-rw-r--r--src/new_example.wavbin0 -> 1470764 bytes
-rw-r--r--src/output.wavbin88620 -> 735048 bytes
-rw-r--r--src/valgrind_output1
50 files changed, 3981 insertions, 403 deletions
diff --git a/src/.cli-dssi-host.c.swp b/src/.cli-dssi-host.c.swp
new file mode 100644
index 0000000..cc66f43
--- /dev/null
+++ b/src/.cli-dssi-host.c.swp
Binary files differ
diff --git a/src/.cli-dssi-host.h.swp b/src/.cli-dssi-host.h.swp
new file mode 100644
index 0000000..2efd3a4
--- /dev/null
+++ b/src/.cli-dssi-host.h.swp
Binary files differ
diff --git a/src/.deps/cli-dssi-host.Po b/src/.deps/cli-dssi-host.Po
index 1e0896b..8ccdf8e 100644
--- a/src/.deps/cli-dssi-host.Po
+++ b/src/.deps/cli-dssi-host.Po
@@ -13,26 +13,32 @@ cli-dssi-host.o: cli-dssi-host.c /usr/include/stdc-predef.h \
/usr/include/bits/byteswap.h /usr/include/bits/byteswap-16.h \
/usr/include/sys/select.h /usr/include/bits/select.h \
/usr/include/bits/sigset.h /usr/include/bits/time.h \
- /usr/include/sys/sysmacros.h /usr/include/ladspa.h /usr/include/dssi.h \
- /usr/include/alsa/seq_event.h /usr/include/stdlib.h \
- /usr/include/alloca.h /usr/include/bits/stdlib-bsearch.h \
- /usr/include/bits/stdlib-float.h /usr/include/string.h \
- /usr/include/bits/string.h /usr/include/bits/string2.h \
- /usr/include/assert.h /usr/include/dlfcn.h /usr/include/bits/dlfcn.h \
- /usr/include/unistd.h /usr/include/bits/posix_opt.h \
- /usr/include/bits/confname.h /usr/include/math.h \
+ /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \
+ /usr/include/ladspa.h /usr/include/dssi.h /usr/include/alsa/seq_event.h \
+ /usr/include/stdlib.h /usr/include/bits/waitflags.h \
+ /usr/include/bits/waitstatus.h /usr/include/alloca.h \
+ /usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \
+ /usr/include/string.h /usr/include/xlocale.h /usr/include/bits/string.h \
+ /usr/include/bits/string2.h /usr/include/assert.h /usr/include/dlfcn.h \
+ /usr/include/bits/dlfcn.h /usr/include/unistd.h \
+ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
+ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/math.h \
/usr/include/bits/huge_val.h /usr/include/bits/huge_valf.h \
/usr/include/bits/huge_vall.h /usr/include/bits/inf.h \
/usr/include/bits/nan.h /usr/include/bits/mathdef.h \
/usr/include/bits/mathcalls.h /usr/include/bits/mathinline.h \
/usr/include/sys/stat.h /usr/include/bits/stat.h /usr/include/sys/time.h \
/usr/include/sys/wait.h /usr/include/signal.h /usr/include/bits/signum.h \
+ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \
/usr/include/bits/sigcontext.h /usr/include/bits/sigstack.h \
- /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
- /usr/include/bits/siginfo.h /usr/include/dirent.h \
- /usr/include/bits/dirent.h /usr/include/bits/posix1_lim.h \
- /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
- /usr/include/libgen.h
+ /usr/include/sys/ucontext.h /usr/include/bits/sigthread.h \
+ /usr/include/dirent.h /usr/include/bits/dirent.h \
+ /usr/include/bits/posix1_lim.h /usr/include/bits/local_lim.h \
+ /usr/include/linux/limits.h /usr/include/libgen.h ladspa_run_synth.h \
+ midi/midi_loader.h midi/fluid_list.h midi/fluidsynth_priv.h \
+ midi/fluid_midi_custom.h midi/midi_loader.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdint.h \
+ /usr/include/stdint.h /usr/include/bits/wchar.h midi/fluid_midi.h
/usr/include/stdc-predef.h:
@@ -94,6 +100,8 @@ cli-dssi-host.h:
/usr/include/sys/sysmacros.h:
+/usr/include/bits/pthreadtypes.h:
+
/usr/include/ladspa.h:
/usr/include/dssi.h:
@@ -102,6 +110,10 @@ cli-dssi-host.h:
/usr/include/stdlib.h:
+/usr/include/bits/waitflags.h:
+
+/usr/include/bits/waitstatus.h:
+
/usr/include/alloca.h:
/usr/include/bits/stdlib-bsearch.h:
@@ -110,6 +122,8 @@ cli-dssi-host.h:
/usr/include/string.h:
+/usr/include/xlocale.h:
+
/usr/include/bits/string.h:
/usr/include/bits/string2.h:
@@ -124,8 +138,12 @@ cli-dssi-host.h:
/usr/include/bits/posix_opt.h:
+/usr/include/bits/environments.h:
+
/usr/include/bits/confname.h:
+/usr/include/getopt.h:
+
/usr/include/math.h:
/usr/include/bits/huge_val.h:
@@ -156,15 +174,17 @@ cli-dssi-host.h:
/usr/include/bits/signum.h:
+/usr/include/bits/siginfo.h:
+
+/usr/include/bits/sigaction.h:
+
/usr/include/bits/sigcontext.h:
/usr/include/bits/sigstack.h:
-/usr/include/bits/waitflags.h:
+/usr/include/sys/ucontext.h:
-/usr/include/bits/waitstatus.h:
-
-/usr/include/bits/siginfo.h:
+/usr/include/bits/sigthread.h:
/usr/include/dirent.h:
@@ -177,3 +197,23 @@ cli-dssi-host.h:
/usr/include/linux/limits.h:
/usr/include/libgen.h:
+
+ladspa_run_synth.h:
+
+midi/midi_loader.h:
+
+midi/fluid_list.h:
+
+midi/fluidsynth_priv.h:
+
+midi/fluid_midi_custom.h:
+
+midi/midi_loader.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/bits/wchar.h:
+
+midi/fluid_midi.h:
diff --git a/src/.deps/ladspa_run_synth.Po b/src/.deps/ladspa_run_synth.Po
new file mode 100644
index 0000000..6806114
--- /dev/null
+++ b/src/.deps/ladspa_run_synth.Po
@@ -0,0 +1,217 @@
+ladspa_run_synth.o: ladspa_run_synth.c /usr/include/stdc-predef.h \
+ cli-dssi-host.h /usr/include/sndfile.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/sys/cdefs.h \
+ /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
+ /usr/include/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stddef.h \
+ /usr/include/bits/types.h /usr/include/bits/typesizes.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdarg.h \
+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdio.h /usr/include/sys/types.h /usr/include/time.h \
+ /usr/include/endian.h /usr/include/bits/endian.h \
+ /usr/include/bits/byteswap.h /usr/include/bits/byteswap-16.h \
+ /usr/include/sys/select.h /usr/include/bits/select.h \
+ /usr/include/bits/sigset.h /usr/include/bits/time.h \
+ /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \
+ /usr/include/ladspa.h /usr/include/dssi.h /usr/include/alsa/seq_event.h \
+ /usr/include/stdlib.h /usr/include/bits/waitflags.h \
+ /usr/include/bits/waitstatus.h /usr/include/alloca.h \
+ /usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \
+ /usr/include/string.h /usr/include/xlocale.h /usr/include/bits/string.h \
+ /usr/include/bits/string2.h /usr/include/assert.h /usr/include/dlfcn.h \
+ /usr/include/bits/dlfcn.h /usr/include/unistd.h \
+ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
+ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/math.h \
+ /usr/include/bits/huge_val.h /usr/include/bits/huge_valf.h \
+ /usr/include/bits/huge_vall.h /usr/include/bits/inf.h \
+ /usr/include/bits/nan.h /usr/include/bits/mathdef.h \
+ /usr/include/bits/mathcalls.h /usr/include/bits/mathinline.h \
+ /usr/include/sys/stat.h /usr/include/bits/stat.h /usr/include/sys/time.h \
+ /usr/include/sys/wait.h /usr/include/signal.h /usr/include/bits/signum.h \
+ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \
+ /usr/include/bits/sigcontext.h /usr/include/bits/sigstack.h \
+ /usr/include/sys/ucontext.h /usr/include/bits/sigthread.h \
+ /usr/include/dirent.h /usr/include/bits/dirent.h \
+ /usr/include/bits/posix1_lim.h /usr/include/bits/local_lim.h \
+ /usr/include/linux/limits.h /usr/include/libgen.h midi/midi_loader.h \
+ midi/fluid_list.h midi/fluidsynth_priv.h midi/fluid_midi_custom.h \
+ midi/midi_loader.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdint.h \
+ /usr/include/stdint.h /usr/include/bits/wchar.h midi/fluid_midi.h
+
+/usr/include/stdc-predef.h:
+
+cli-dssi-host.h:
+
+/usr/include/sndfile.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/include/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stddef.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdarg.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/include/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/endian.h:
+
+/usr/include/bits/endian.h:
+
+/usr/include/bits/byteswap.h:
+
+/usr/include/bits/byteswap-16.h:
+
+/usr/include/sys/select.h:
+
+/usr/include/bits/select.h:
+
+/usr/include/bits/sigset.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/sys/sysmacros.h:
+
+/usr/include/bits/pthreadtypes.h:
+
+/usr/include/ladspa.h:
+
+/usr/include/dssi.h:
+
+/usr/include/alsa/seq_event.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/bits/waitflags.h:
+
+/usr/include/bits/waitstatus.h:
+
+/usr/include/alloca.h:
+
+/usr/include/bits/stdlib-bsearch.h:
+
+/usr/include/bits/stdlib-float.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/bits/string.h:
+
+/usr/include/bits/string2.h:
+
+/usr/include/assert.h:
+
+/usr/include/dlfcn.h:
+
+/usr/include/bits/dlfcn.h:
+
+/usr/include/unistd.h:
+
+/usr/include/bits/posix_opt.h:
+
+/usr/include/bits/environments.h:
+
+/usr/include/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/math.h:
+
+/usr/include/bits/huge_val.h:
+
+/usr/include/bits/huge_valf.h:
+
+/usr/include/bits/huge_vall.h:
+
+/usr/include/bits/inf.h:
+
+/usr/include/bits/nan.h:
+
+/usr/include/bits/mathdef.h:
+
+/usr/include/bits/mathcalls.h:
+
+/usr/include/bits/mathinline.h:
+
+/usr/include/sys/stat.h:
+
+/usr/include/bits/stat.h:
+
+/usr/include/sys/time.h:
+
+/usr/include/sys/wait.h:
+
+/usr/include/signal.h:
+
+/usr/include/bits/signum.h:
+
+/usr/include/bits/siginfo.h:
+
+/usr/include/bits/sigaction.h:
+
+/usr/include/bits/sigcontext.h:
+
+/usr/include/bits/sigstack.h:
+
+/usr/include/sys/ucontext.h:
+
+/usr/include/bits/sigthread.h:
+
+/usr/include/dirent.h:
+
+/usr/include/bits/dirent.h:
+
+/usr/include/bits/posix1_lim.h:
+
+/usr/include/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/libgen.h:
+
+midi/midi_loader.h:
+
+midi/fluid_list.h:
+
+midi/fluidsynth_priv.h:
+
+midi/fluid_midi_custom.h:
+
+midi/midi_loader.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/bits/wchar.h:
+
+midi/fluid_midi.h:
diff --git a/src/.ladspa_run_synth.c.swp b/src/.ladspa_run_synth.c.swp
new file mode 100644
index 0000000..196caf1
--- /dev/null
+++ b/src/.ladspa_run_synth.c.swp
Binary files differ
diff --git a/src/.ladspa_run_synth.h.swp b/src/.ladspa_run_synth.h.swp
new file mode 100644
index 0000000..ed056e9
--- /dev/null
+++ b/src/.ladspa_run_synth.h.swp
Binary files differ
diff --git a/src/DSSI_NOTES b/src/DSSI_NOTES
new file mode 100644
index 0000000..be197ce
--- /dev/null
+++ b/src/DSSI_NOTES
@@ -0,0 +1,59 @@
+ /**
+//all dssi functions are documented in... dssi.h
+//
+ * run_synth()
+ *
+ * This member is a function pointer that runs a synth for a
+ * block. This is identical in function to the LADSPA run()
+ * function, except that it also supplies events to the synth.
+ *
+ * A plugin may provide this function, run_multiple_synths() (see
+ * below), both, or neither (if it is not in fact a synth). A
+ * plugin that does not provide this function must set this member
+ * to NULL. Authors of synth plugins are encouraged to provide
+ * this function if at all possible.
+ *
+ * The Events pointer points to a block of EventCount ALSA
+ * sequencer events, which is used to communicate MIDI and related
+ * events to the synth. Each event is timestamped relative to the
+ * start of the block, (mis)using the ALSA "tick time" field as a
+ * frame count. The host is responsible for ensuring that events
+ * with differing timestamps are already ordered by time.
+ *
+ * See also the notes on activation, port connection etc in
+ * ladpsa.h, in the context of the LADSPA run() function.
+ *
+ * Note Events
+ * ~~~~~~~~~~~
+ * There are two minor requirements aimed at making the plugin
+ * writer's life as simple as possible:
+ *
+ * 1. A host must never send events of type SND_SEQ_EVENT_NOTE.
+ * Notes should always be sent as separate SND_SEQ_EVENT_NOTE_ON
+ * and NOTE_OFF events. A plugin should discard any one-point
+ * NOTE events it sees.
+ *
+ * 2. A host must not attempt to switch notes off by sending
+ * zero-velocity NOTE_ON events. It should always send true ///interesting ..this is probably what was going on with all of those NOTE_ONs, some of them were probably zero velocity
+ * NOTE_OFFs. It is the host's responsibility to remap events in
+ * cases where an external MIDI source has sent it zero-velocity
+ * NOTE_ONs.
+ *
+ * Bank and Program Events
+ * ~~~~~~~~~~~~~~~~~~~~~~~
+ * Hosts must map MIDI Bank Select MSB and LSB (0 and 32)
+ * controllers and MIDI Program Change events onto the banks and
+ * programs specified by the plugin, using the DSSI select_program
+ * call. No host should ever deliver a program change or bank
+ * select controller to a plugin via run_synth.
+ */
+ void (*run_synth)(LADSPA_Handle Instance,
+ unsigned long SampleCount,
+ snd_seq_event_t *Events,
+ unsigned long EventCount); //is this any different from how we are using it? nope, same nothing about samplecount though
+ you mean we haven't been sending sample count? I thought that's what nframes was? yes it is, i mean no docs about it ok I'll look
+the second
+ indicates the block size (in samples) for which the plugin
+ instance may run.
+
+ /**
diff --git a/src/Makefile b/src/Makefile
index c163de0..cceb3ff 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -76,12 +76,14 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+build_triplet = x86_64-unknown-linux-gnu
+host_triplet = x86_64-unknown-linux-gnu
bin_PROGRAMS = cli-dssi-host$(EXEEXT)
subdir = src
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -89,12 +91,18 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
-am_cli_dssi_host_OBJECTS = cli-dssi-host.$(OBJEXT)
+am_cli_dssi_host_OBJECTS = cli-dssi-host.$(OBJEXT) \
+ ladspa_run_synth.$(OBJEXT)
cli_dssi_host_OBJECTS = $(am_cli_dssi_host_OBJECTS)
am__DEPENDENCIES_1 =
am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
-cli_dssi_host_DEPENDENCIES = $(am__DEPENDENCIES_2)
+cli_dssi_host_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+ midi/libfluidmidi.la
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__v_lt_1 =
AM_V_P = $(am__v_P_$(V))
am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
am__v_P_0 = false
@@ -113,23 +121,45 @@ am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_$(V))
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_$(V))
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(cli_dssi_host_SOURCES)
DIST_SOURCES = $(cli_dssi_host_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -149,41 +179,85 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = aclocal-1.14
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = ${SHELL} /home/pepper/DSSI/dssi-render/missing aclocal-1.14
ALSA_CFLAGS = -I/usr/include/alsa
ALSA_LIBS = -lasound
AMTAR = $${TAR-tar}
AM_DEFAULT_VERBOSITY = 1
-AUTOCONF = autoconf
-AUTOHEADER = autoheader
-AUTOMAKE = automake-1.14
+AR = ar
+AUTOCONF = ${SHELL} /home/pepper/DSSI/dssi-render/missing autoconf
+AUTOHEADER = ${SHELL} /home/pepper/DSSI/dssi-render/missing autoheader
+AUTOMAKE = ${SHELL} /home/pepper/DSSI/dssi-render/missing automake-1.14
AWK = gawk
CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -g -O2
+CPP = gcc -E
CPPFLAGS =
CYGPATH_W = echo
-DEFS = -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"cli-dssi-host\" -DVERSION=\"0.1.3\"
+DEFS = -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DPACKAGE=\"cli-dssi-host\" -DVERSION=\"0.1.3\"
DEPDIR = .deps
+DLLTOOL = false
DSSI_CFLAGS =
DSSI_LIBS =
+DSYMUTIL =
+DUMPBIN =
ECHO_C =
ECHO_N = -n
ECHO_T =
+EGREP = /usr/bin/grep -E
EXEEXT =
+FGREP = /usr/bin/grep -F
+GREP = /usr/bin/grep
INSTALL = /usr/bin/install -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LD = /usr/bin/ld -m elf_x86_64
LDFLAGS =
LIBOBJS =
LIBS =
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO =
+LN_S = ln -s
LTLIBOBJS =
-MAKEINFO = makeinfo
+MAKEINFO = ${SHELL} /home/pepper/DSSI/dssi-render/missing makeinfo
+MANIFEST_TOOL = :
MKDIR_P = /usr/bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT =
+OBJDUMP = objdump
OBJEXT = o
+OTOOL =
+OTOOL64 =
PACKAGE = cli-dssi-host
PACKAGE_BUGREPORT =
PACKAGE_NAME =
@@ -195,35 +269,47 @@ PATH_SEPARATOR = :
PKG_CONFIG = /usr/bin/pkg-config
PKG_CONFIG_LIBDIR =
PKG_CONFIG_PATH =
+RANLIB = ranlib
+SED = /usr/bin/sed
SET_MAKE =
SHELL = /bin/sh
SNDFILE_CFLAGS =
SNDFILE_LIBS = -lsndfile
-STRIP =
+STRIP = strip
VERSION = 0.1.3
-abs_builddir = /home/pepper/DSSI/dssi-render/cli-dssi-host/src
-abs_srcdir = /home/pepper/DSSI/dssi-render/cli-dssi-host/src
-abs_top_builddir = /home/pepper/DSSI/dssi-render/cli-dssi-host
-abs_top_srcdir = /home/pepper/DSSI/dssi-render/cli-dssi-host
+abs_builddir = /home/pepper/DSSI/dssi-render/src
+abs_srcdir = /home/pepper/DSSI/dssi-render/src
+abs_top_builddir = /home/pepper/DSSI/dssi-render
+abs_top_srcdir = /home/pepper/DSSI/dssi-render
+ac_ct_AR = ar
ac_ct_CC = gcc
+ac_ct_DUMPBIN =
am__include = include
am__leading_dot = .
am__quote =
am__tar = $${TAR-tar} chof - "$$tardir"
am__untar = $${TAR-tar} xf -
bindir = ${exec_prefix}/bin
+build = x86_64-unknown-linux-gnu
build_alias =
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = unknown
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE}
dvidir = ${docdir}
exec_prefix = ${prefix}
+host = x86_64-unknown-linux-gnu
host_alias =
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = unknown
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
-install_sh = ${SHELL} /home/pepper/DSSI/dssi-render/cli-dssi-host/install-sh
+install_sh = ${SHELL} /home/pepper/DSSI/dssi-render/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
@@ -243,15 +329,16 @@ target_alias =
top_build_prefix = ../
top_builddir = ..
top_srcdir = ..
+SUBDIRS = midi
AM_CFLAGS = -Wall -std=c99 $(DSSI_CFLAGS) $(SNDFILE_CFLAGS) $(ALSA_CFLAGS)
AM_LIBS = $(DSSI_LIBS) $(SNDFILE_LIBS) $(ALSA_LIBS)
-cli_dssi_host_SOURCES = cli-dssi-host.c cli-dssi-host.h
-cli_dssi_host_LDADD = $(AM_LIBS) -lm -ldl
+cli_dssi_host_SOURCES = cli-dssi-host.c cli-dssi-host.h ladspa_run_synth.c
+cli_dssi_host_LDADD = $(AM_LIBS) -lm -ldl midi/libfluidmidi.la
EXTRA_DIST = lts.prs
-all: all-am
+all: all-recursive
.SUFFIXES:
-.SUFFIXES: .c .o .obj
+.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@@ -292,6 +379,7 @@ install-binPROGRAMS: $(bin_PROGRAMS)
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p \
+ || test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' \
@@ -306,8 +394,8 @@ install-binPROGRAMS: $(bin_PROGRAMS)
while read type dir files; do \
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
test -z "$$files" || { \
- echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
- $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
} \
; done
@@ -323,7 +411,13 @@ uninstall-binPROGRAMS:
cd "$(DESTDIR)$(bindir)" && rm -f $$files
clean-binPROGRAMS:
- -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
cli-dssi-host$(EXEEXT): $(cli_dssi_host_OBJECTS) $(cli_dssi_host_DEPENDENCIES) $(EXTRA_cli_dssi_host_DEPENDENCIES)
@rm -f cli-dssi-host$(EXEEXT)
@@ -336,6 +430,7 @@ distclean-compile:
-rm -f *.tab.c
include ./$(DEPDIR)/cli-dssi-host.Po
+include ./$(DEPDIR)/ladspa_run_synth.Po
.c.o:
$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -351,14 +446,74 @@ include ./$(DEPDIR)/cli-dssi-host.Po
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+.c.lo:
+ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+# $(AM_V_CC)source='$<' object='$@' libtool=yes \
+# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
+tags: tags-recursive
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
@@ -371,7 +526,7 @@ tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$$unique; \
fi; \
fi
-ctags: ctags-am
+ctags: ctags-recursive
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
@@ -384,7 +539,7 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
+cscopelist: cscopelist-recursive
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
@@ -433,22 +588,48 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
check-am: all-am
-check: check-am
+check: check-recursive
all-am: Makefile $(PROGRAMS)
-installdirs:
+installdirs: installdirs-recursive
+installdirs-am:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-installcheck: installcheck-am
+installcheck: installcheck-recursive
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
@@ -470,90 +651,92 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
+clean: clean-recursive
-clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
-distclean: distclean-am
+distclean: distclean-recursive
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
-dvi: dvi-am
+dvi: dvi-recursive
dvi-am:
-html: html-am
+html: html-recursive
html-am:
-info: info-am
+info: info-recursive
info-am:
install-data-am:
-install-dvi: install-dvi-am
+install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am: install-binPROGRAMS
-install-html: install-html-am
+install-html: install-html-recursive
install-html-am:
-install-info: install-info-am
+install-info: install-info-recursive
install-info-am:
install-man:
-install-pdf: install-pdf-am
+install-pdf: install-pdf-recursive
install-pdf-am:
-install-ps: install-ps-am
+install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
-maintainer-clean: maintainer-clean-am
+maintainer-clean: maintainer-clean-recursive
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
-mostlyclean: mostlyclean-am
+mostlyclean: mostlyclean-recursive
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
-pdf: pdf-am
+pdf: pdf-recursive
pdf-am:
-ps: ps-am
+ps: ps-recursive
ps-am:
uninstall-am: uninstall-binPROGRAMS
-.MAKE: install-am install-strip
+.MAKE: $(am__recursive_targets) install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
- clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \
- distclean distclean-compile distclean-generic distclean-tags \
- distdir dvi dvi-am html html-am info info-am install \
- install-am install-binPROGRAMS install-data install-data-am \
- install-dvi install-dvi-am install-exec install-exec-am \
- install-html install-html-am install-info install-info-am \
- install-man install-pdf install-pdf-am install-ps \
- install-ps-am install-strip installcheck installcheck-am \
- installdirs maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
- ps ps-am tags tags-am uninstall uninstall-am \
- uninstall-binPROGRAMS
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-binPROGRAMS clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-binPROGRAMS install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-binPROGRAMS
# Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/src/Makefile.am b/src/Makefile.am
index c53180c..4d11bbf 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -5,8 +5,7 @@ bin_PROGRAMS = cli-dssi-host
AM_CFLAGS = -Wall -std=c99 $(DSSI_CFLAGS) $(SNDFILE_CFLAGS) $(ALSA_CFLAGS)
AM_LIBS = $(DSSI_LIBS) $(SNDFILE_LIBS) $(ALSA_LIBS)
-cli_dssi_host_SOURCES = cli-dssi-host.c cli-dssi-host.h
-cli_dssi_host_LDADD = $(AM_LIBS) -lm -ldl
-cli_dssi_host_LIBADD = midi/libfluidmidi.la
+cli_dssi_host_SOURCES = cli-dssi-host.c cli-dssi-host.h ladspa_run_synth.c
+cli_dssi_host_LDADD = $(AM_LIBS) -lm -ldl midi/libfluidmidi.la
EXTRA_DIST = lts.prs
diff --git a/src/Makefile.in b/src/Makefile.in
index 919c67c..73f2da6 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -76,12 +76,14 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
bin_PROGRAMS = cli-dssi-host$(EXEEXT)
subdir = src
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -89,12 +91,18 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
-am_cli_dssi_host_OBJECTS = cli-dssi-host.$(OBJEXT)
+am_cli_dssi_host_OBJECTS = cli-dssi-host.$(OBJEXT) \
+ ladspa_run_synth.$(OBJEXT)
cli_dssi_host_OBJECTS = $(am_cli_dssi_host_OBJECTS)
am__DEPENDENCIES_1 =
am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
-cli_dssi_host_DEPENDENCIES = $(am__DEPENDENCIES_2)
+cli_dssi_host_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+ midi/libfluidmidi.la
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -113,23 +121,45 @@ am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(cli_dssi_host_SOURCES)
DIST_SOURCES = $(cli_dssi_host_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -149,12 +179,39 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
ACLOCAL = @ACLOCAL@
ALSA_CFLAGS = @ALSA_CFLAGS@
ALSA_LIBS = @ALSA_LIBS@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
@@ -162,28 +219,45 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
DSSI_CFLAGS = @DSSI_CFLAGS@
DSSI_LIBS = @DSSI_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGREP = @EGREP@
EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
@@ -195,6 +269,8 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
@@ -205,21 +281,31 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
+build = @build@
build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
+host = @host@
host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
@@ -243,15 +329,16 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+SUBDIRS = midi
AM_CFLAGS = -Wall -std=c99 $(DSSI_CFLAGS) $(SNDFILE_CFLAGS) $(ALSA_CFLAGS)
AM_LIBS = $(DSSI_LIBS) $(SNDFILE_LIBS) $(ALSA_LIBS)
-cli_dssi_host_SOURCES = cli-dssi-host.c cli-dssi-host.h
-cli_dssi_host_LDADD = $(AM_LIBS) -lm -ldl
+cli_dssi_host_SOURCES = cli-dssi-host.c cli-dssi-host.h ladspa_run_synth.c
+cli_dssi_host_LDADD = $(AM_LIBS) -lm -ldl midi/libfluidmidi.la
EXTRA_DIST = lts.prs
-all: all-am
+all: all-recursive
.SUFFIXES:
-.SUFFIXES: .c .o .obj
+.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@@ -292,6 +379,7 @@ install-binPROGRAMS: $(bin_PROGRAMS)
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p \
+ || test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' \
@@ -306,8 +394,8 @@ install-binPROGRAMS: $(bin_PROGRAMS)
while read type dir files; do \
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
test -z "$$files" || { \
- echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
- $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
} \
; done
@@ -323,7 +411,13 @@ uninstall-binPROGRAMS:
cd "$(DESTDIR)$(bindir)" && rm -f $$files
clean-binPROGRAMS:
- -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
cli-dssi-host$(EXEEXT): $(cli_dssi_host_OBJECTS) $(cli_dssi_host_DEPENDENCIES) $(EXTRA_cli_dssi_host_DEPENDENCIES)
@rm -f cli-dssi-host$(EXEEXT)
@@ -336,6 +430,7 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cli-dssi-host.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ladspa_run_synth.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -351,14 +446,74 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
+tags: tags-recursive
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
@@ -371,7 +526,7 @@ tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$$unique; \
fi; \
fi
-ctags: ctags-am
+ctags: ctags-recursive
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
@@ -384,7 +539,7 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
+cscopelist: cscopelist-recursive
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
@@ -433,22 +588,48 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
check-am: all-am
-check: check-am
+check: check-recursive
all-am: Makefile $(PROGRAMS)
-installdirs:
+installdirs: installdirs-recursive
+installdirs-am:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-installcheck: installcheck-am
+installcheck: installcheck-recursive
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
@@ -470,90 +651,92 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
+clean: clean-recursive
-clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
-distclean: distclean-am
+distclean: distclean-recursive
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
-dvi: dvi-am
+dvi: dvi-recursive
dvi-am:
-html: html-am
+html: html-recursive
html-am:
-info: info-am
+info: info-recursive
info-am:
install-data-am:
-install-dvi: install-dvi-am
+install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am: install-binPROGRAMS
-install-html: install-html-am
+install-html: install-html-recursive
install-html-am:
-install-info: install-info-am
+install-info: install-info-recursive
install-info-am:
install-man:
-install-pdf: install-pdf-am
+install-pdf: install-pdf-recursive
install-pdf-am:
-install-ps: install-ps-am
+install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
-maintainer-clean: maintainer-clean-am
+maintainer-clean: maintainer-clean-recursive
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
-mostlyclean: mostlyclean-am
+mostlyclean: mostlyclean-recursive
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
-pdf: pdf-am
+pdf: pdf-recursive
pdf-am:
-ps: ps-am
+ps: ps-recursive
ps-am:
uninstall-am: uninstall-binPROGRAMS
-.MAKE: install-am install-strip
+.MAKE: $(am__recursive_targets) install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
- clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \
- distclean distclean-compile distclean-generic distclean-tags \
- distdir dvi dvi-am html html-am info info-am install \
- install-am install-binPROGRAMS install-data install-data-am \
- install-dvi install-dvi-am install-exec install-exec-am \
- install-html install-html-am install-info install-info-am \
- install-man install-pdf install-pdf-am install-ps \
- install-ps-am install-strip installcheck installcheck-am \
- installdirs maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
- ps ps-am tags tags-am uninstall uninstall-am \
- uninstall-binPROGRAMS
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-binPROGRAMS clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-binPROGRAMS install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-binPROGRAMS
# Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/src/cli-dssi-host b/src/cli-dssi-host
index ff38cba..17cafb4 100755
--- a/src/cli-dssi-host
+++ b/src/cli-dssi-host
Binary files differ
diff --git a/src/cli-dssi-host.c b/src/cli-dssi-host.c
index 1f3ac30..5650cd8 100644
--- a/src/cli-dssi-host.c
+++ b/src/cli-dssi-host.c
@@ -20,8 +20,12 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 01222-1307
* USA
*/
+#define CLI_FUNCS
#include "cli-dssi-host.h"
+#include "ladspa_run_synth.h"
+#include "midi/midi_loader.h"
+
void
print_usage(void) {
@@ -44,17 +48,19 @@ print_usage(void) {
exit(1);
}
-int
-main(int argc, char **argv) {
-
- my_name = basename(argv[0]);
+const DSSI_Descriptor *descriptor;
+LADSPA_Handle instanceHandle;
+SNDFILE *outfile;
+char *output_file = "output.wav";
+char *midi_filename = "example.mid";
+ int clip = 0;
+ int have_warned = 0;
+ int nchannels = 1;
- DSSI_Descriptor_Function descfn;
- const DSSI_Descriptor *descriptor;
- LADSPA_Handle instanceHandle;
+// check later {{{
+DSSI_Descriptor_Function descfn;
void *pluginObject;
- SNDFILE *outfile;
SF_INFO outsfinfo;
char **configure_key = NULL;
@@ -62,20 +68,16 @@ main(int argc, char **argv) {
char *directory = NULL;
char *dllName = NULL;
char *label;
- char *output_file = "output.wav";
char *projectDirectory = NULL;
int in, out, controlIn, controlOut;
int ins, outs, controlIns, controlOuts;
port_vals_source_t src = from_stdin;
- int nchannels = 1;
int midi_velocity = 127;
int midi_note = 60;
int bank = 0;
int program_no = 0;
int nkeys = 0;
- int clip = 0;
- int have_warned = 0;
size_t length = SAMPLE_RATE;
@@ -86,6 +88,49 @@ main(int argc, char **argv) {
float **pluginInputBuffers, **pluginOutputBuffers;
float *pluginControlIns, *pluginControlOuts;
+//}}}
+
+void connect_ports(void){
+ in = out = controlIn = controlOut = 0;
+ for (int j = 0; j < descriptor->LADSPA_Plugin->PortCount; j++) {
+ /* j is LADSPA port number */
+
+ LADSPA_PortDescriptor pod =
+ descriptor->LADSPA_Plugin->PortDescriptors[j];
+
+ if (LADSPA_IS_PORT_AUDIO(pod)) {
+
+ if (LADSPA_IS_PORT_INPUT(pod)) {
+ descriptor->LADSPA_Plugin->connect_port
+ (instanceHandle, j, pluginInputBuffers[in++]);
+
+ } else if (LADSPA_IS_PORT_OUTPUT(pod)) {
+ descriptor->LADSPA_Plugin->connect_port
+ (instanceHandle, j, pluginOutputBuffers[out++]);
+ }
+
+ } else if (LADSPA_IS_PORT_CONTROL(pod)) {
+
+ if (LADSPA_IS_PORT_INPUT(pod)) {
+
+ descriptor->LADSPA_Plugin->connect_port
+ (instanceHandle, j, &pluginControlIns[controlIn++]);
+
+ } else if (LADSPA_IS_PORT_OUTPUT(pod)) {
+ descriptor->LADSPA_Plugin->connect_port
+ (instanceHandle, j, &pluginControlOuts[controlOut++]);
+ }
+ }
+ } /* 'for (j...' LADSPA port number */
+
+
+}
+
+int
+main(int argc, char **argv) {
+
+ my_name = basename(argv[0]);
+
sample_rate = SAMPLE_RATE;
@@ -259,11 +304,10 @@ main(int argc, char **argv) {
pluginControlOuts = (float *)calloc(controlOuts, sizeof(float));
for (int i = 0; i < outs; i++) {
- pluginOutputBuffers[i] = (float *)calloc(nframes, sizeof(float));
+ pluginOutputBuffers[i] = NULL;
}
-
/* Instantiate plugin */
instanceHandle = descriptor->LADSPA_Plugin->instantiate
@@ -276,40 +320,9 @@ main(int argc, char **argv) {
}
/* Connect ports */
+//this works a bit weird for some plugins...FIXME
- in = out = controlIn = controlOut = 0;
- for (int j = 0; j < descriptor->LADSPA_Plugin->PortCount; j++) {
- /* j is LADSPA port number */
-
- LADSPA_PortDescriptor pod =
- descriptor->LADSPA_Plugin->PortDescriptors[j];
-
- if (LADSPA_IS_PORT_AUDIO(pod)) {
-
- if (LADSPA_IS_PORT_INPUT(pod)) {
- descriptor->LADSPA_Plugin->connect_port
- (instanceHandle, j, pluginInputBuffers[in++]);
-
- } else if (LADSPA_IS_PORT_OUTPUT(pod)) {
- descriptor->LADSPA_Plugin->connect_port
- (instanceHandle, j, pluginOutputBuffers[out++]);
- }
-
- } else if (LADSPA_IS_PORT_CONTROL(pod)) {
-
- if (LADSPA_IS_PORT_INPUT(pod)) {
-
- descriptor->LADSPA_Plugin->connect_port
- (instanceHandle, j, &pluginControlIns[controlIn++]);
-
- } else if (LADSPA_IS_PORT_OUTPUT(pod)) {
- descriptor->LADSPA_Plugin->connect_port
- (instanceHandle, j, &pluginControlOuts[controlOut++]);
- }
- }
- } /* 'for (j...' LADSPA port number */
-
-
+ connect_ports();
/* Set the control port values */
@@ -422,6 +435,7 @@ main(int argc, char **argv) {
}
}
+//I changed the midi file a tiny bit, should we try again? sure
/* Open sndfile */
@@ -438,171 +452,162 @@ main(int argc, char **argv) {
return 1;
}
-
- /* Instead of creating an alsa midi input, we fill in two events
- * note-on and note-off */
-
- snd_seq_event_t on_event, off_event, *current_event; // snd_seq_event_t's so we just need to fill array of those for curently pressed notes and send them. and we can be sure it's a simple array, not some linked list or something? yes because if it were the linked list, it wouldn't have the length passed with it? yep got it
- on_event.type = SND_SEQ_EVENT_NOTEON;
- on_event.data.note.channel = 0;
- on_event.data.note.note = midi_note;
- on_event.data.note.velocity = midi_velocity;
- on_event.time.tick = 0;
-
- off_event.type = SND_SEQ_EVENT_NOTEOFF;
- off_event.data.note.channel = 0;
- off_event.data.note.note = midi_note;
- off_event.data.note.off_velocity = midi_velocity;
- off_event.time.tick = 0;
-
- /* Generate the data: send an on-event, wait, send an off-event,
- wait for release tail to die */
- total_written = 0;
- int finished = 0;
- unsigned long nevents;
- while (!finished) {
- if (total_written == 0) {
- current_event = &on_event; //so this is just putting one in, but that's because it's the first maybe? yes so if there is only one element you can just create a pointer from it and tha't it. but if you have two or more you have to arrange them sequentually in memory, like array. I see what threw me off...ohh because this thing only makes a one note recording...got it
-//well should we check dssi.h just to be sure, and to look at how current_event array needs to be made? no need array is of
- nevents = 1;
- } else if (total_written >= length && total_written < length + nframes) {// this condition
- current_event = &off_event;
- nevents = 1;
- } else {
- current_event = NULL;
- nevents = 0;
- }
-
-/* if (DEBUG) { */
-/* fprintf(stderr, "about to call run_synth() or run_multiple_synths() with %ld events\n", nevents); */
-/* } */
-//ok so here it does all of the action...I might be wrong, but it seems to me that it calls run_synth on both the note_on event and the note_off
-//almost so it loops over time, and if note is pressed it set note_on as current_event, and so on. what do you mean by note is pressed?
-//it generates the event from the args I thought? so it looks like then it starts it set event to note_on, then it loops while there is that
-//condition, and it stops then. right...so what we don't know from this source is how to deal with the situation when there are two
-//note_on events overlapping? right, so ideally if plugin can work such way, it can just receive notes and generate complete soundwave with all samples playing at the same time, but if not - most likely you will have to load several such dssi hosts and have it sort of on different channels and then merge output from each plugin into one wave. I doubt the second would be necessary seems much more likely that the plugins are ready to received
-//multiple events simultaneously...I guess what is unclear to me is what should be used for the nframes variable, ohhhhh I see,
-//so it just is going through the midi file, and each event it sees it sends to plugin + nframes for the difference in frames between the two events? maybe the plugin will have to keep a state to know how many note_on and note_off events are currently active? yeah so in midi it's note_on\off pairs which should be processed. as for plugin - it should, but i doubt it does that, need to check plugins code, i think they all so simple they supposed to work in single note mode. well it's a bit confusing because I know for a fact that soundfonts are that simple, they are basically just a sample and little more data, and that fluidsynth+timidity have to create a virtual synth around all of that, but I think the dssi plugins are a bit more sophisticated...should we look at the plugin code? xsynth or something? yep
+// {{{ original
+// /* Instead of creating an alsa midi input, we fill in two events
+// * note-on and note-off */
//
-//ohh i see it now, it's not event actually to plugin, just a state which is sent every time we call run_synth, so plugin knows with notes
-//are currently pressed. that's good, right? yeah looks So
-//whew, ok so we send a new state every time there's a new event? no we keep iterating over time and every time we need to know which midi notes are pressed, then we construct this "current_event" buffer with events and send them all together to this plugin. right...so when is it that we need to know which notes are pressed? is that only when there's a new event? or is that every set duration of time yes every time we call run_synth, at it's called for every sound pressure sample. 44100 times per second. run synth is called 44100 times per second? well it's executed 44100 times to generate one second of audio output. wow ok
-//what seems to be the easiest way to proceed from here? so need to parse midi file to construct list of events, and then write a loop over time so we could know which notes are pressed, so can generate events for dssi. do you think we need C to parse the midi file? well unless thre is for example perl dssi host it has to be C because need to execute plugin. do you think it might be easier to alter this code and create perl handles for it with something like swig? not really, C code will be easier to write, also you have several projects to choose code from for midi parsing. right...so before we look at that, should we look one last time at dssi to see exactly what the run_synth function takes for args? sure
-
-
-
- if (descriptor->run_synth) {
- descriptor->run_synth(instanceHandle,
- nframes,
- current_event,
- nevents);
- } else if (descriptor->run_multiple_synths) {
- descriptor->run_multiple_synths(1,
- &instanceHandle,
- nframes,
- &current_event,
- &nevents);
- }
-
- /* Interleaving for libsndfile. */
- float sf_output[nchannels * nframes];
- for (int i = 0; i < nframes; i++) {
- /* First, write all the obvious channels */
- for (int j = 0; j < min(outs, nchannels); j++) {
- /* If outs > nchannels, we *could* do mixing - but don't. */
- sf_output[i * nchannels + j] = pluginOutputBuffers[j][i];
- }
- /* Then, if user wants *more* output channels than there are
- * audio output ports (ie outs < nchannels), copy the last audio
- * out to all the remaining channels. If outs >= nchannels, this
- * loop is never entered. */
- for (int j = outs; j < nchannels; j++) {
- sf_output[i * nchannels + j] = pluginOutputBuffers[outs - 1][i];
- }
- }
-
- if (clip) {
- for (int i = 0; i < nframes * nchannels; i++) {
- if (!finite(sf_output[i])) {
- if (!have_warned) {
- have_warned = 1;
- fprintf(stderr,
- "%s: Warning: clipping NaN or Inf in synthesized data\n",
- my_name);
- }
- if (sf_output[i] < 0.0f) {
- sf_output[i] = -1.0f;
- } else {
- sf_output[i] = 1.0f;
- }
- } else {
- if (sf_output[i] < -1.0f) {
- if (!have_warned) {
- have_warned = 1;
- fprintf(stderr,
- "%s: Warning: clipping out-of-bounds value in synthesized data\n",
- my_name);
- }
- sf_output[i] = -1.0f;
- } else if (sf_output[i] > 1.0f) {
- if (!have_warned) {
- have_warned = 1;
- fprintf(stderr,
- "%s: Warning: clipping out-of-bounds value in synthesized data\n",
- my_name);
- }
- sf_output[i] = 1.0f;
- }
- }
- }
- } else {
- for (int i = 0; i < nframes * nchannels; i++) {
- if (!finite(sf_output[i])) {
- fprintf(stderr, "%s: Error: NaN or Inf in synthesized data\n",
- my_name);
- exit(1);
- }
- if (sf_output[i] > 1.0f
- || sf_output[i] < -1.0f) {
- fprintf(stderr, "%s: Error: sample data out of bounds\n",
- my_name);
- exit(1);
- }
- }
- }
+// snd_seq_event_t on_event, off_event, *current_event; // snd_seq_event_t's so we just need to fill array of those for curently pressed notes and send them. and we can be sure it's a simple array, not some linked list or something? yes because if it were the linked list, it wouldn't have the length passed with it? yep got it
+// on_event.type = SND_SEQ_EVENT_NOTEON;
+// on_event.data.note.channel = 0;
+// on_event.data.note.note = midi_note;
+// on_event.data.note.velocity = midi_velocity;
+// on_event.time.tick = 0;
+//
+// off_event.type = SND_SEQ_EVENT_NOTEOFF;
+// off_event.data.note.channel = 0;
+// off_event.data.note.note = midi_note;
+// off_event.data.note.off_velocity = midi_velocity;
+// off_event.time.tick = 0;
+//
+// /* Generate the data: send an on-event, wait, send an off-event,
+// wait for release tail to die */
+// total_written = 0;
+// int finished = 0;
+// unsigned long nevents;
+// //here's the while loop I guess, what should we do about this condition "finished"? we will just remove it all. need to move body for this while into separate function, so we could supply it as callback hmm maybe we should move it all to a separate file, so that this one can be for processing command line args? yeah
+// while (!finished) {
+// if (total_written == 0) {
+// current_event = &on_event; //so this is just putting one in, but that's because it's the first maybe? yes so if there is only one element you can just create a pointer from it and tha't it. but if you have two or more you have to arrange them sequentually in memory, like array. I see what threw me off...ohh because this thing only makes a one note recording...got it
+////well should we check dssi.h just to be sure, and to look at how current_event array needs to be made? no need array is of
+// nevents = 1;
+// } else if (total_written >= length && total_written < length + nframes) {// this condition
+// current_event = &off_event;
+// nevents = 1;
+// } else {
+// current_event = NULL;
+// nevents = 0;
+// }
+//
+///* if (DEBUG) { */
+///* fprintf(stderr, "about to call run_synth() or run_multiple_synths() with %ld events\n", nevents); */
+///* } */
+//
+// what was happening with this? do you think the wrong file was being edited at some point? could be
+// if (descriptor->run_synth) {
+// descriptor->run_synth(instanceHandle,
+// nframes,
+// current_event,
+// nevents);
+// } else if (descriptor->run_multiple_synths) {
+// descriptor->run_multiple_synths(1,
+// &instanceHandle,
+// nframes,
+// &current_event,
+// &nevents);
+// }
+//how much do we want to take out? whole while loop, it's still inside it i think
- /* Write the audio */
- if ((items_written = sf_writef_float(outfile,
- sf_output,
- nframes)) != nframes) {
- fprintf(stderr, "%s: Error: can't write data to output file %s\n",
- my_name, output_file);
- fprintf(stderr, "%s: %s\n", my_name, sf_strerror(outfile));
- return 1;
- }
-
- total_written += items_written;
- if (release_tail >= 0) {
- if (total_written > length + release_tail) {
- finished = 1;
- }
- } else {
- if (total_written > length
- && is_silent(sf_output, nframes * nchannels)) {
- finished = 1;
- } else if (total_written > MAX_LENGTH * sample_rate) {
- /* The default sineshaper patch never releases, after a note-off,
- * to silence. So truncate. This is sineshaper 0.3.0 (so maybe it's
- * different in the new version) and here I mean the default
- * patch as returned by the get_port_default() function, not the
- * default set by the sineshaper UI.
- */
- finished = 1;
- fprintf(stderr, "%s: Warning: truncating after writing %d frames\n",
- my_name, total_written);
- }
- }
- }
+// /* Interleaving for libsndfile. */
+// float sf_output[nchannels * nframes];
+// for (int i = 0; i < nframes; i++) {
+// /* First, write all the obvious channels */
+// for (int j = 0; j < min(outs, nchannels); j++) {
+// /* If outs > nchannels, we *could* do mixing - but don't. */
+// sf_output[i * nchannels + j] = pluginOutputBuffers[j][i];
+// }
+// /* Then, if user wants *more* output channels than there are
+// * audio output ports (ie outs < nchannels), copy the last audio
+// * out to all the remaining channels. If outs >= nchannels, this
+// * loop is never entered. */
+// for (int j = outs; j < nchannels; j++) {
+// sf_output[i * nchannels + j] = pluginOutputBuffers[outs - 1][i];
+// }
+// }
+//
+// if (clip) {
+// for (int i = 0; i < nframes * nchannels; i++) {
+// if (!finite(sf_output[i])) {
+// if (!have_warned) {
+// have_warned = 1;
+// fprintf(stderr,
+// "%s: Warning: clipping NaN or Inf in synthesized data\n",
+// my_name);
+// }
+// if (sf_output[i] < 0.0f) {
+// sf_output[i] = -1.0f;
+// } else {
+// sf_output[i] = 1.0f;
+// }
+// } else {
+// if (sf_output[i] < -1.0f) {
+// if (!have_warned) {
+// have_warned = 1;
+// fprintf(stderr,
+// "%s: Warning: clipping out-of-bounds value in synthesized data\n",
+// my_name);
+// }
+// sf_output[i] = -1.0f;
+// } else if (sf_output[i] > 1.0f) {
+// if (!have_warned) {
+// have_warned = 1;
+// fprintf(stderr,
+// "%s: Warning: clipping out-of-bounds value in synthesized data\n",
+// my_name);
+// }
+// sf_output[i] = 1.0f;
+// }
+// }
+// }
+// } else {
+// for (int i = 0; i < nframes * nchannels; i++) {
+// if (!finite(sf_output[i])) {
+// fprintf(stderr, "%s: Error: NaN or Inf in synthesized data\n",
+// my_name);
+// exit(1);
+// }
+// if (sf_output[i] > 1.0f
+// || sf_output[i] < -1.0f) {
+// fprintf(stderr, "%s: Error: sample data out of bounds\n",
+// my_name);
+// exit(1);
+// }
+// }
+// }
+//
+// /* Write the audio */
+// if ((items_written = sf_writef_float(outfile,
+// sf_output,
+// nframes)) != nframes) {
+// fprintf(stderr, "%s: Error: can't write data to output file %s\n",
+// my_name, output_file);
+// fprintf(stderr, "%s: %s\n", my_name, sf_strerror(outfile));
+// return 1;
+// }
+//
+// total_written += items_written;
+// if (release_tail >= 0) {
+// if (total_written > length + release_tail) {
+// finished = 1;
+// }
+// } else {
+// if (total_written > length
+// && is_silent(sf_output, nframes * nchannels)) {
+// finished = 1;
+// } else if (total_written > MAX_LENGTH * sample_rate) {
+// /* The default sineshaper patch never releases, after a note-off,
+// * to silence. So truncate. This is sineshaper 0.3.0 (so maybe it's
+// * different in the new version) and here I mean the default
+// * patch as returned by the get_port_default() function, not the
+// * default set by the sineshaper UI.
+// */
+// finished = 1;
+// fprintf(stderr, "%s: Warning: truncating after writing %d frames\n",
+// my_name, total_written);
+// }
+// }
+// }
+// }}}
+ ladspa_run_synth(); //so all of the logic is in the other file now? yes good
fprintf(stdout, "%s: Wrote %d frames to %s\n",
my_name, total_written, output_file);
diff --git a/src/cli-dssi-host.h b/src/cli-dssi-host.h
index d8a7a15..3f6d0cc 100644
--- a/src/cli-dssi-host.h
+++ b/src/cli-dssi-host.h
@@ -65,9 +65,47 @@
#include <libgen.h>
+
+extern char *midi_filename;
+extern const DSSI_Descriptor *descriptor;
+extern LADSPA_Handle instanceHandle;
+extern SNDFILE *outfile;
+extern char *output_file;
+extern int clip;
+extern int have_warned;
+extern int nchannels;
+extern DSSI_Descriptor_Function descfn;
+extern void *pluginObject;
+extern SF_INFO outsfinfo;
+extern char **configure_key;
+extern char **configure_val;
+extern char *directory;
+extern char *dllName;
+extern char *label;
+extern char *projectDirectory;
+extern int in, out, controlIn, controlOut;
+extern int ins, outs, controlIns, controlOuts;
+extern int midi_velocity;
+extern int midi_note;
+extern int bank;
+extern int program_no;
+extern int nkeys;
+extern size_t length;
+extern size_t release_tail;
+extern size_t nframes;
+extern size_t total_written;
+extern size_t items_written;
+extern float **pluginInputBuffers;
+extern float **pluginOutputBuffers;
+extern float *pluginControlIns;
+extern float *pluginControlOuts;
+
+//awesome, worked, right? yeah
+//so what is extern doing? basically it says that there is a variable, but doesn't allocate it by itself, so same varable can be shared between two code from different object files. and are extern definitions like this usually kept in the header files? yes ok
+char *my_name;
+#ifdef CLI_FUNCS
static float sample_rate;
static int verbose = 0;
-char *my_name;
LADSPA_Data get_port_random(const LADSPA_Descriptor *plugin, int port)
{
@@ -161,6 +199,7 @@ LADSPA_Data get_port_default(const LADSPA_Descriptor *plugin, int port)
+
char *
load(const char *dllName, void **dll, int quiet) /* returns directory where dll found */
{
@@ -281,6 +320,7 @@ parse_keyval(char *input, char sep, char **key, char **val) {
*val = NULL;
}
}
+#endif
typedef enum {
from_stdin,
diff --git a/src/cli-dssi-host.o b/src/cli-dssi-host.o
index 43e65a1..d6e4f08 100644
--- a/src/cli-dssi-host.o
+++ b/src/cli-dssi-host.o
Binary files differ
diff --git a/src/dssi.h.txt b/src/dssi.h.txt
new file mode 100644
index 0000000..fe4a20b
--- /dev/null
+++ b/src/dssi.h.txt
@@ -0,0 +1,426 @@
+/* -*- c-basic-offset: 4 -*- */
+
+/* dssi.h
+
+ DSSI version 1.0
+ Copyright (c) 2004, 2009 Chris Cannam, Steve Harris and Sean Bolton
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation; either version 2.1 of
+ the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ MA 02110-1301 USA
+*/
+
+#ifndef DSSI_INCLUDED
+#define DSSI_INCLUDED
+
+#include <ladspa.h>
+#include <alsa/seq_event.h>
+
+#define DSSI_VERSION "1.0"
+#define DSSI_VERSION_MAJOR 1
+#define DSSI_VERSION_MINOR 0
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ There is a need for an API that supports hosted MIDI soft synths
+ with GUIs in Linux audio applications. In time the GMPI initiative
+ should comprehensively address this need, but the requirement for
+ Linux applications to be able to support simple hosted synths is
+ here now, and GMPI is not. This proposal (the "DSSI Soft Synth
+ Interface" or DSSI, pronounced "dizzy") aims to provide a simple
+ solution in a way that we hope will prove complete and compelling
+ enough to support now, yet not so compelling as to supplant GMPI or
+ any other comprehensive future proposal.
+
+ For simplicity and familiarity, this API is based as far as
+ possible on existing work -- the LADSPA plugin API for control
+ values and audio processing, and the ALSA sequencer event types for
+ MIDI event communication. The GUI part of the proposal is quite
+ new, but may also be applicable retroactively to LADSPA plugins
+ that do not otherwise support this synth interface.
+*/
+
+typedef struct _DSSI_Program_Descriptor {
+
+ /** Bank number for this program. Note that DSSI does not support
+ MIDI-style separation of bank LSB and MSB values. There is no
+ restriction on the set of available banks: the numbers do not
+ need to be contiguous, there does not need to be a bank 0, etc. */
+ unsigned long Bank;
+
+ /** Program number (unique within its bank) for this program.
+ There is no restriction on the set of available programs: the
+ numbers do not need to be contiguous, there does not need to
+ be a program 0, etc. */
+ unsigned long Program;
+
+ /** Name of the program. */
+ const char * Name;
+
+} DSSI_Program_Descriptor;
+
+
+typedef struct _DSSI_Descriptor {
+
+ /**
+ * DSSI_API_Version
+ *
+ * This member indicates the DSSI API level used by this plugin.
+ * If we're lucky, this will never be needed. For now all plugins
+ * must set it to 1.
+ */
+ int DSSI_API_Version;
+
+ /**
+ * LADSPA_Plugin
+ *
+ * A DSSI synth plugin consists of a LADSPA plugin plus an
+ * additional framework for controlling program settings and
+ * transmitting MIDI events. A plugin must fully implement the
+ * LADSPA descriptor fields as well as the required LADSPA
+ * functions including instantiate() and (de)activate(). It
+ * should also implement run(), with the same behaviour as if
+ * run_synth() (below) were called with no synth events.
+ *
+ * In order to instantiate a synth the host calls the LADSPA
+ * instantiate function, passing in this LADSPA_Descriptor
+ * pointer. The returned LADSPA_Handle is used as the argument
+ * for the DSSI functions below as well as for the LADSPA ones.
+ */
+ const LADSPA_Descriptor *LADSPA_Plugin;
+
+ /**
+ * configure()
+ *
+ * This member is a function pointer that sends a piece of
+ * configuration data to the plugin. The key argument specifies
+ * some aspect of the synth's configuration that is to be changed,
+ * and the value argument specifies a new value for it. A plugin
+ * that does not require this facility at all may set this member
+ * to NULL.
+ *
+ * This call is intended to set some session-scoped aspect of a
+ * plugin's behaviour, for example to tell the plugin to load
+ * sample data from a particular file. The plugin should act
+ * immediately on the request. The call should return NULL on
+ * success, or an error string that may be shown to the user. The
+ * host will free the returned value after use if it is non-NULL.
+ *
+ * Calls to configure() are not automated as timed events.
+ * Instead, a host should remember the last value associated with
+ * each key passed to configure() during a given session for a
+ * given plugin instance, and should call configure() with the
+ * correct value for each key the next time it instantiates the
+ * "same" plugin instance, for example on reloading a project in
+ * which the plugin was used before. Plugins should note that a
+ * host may typically instantiate a plugin multiple times with the
+ * same configuration values, and should share data between
+ * instances where practical.
+ *
+ * Calling configure() completely invalidates the program and bank
+ * information last obtained from the plugin.
+ *
+ * Reserved and special key prefixes
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * The DSSI: prefix
+ * ----------------
+ * Configure keys starting with DSSI: are reserved for particular
+ * purposes documented in the DSSI specification. At the moment,
+ * there is one such key: DSSI:PROJECT_DIRECTORY. A host may call
+ * configure() passing this key and a directory path value. This
+ * indicates to the plugin and its UI that a directory at that
+ * path exists and may be used for project-local data. Plugins
+ * may wish to use the project directory as a fallback location
+ * when looking for other file data, or as a base for relative
+ * paths in other configuration values.
+ *
+ * The GLOBAL: prefix
+ * ------------------
+ * Configure keys starting with GLOBAL: may be used by the plugin
+ * and its UI for any purpose, but are treated specially by the
+ * host. When one of these keys is used in a configure OSC call
+ * from the plugin UI, the host makes the corresponding configure
+ * call (preserving the GLOBAL: prefix) not only to the target
+ * plugin but also to all other plugins in the same instance
+ * group, as well as their UIs. Note that if any instance
+ * returns non-NULL from configure to indicate error, the host
+ * may stop there (and the set of plugins on which configure has
+ * been called will thus depend on the host implementation).
+ * See also the configure OSC call documentation in RFC.txt.
+ */
+ char *(*configure)(LADSPA_Handle Instance,
+ const char *Key,
+ const char *Value);
+
+ #define DSSI_RESERVED_CONFIGURE_PREFIX "DSSI:"
+ #define DSSI_GLOBAL_CONFIGURE_PREFIX "GLOBAL:"
+ #define DSSI_PROJECT_DIRECTORY_KEY \
+ DSSI_RESERVED_CONFIGURE_PREFIX "PROJECT_DIRECTORY"
+
+ /**
+ * get_program()
+ *
+ * This member is a function pointer that provides a description
+ * of a program (named preset sound) available on this synth. A
+ * plugin that does not support programs at all should set this
+ * member to NULL.
+ *
+ * The Index argument is an index into the plugin's list of
+ * programs, not a program number as represented by the Program
+ * field of the DSSI_Program_Descriptor. (This distinction is
+ * needed to support synths that use non-contiguous program or
+ * bank numbers.)
+ *
+ * This function returns a DSSI_Program_Descriptor pointer that is
+ * guaranteed to be valid only until the next call to get_program,
+ * deactivate, or configure, on the same plugin instance. This
+ * function must return NULL if passed an Index argument out of
+ * range, so that the host can use it to query the number of
+ * programs as well as their properties.
+ */
+ const DSSI_Program_Descriptor *(*get_program)(LADSPA_Handle Instance,
+ unsigned long Index);
+
+ /**
+ * select_program()
+ *
+ * This member is a function pointer that selects a new program
+ * for this synth. The program change should take effect
+ * immediately at the start of the next run_synth() call. (This
+ * means that a host providing the capability of changing programs
+ * between any two notes on a track must vary the block size so as
+ * to place the program change at the right place. A host that
+ * wanted to avoid this would probably just instantiate a plugin
+ * for each program.)
+ *
+ * A plugin that does not support programs at all should set this
+ * member NULL. Plugins should ignore a select_program() call
+ * with an invalid bank or program.
+ *
+ * A plugin is not required to select any particular default
+ * program on activate(): it's the host's duty to set a program
+ * explicitly. The current program is invalidated by any call to
+ * configure().
+ *
+ * A plugin is permitted to re-write the values of its input
+ * control ports when select_program is called. The host should
+ * re-read the input control port values and update its own
+ * records appropriately. (This is the only circumstance in
+ * which a DSSI plugin is allowed to modify its own input ports.)
+ */
+ void (*select_program)(LADSPA_Handle Instance,
+ unsigned long Bank,
+ unsigned long Program);
+
+ /**
+ * get_midi_controller_for_port()
+ *
+ * This member is a function pointer that returns the MIDI
+ * controller number or NRPN that should be mapped to the given
+ * input control port. If the given port should not have any MIDI
+ * controller mapped to it, the function should return DSSI_NONE.
+ * The behaviour of this function is undefined if the given port
+ * number does not correspond to an input control port. A plugin
+ * that does not want MIDI controllers mapped to ports at all may
+ * set this member NULL.
+ *
+ * Correct values can be got using the macros DSSI_CC(num) and
+ * DSSI_NRPN(num) as appropriate, and values can be combined using
+ * bitwise OR: e.g. DSSI_CC(23) | DSSI_NRPN(1069) means the port
+ * should respond to CC #23 and NRPN #1069.
+ *
+ * The host is responsible for doing proper scaling from MIDI
+ * controller and NRPN value ranges to port ranges according to
+ * the plugin's LADSPA port hints. Hosts should not deliver
+ * through run_synth any MIDI controller events that have already
+ * been mapped to control port values.
+ *
+ * A plugin should not attempt to request mappings from
+ * controllers 0 or 32 (MIDI Bank Select MSB and LSB).
+ */
+ int (*get_midi_controller_for_port)(LADSPA_Handle Instance,
+ unsigned long Port);
+
+ /**
+ * run_synth()
+ *
+ * This member is a function pointer that runs a synth for a
+ * block. This is identical in function to the LADSPA run()
+ * function, except that it also supplies events to the synth.
+ *
+ * A plugin may provide this function, run_multiple_synths() (see
+ * below), both, or neither (if it is not in fact a synth). A
+ * plugin that does not provide this function must set this member
+ * to NULL. Authors of synth plugins are encouraged to provide
+ * this function if at all possible.
+ *
+ * The Events pointer points to a block of EventCount ALSA
+ * sequencer events, which is used to communicate MIDI and related
+ * events to the synth. Each event is timestamped relative to the
+ * start of the block, (mis)using the ALSA "tick time" field as a
+ * frame count. The host is responsible for ensuring that events
+ * with differing timestamps are already ordered by time.
+ *
+ * See also the notes on activation, port connection etc in
+ * ladpsa.h, in the context of the LADSPA run() function.
+ *
+ * Note Events
+ * ~~~~~~~~~~~
+ * There are two minor requirements aimed at making the plugin
+ * writer's life as simple as possible:
+ *
+ * 1. A host must never send events of type SND_SEQ_EVENT_NOTE.
+ * Notes should always be sent as separate SND_SEQ_EVENT_NOTE_ON
+ * and NOTE_OFF events. A plugin should discard any one-point
+ * NOTE events it sees.
+ *
+ * 2. A host must not attempt to switch notes off by sending
+ * zero-velocity NOTE_ON events. It should always send true
+ * NOTE_OFFs. It is the host's responsibility to remap events in
+ * cases where an external MIDI source has sent it zero-velocity
+ * NOTE_ONs.
+ *
+ * Bank and Program Events
+ * ~~~~~~~~~~~~~~~~~~~~~~~
+ * Hosts must map MIDI Bank Select MSB and LSB (0 and 32)
+ * controllers and MIDI Program Change events onto the banks and
+ * programs specified by the plugin, using the DSSI select_program
+ * call. No host should ever deliver a program change or bank
+ * select controller to a plugin via run_synth.
+ */
+ void (*run_synth)(LADSPA_Handle Instance,
+ unsigned long SampleCount,
+ snd_seq_event_t *Events,
+ unsigned long EventCount);
+
+ /**
+ * run_synth_adding()
+ *
+ * This member is a function pointer that runs an instance of a
+ * synth for a block, adding its outputs to the values already
+ * present at the output ports. This is provided for symmetry
+ * with LADSPA run_adding(), and is equally optional. A plugin
+ * that does not provide it must set this member to NULL.
+ */
+ void (*run_synth_adding)(LADSPA_Handle Instance,
+ unsigned long SampleCount,
+ snd_seq_event_t *Events,
+ unsigned long EventCount);
+
+ /**
+ * run_multiple_synths()
+ *
+ * This member is a function pointer that runs multiple synth
+ * instances for a block. This is very similar to run_synth(),
+ * except that Instances, Events, and EventCounts each point to
+ * arrays that hold the LADSPA handles, event buffers, and
+ * event counts for each of InstanceCount instances. That is,
+ * Instances points to an array of InstanceCount pointers to
+ * DSSI plugin instantiations, Events points to an array of
+ * pointers to each instantiation's respective event list, and
+ * EventCounts points to an array containing each instantiation's
+ * respective event count.
+ *
+ * A host using this function must guarantee that ALL active
+ * instances of the plugin are represented in each call to the
+ * function -- that is, a host may not call run_multiple_synths()
+ * for some instances of a given plugin and then call run_synth()
+ * as well for others. 'All .. instances of the plugin' means
+ * every instance sharing the same LADSPA label and shared object
+ * (*.so) file (rather than every instance sharing the same *.so).
+ * 'Active' means any instance for which activate() has been called
+ * but deactivate() has not.
+ *
+ * A plugin may provide this function, run_synths() (see above),
+ * both, or neither (if it not in fact a synth). A plugin that
+ * does not provide this function must set this member to NULL.
+ * Plugin authors implementing run_multiple_synths are strongly
+ * encouraged to implement run_synth as well if at all possible,
+ * to aid simplistic hosts, even where it would be less efficient
+ * to use it.
+ */
+ void (*run_multiple_synths)(unsigned long InstanceCount,
+ LADSPA_Handle *Instances,
+ unsigned long SampleCount,
+ snd_seq_event_t **Events,
+ unsigned long *EventCounts);
+
+ /**
+ * run_multiple_synths_adding()
+ *
+ * This member is a function pointer that runs multiple synth
+ * instances for a block, adding each synth's outputs to the
+ * values already present at the output ports. This is provided
+ * for symmetry with both the DSSI run_multiple_synths() and LADSPA
+ * run_adding() functions, and is equally optional. A plugin
+ * that does not provide it must set this member to NULL.
+ */
+ void (*run_multiple_synths_adding)(unsigned long InstanceCount,
+ LADSPA_Handle *Instances,
+ unsigned long SampleCount,
+ snd_seq_event_t **Events,
+ unsigned long *EventCounts);
+} DSSI_Descriptor;
+
+/**
+ * DSSI supports a plugin discovery method similar to that of LADSPA:
+ *
+ * - DSSI hosts may wish to locate DSSI plugin shared object files by
+ * searching the paths contained in the DSSI_PATH and LADSPA_PATH
+ * environment variables, if they are present. Both are expected
+ * to be colon-separated lists of directories to be searched (in
+ * order), and DSSI_PATH should be searched first if both variables
+ * are set.
+ *
+ * - Each shared object file containing DSSI plugins must include a
+ * function dssi_descriptor(), with the following function prototype
+ * and C-style linkage. Hosts may enumerate the plugin types
+ * available in the shared object file by repeatedly calling
+ * this function with successive Index values (beginning from 0),
+ * until a return value of NULL indicates no more plugin types are
+ * available. Each non-NULL return is the DSSI_Descriptor
+ * of a distinct plugin type.
+ */
+
+const DSSI_Descriptor *dssi_descriptor(unsigned long Index);
+
+typedef const DSSI_Descriptor *(*DSSI_Descriptor_Function)(unsigned long Index);
+
+/*
+ * Macros to specify particular MIDI controllers in return values from
+ * get_midi_controller_for_port()
+ */
+
+#define DSSI_CC_BITS 0x20000000
+#define DSSI_NRPN_BITS 0x40000000
+
+#define DSSI_NONE -1
+#define DSSI_CONTROLLER_IS_SET(n) (DSSI_NONE != (n))
+
+#define DSSI_CC(n) (DSSI_CC_BITS | (n))
+#define DSSI_IS_CC(n) (DSSI_CC_BITS & (n))
+#define DSSI_CC_NUMBER(n) ((n) & 0x7f)
+
+#define DSSI_NRPN(n) (DSSI_NRPN_BITS | ((n) << 7))
+#define DSSI_IS_NRPN(n) (DSSI_NRPN_BITS & (n))
+#define DSSI_NRPN_NUMBER(n) (((n) >> 7) & 0x3fff)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DSSI_INCLUDED */
diff --git a/src/example.mid b/src/example.mid
new file mode 100644
index 0000000..a60f5f2
--- /dev/null
+++ b/src/example.mid
Binary files differ
diff --git a/src/ladspa_run_synth.c b/src/ladspa_run_synth.c
new file mode 100644
index 0000000..5265e16
--- /dev/null
+++ b/src/ladspa_run_synth.c
@@ -0,0 +1,174 @@
+#include "cli-dssi-host.h"
+#include "midi/midi_loader.h"
+
+ /* Instead of creating an alsa midi input, we fill in two events
+ * note-on and note-off */
+inline int
+min(int x, int y) {
+ return (x < y) ? x : y;
+}
+//is there any way to test a single event in the event table from here? hmm not sure
+
+void ladspa_run_sample_callback(event_table_t *event_table, void *userdata){
+//so something weird with nframes we pass, a bit strange code in trivial_synth too, I thought that run_synth need number of frames to calulate, but it seems it is multiplying number of events and number of frames to calulate. need to check documentation about to to actually run this thing. right trivial_synth is supplied as an example from the people who wrote dssi, most likely it's cli-dssi-host that is the source of the confusion b utc ould believe
+//what if we set the number of frames to a fixed number, did that work? yes already tried that, wo rk partially, only with on_event. so i guess only thing left to check is to supply on_event and change only one field like note in it with data from event_table, just to find out what is going on. well one thing, not sure if this is the best, but I could generate a much simpler midi file for testing purposes, with two notes, or do you think that's a waste? well it should work too, checking it here will be just faster
+//well one quick fix we can try to run, overwise need to check it all again
+ snd_seq_event_t on_event, off_event, *current_event;
+ on_event.type = SND_SEQ_EVENT_NOTEON;
+ on_event.data.note.channel = 0;
+ on_event.data.note.note = 2 ;//midi_note;
+ on_event.data.note.velocity = 64;// midi_velocity;
+ on_event.time.tick = 0;
+
+ off_event.type = SND_SEQ_EVENT_NOTEOFF;
+ off_event.data.note.channel = 0;
+ off_event.data.note.note = midi_note;
+ off_event.data.note.off_velocity = midi_velocity;
+ off_event.time.tick = 0;
+if(event_table->length >=1){
+ //on_event.data.note.note = event_table->events->data.note.note;
+ //on_event.data.note.velocity = event_table->events->data.note.velocity;
+}// nope i removed those changes, should be correct notes
+ nframes = event_table->nframes_since_last;
+ nframes = nframes > 0 ? nframes : 1;
+ for (int i = 0; i < outs; i++) {
+ pluginOutputBuffers[i] = (float *)realloc(pluginOutputBuffers[i], nframes * sizeof(float)); // yeah here it is, small buffer also nframes is a size_t, that would limit it? or not really not really ok so that can get pretty big? ye2^32
+ memset(pluginOutputBuffers[i], 0, nframes * sizeof(float));
+}
+ connect_ports();
+//should we try exiting right after runsynth? or is there not much code afterwards?
+
+//nframes = event_table->nframes_since_last;
+
+ if (descriptor->run_synth) {
+ descriptor->run_synth(instanceHandle,
+ nframes,
+ event_table->events,
+ event_table->length
+ );
+/*if(event_table->events){
+printf("on_event: ");
+print_snd_seq_event(&on_event);
+printf("event_table: ");
+print_snd_seq_event(event_table->events);
+}*/
+ } else if (descriptor->run_multiple_synths) {
+ descriptor->run_multiple_synths(1,
+ &instanceHandle,
+ // event_table->nframes_since_last,
+ nframes,
+ &event_table->events,
+ &event_table->length);
+ }
+//so we need to test it now? yes
+ /* Interleaving for libsndfile. */
+ float sf_output[nchannels * nframes];
+ for (int i = 0; i < nframes; i++) {
+ /* First, write all the obvious channels */
+ for (int j = 0; j < min(outs, nchannels); j++) {
+ /* If outs > nchannels, we *could* do mixing - but don't. */
+ sf_output[i * nchannels + j] = pluginOutputBuffers[j][i];
+ }
+ /* Then, if user wants *more* output channels than there are
+ * audio output ports (ie outs < nchannels), copy the last audio
+ * out to all the remaining channels. If outs >= nchannels, this
+ * loop is never entered. */
+ for (int j = outs; j < nchannels; j++) {
+ sf_output[i * nchannels + j] = pluginOutputBuffers[outs - 1][i];
+ }
+ }
+//clip = 1; // FIXME
+ if (clip) {
+ for (int i = 0; i < nframes * nchannels; i++) {
+ if (!finite(sf_output[i])) {
+ if (!have_warned) {
+ have_warned = 1;
+ fprintf(stderr,
+ "%s: Warning: clipping NaN or Inf in synthesized data\n",
+ my_name);
+ }
+ if (sf_output[i] < 0.0f) {
+ sf_output[i] = -1.0f;
+ } else {
+ sf_output[i] = 1.0f;
+ }
+ } else {
+ if (sf_output[i] < -1.0f) {
+ if (!have_warned) {
+ have_warned = 1;
+ fprintf(stderr,
+ "%s: Warning: clipping out-of-bounds value in synthesized data\n",
+ my_name);
+ }
+ sf_output[i] = -1.0f;
+ } else if (sf_output[i] > 1.0f) {
+ if (!have_warned) {
+ have_warned = 1;
+ fprintf(stderr,
+ "%s: Warning: clipping out-of-bounds value in synthesized data\n",
+ my_name);
+ }
+ sf_output[i] = 1.0f;
+ }
+ }
+ }
+ } else {
+ for (int i = 0; i < nframes * nchannels; i++) {
+ if (!finite(sf_output[i])) {
+ fprintf(stderr, "%s: Error: NaN or Inf in synthesized data\n",
+ my_name);
+ exit(1);
+ }
+ if (sf_output[i] > 1.0f
+ || sf_output[i] < -1.0f) {
+ fprintf(stderr, "%s: Error: sample data out of bounds\n",
+ my_name);
+ exit(1);
+ }
+ }
+ }
+
+ /* Write the audio */
+ if ((items_written = sf_writef_float(outfile,
+ sf_output,
+ nframes)) != nframes) {
+ fprintf(stderr, "%s: Error: can't write data to output file %s\n",
+ my_name, output_file);
+ fprintf(stderr, "%s: %s\n", my_name, sf_strerror(outfile));
+ return;
+ }
+
+/* total_written += items_written;
+ if (release_tail >= 0) {
+ if (total_written > length + release_tail) {
+ finished = 1;
+ }
+ } else {
+ if (total_written > length
+ && is_silent(sf_output, nframes * nchannels)) {
+ finished = 1;
+ } else if (total_written > MAX_LENGTH * sample_rate) {
+ / * The default sineshaper patch never releases, after a note-off,
+ * to silence. So truncate. This is sineshaper 0.3.0 (so maybe it's
+ * different in the new version) and here I mean the default
+ * patch as returned by the get_port_default() function, not the
+ * default set by the sineshaper UI.
+ /
+ finished = 1;
+ fprintf(stderr, "%s: Warning: truncating after writing %d frames\n",
+ my_name, total_written);
+ }
+ }
+ }
+*/
+}
+
+void ladspa_run_synth(void){
+
+// ctx.player = player;
+// ctx.callback = callback;
+// ctx.callback_userdata = callback_userdata;
+// ctx.track = player->track[i];// here. so i guess need to make a structure and put player, track pointers into it.
+ load_midi_file(midi_filename, ladspa_run_sample_callback, NULL);
+}
+
diff --git a/src/ladspa_run_synth.h b/src/ladspa_run_synth.h
new file mode 100644
index 0000000..e67a49c
--- /dev/null
+++ b/src/ladspa_run_synth.h
@@ -0,0 +1,6 @@
+#ifndef LADSPA_RUN_SYNTH
+#define LADSPA_RUN_SYNTH
+
+void ladspa_run_synth(void);
+
+#endif
diff --git a/src/ladspa_run_synth.o b/src/ladspa_run_synth.o
new file mode 100644
index 0000000..0ce78af
--- /dev/null
+++ b/src/ladspa_run_synth.o
Binary files differ
diff --git a/src/midi/.deps/custom.Plo b/src/midi/.deps/custom.Plo
new file mode 100644
index 0000000..a46609d
--- /dev/null
+++ b/src/midi/.deps/custom.Plo
@@ -0,0 +1,141 @@
+custom.lo: custom.c /usr/include/stdc-predef.h fluidsynth_priv.h custom.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdint.h \
+ /usr/include/stdint.h /usr/include/features.h /usr/include/sys/cdefs.h \
+ /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
+ /usr/include/gnu/stubs-64.h /usr/include/bits/wchar.h \
+ /usr/include/stdio.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stddef.h \
+ /usr/include/bits/types.h /usr/include/bits/typesizes.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdarg.h \
+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdio.h /usr/include/stdlib.h \
+ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
+ /usr/include/endian.h /usr/include/bits/endian.h \
+ /usr/include/bits/byteswap.h /usr/include/bits/byteswap-16.h \
+ /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \
+ /usr/include/bits/select.h /usr/include/bits/sigset.h \
+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
+ /usr/include/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \
+ /usr/include/string.h /usr/include/xlocale.h /usr/include/bits/string.h \
+ /usr/include/bits/string2.h /usr/include/unistd.h \
+ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
+ /usr/include/bits/confname.h /usr/include/getopt.h \
+ /usr/include/sys/stat.h /usr/include/bits/stat.h fluid_midi.h \
+ fluid_list.h /usr/include/sndfile.h /usr/include/ladspa.h \
+ /usr/include/dssi.h /usr/include/alsa/seq_event.h
+
+/usr/include/stdc-predef.h:
+
+fluidsynth_priv.h:
+
+custom.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/features.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/include/gnu/stubs-64.h:
+
+/usr/include/bits/wchar.h:
+
+/usr/include/stdio.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stddef.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdarg.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/bits/waitflags.h:
+
+/usr/include/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/bits/endian.h:
+
+/usr/include/bits/byteswap.h:
+
+/usr/include/bits/byteswap-16.h:
+
+/usr/include/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/sys/select.h:
+
+/usr/include/bits/select.h:
+
+/usr/include/bits/sigset.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/sys/sysmacros.h:
+
+/usr/include/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/bits/stdlib-bsearch.h:
+
+/usr/include/bits/stdlib-float.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/bits/string.h:
+
+/usr/include/bits/string2.h:
+
+/usr/include/unistd.h:
+
+/usr/include/bits/posix_opt.h:
+
+/usr/include/bits/environments.h:
+
+/usr/include/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/sys/stat.h:
+
+/usr/include/bits/stat.h:
+
+fluid_midi.h:
+
+fluid_list.h:
+
+/usr/include/sndfile.h:
+
+/usr/include/ladspa.h:
+
+/usr/include/dssi.h:
+
+/usr/include/alsa/seq_event.h:
diff --git a/src/midi/.deps/fluid_list.Plo b/src/midi/.deps/fluid_list.Plo
new file mode 100644
index 0000000..5b5edf9
--- /dev/null
+++ b/src/midi/.deps/fluid_list.Plo
@@ -0,0 +1,144 @@
+fluid_list.lo: fluid_list.c /usr/include/stdc-predef.h fluid_list.h \
+ fluidsynth_priv.h fluid_midi_custom.h midi_loader.h fluid_midi.h \
+ /usr/include/stdlib.h /usr/include/features.h /usr/include/sys/cdefs.h \
+ /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
+ /usr/include/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stddef.h \
+ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
+ /usr/include/endian.h /usr/include/bits/endian.h \
+ /usr/include/bits/byteswap.h /usr/include/bits/types.h \
+ /usr/include/bits/typesizes.h /usr/include/bits/byteswap-16.h \
+ /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \
+ /usr/include/bits/select.h /usr/include/bits/sigset.h \
+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
+ /usr/include/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \
+ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \
+ /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdarg.h \
+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdio.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdint.h \
+ /usr/include/stdint.h /usr/include/bits/wchar.h /usr/include/sndfile.h \
+ /usr/include/string.h /usr/include/xlocale.h /usr/include/bits/string.h \
+ /usr/include/bits/string2.h /usr/include/ladspa.h /usr/include/dssi.h \
+ /usr/include/alsa/seq_event.h /usr/include/unistd.h \
+ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
+ /usr/include/bits/confname.h /usr/include/getopt.h \
+ /usr/include/sys/stat.h /usr/include/bits/stat.h
+
+/usr/include/stdc-predef.h:
+
+fluid_list.h:
+
+fluidsynth_priv.h:
+
+fluid_midi_custom.h:
+
+midi_loader.h:
+
+fluid_midi.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/features.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/include/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stddef.h:
+
+/usr/include/bits/waitflags.h:
+
+/usr/include/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/bits/endian.h:
+
+/usr/include/bits/byteswap.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/bits/byteswap-16.h:
+
+/usr/include/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/sys/select.h:
+
+/usr/include/bits/select.h:
+
+/usr/include/bits/sigset.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/sys/sysmacros.h:
+
+/usr/include/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/bits/stdlib-bsearch.h:
+
+/usr/include/bits/stdlib-float.h:
+
+/usr/include/stdio.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdarg.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/bits/wchar.h:
+
+/usr/include/sndfile.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/bits/string.h:
+
+/usr/include/bits/string2.h:
+
+/usr/include/ladspa.h:
+
+/usr/include/dssi.h:
+
+/usr/include/alsa/seq_event.h:
+
+/usr/include/unistd.h:
+
+/usr/include/bits/posix_opt.h:
+
+/usr/include/bits/environments.h:
+
+/usr/include/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/sys/stat.h:
+
+/usr/include/bits/stat.h:
diff --git a/src/midi/.deps/fluid_midi.Plo b/src/midi/.deps/fluid_midi.Plo
new file mode 100644
index 0000000..3de2838
--- /dev/null
+++ b/src/midi/.deps/fluid_midi.Plo
@@ -0,0 +1,165 @@
+fluid_midi.lo: fluid_midi.c /usr/include/stdc-predef.h fluid_midi.h \
+ fluidsynth_priv.h fluid_midi_custom.h midi_loader.h fluid_list.h \
+ /usr/include/sndfile.h /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \
+ /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stddef.h \
+ /usr/include/bits/types.h /usr/include/bits/typesizes.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdarg.h \
+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdio.h /usr/include/sys/types.h /usr/include/time.h \
+ /usr/include/endian.h /usr/include/bits/endian.h \
+ /usr/include/bits/byteswap.h /usr/include/bits/byteswap-16.h \
+ /usr/include/sys/select.h /usr/include/bits/select.h \
+ /usr/include/bits/sigset.h /usr/include/bits/time.h \
+ /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \
+ /usr/include/string.h /usr/include/xlocale.h /usr/include/bits/string.h \
+ /usr/include/bits/string2.h /usr/include/stdlib.h /usr/include/ladspa.h \
+ /usr/include/dssi.h /usr/include/alsa/seq_event.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdint.h \
+ /usr/include/stdint.h /usr/include/bits/wchar.h \
+ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
+ /usr/include/alloca.h /usr/include/bits/stdlib-bsearch.h \
+ /usr/include/bits/stdlib-float.h /usr/include/unistd.h \
+ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
+ /usr/include/bits/confname.h /usr/include/getopt.h \
+ /usr/include/sys/stat.h /usr/include/bits/stat.h /usr/include/math.h \
+ /usr/include/bits/huge_val.h /usr/include/bits/huge_valf.h \
+ /usr/include/bits/huge_vall.h /usr/include/bits/inf.h \
+ /usr/include/bits/nan.h /usr/include/bits/mathdef.h \
+ /usr/include/bits/mathcalls.h /usr/include/bits/mathinline.h
+
+/usr/include/stdc-predef.h:
+
+fluid_midi.h:
+
+fluidsynth_priv.h:
+
+fluid_midi_custom.h:
+
+midi_loader.h:
+
+fluid_list.h:
+
+/usr/include/sndfile.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/include/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stddef.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdarg.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/include/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/endian.h:
+
+/usr/include/bits/endian.h:
+
+/usr/include/bits/byteswap.h:
+
+/usr/include/bits/byteswap-16.h:
+
+/usr/include/sys/select.h:
+
+/usr/include/bits/select.h:
+
+/usr/include/bits/sigset.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/sys/sysmacros.h:
+
+/usr/include/bits/pthreadtypes.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/bits/string.h:
+
+/usr/include/bits/string2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/ladspa.h:
+
+/usr/include/dssi.h:
+
+/usr/include/alsa/seq_event.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/bits/wchar.h:
+
+/usr/include/bits/waitflags.h:
+
+/usr/include/bits/waitstatus.h:
+
+/usr/include/alloca.h:
+
+/usr/include/bits/stdlib-bsearch.h:
+
+/usr/include/bits/stdlib-float.h:
+
+/usr/include/unistd.h:
+
+/usr/include/bits/posix_opt.h:
+
+/usr/include/bits/environments.h:
+
+/usr/include/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/sys/stat.h:
+
+/usr/include/bits/stat.h:
+
+/usr/include/math.h:
+
+/usr/include/bits/huge_val.h:
+
+/usr/include/bits/huge_valf.h:
+
+/usr/include/bits/huge_vall.h:
+
+/usr/include/bits/inf.h:
+
+/usr/include/bits/nan.h:
+
+/usr/include/bits/mathdef.h:
+
+/usr/include/bits/mathcalls.h:
+
+/usr/include/bits/mathinline.h:
diff --git a/src/midi/.deps/midi_loader.Plo b/src/midi/.deps/midi_loader.Plo
new file mode 100644
index 0000000..f6b91a3
--- /dev/null
+++ b/src/midi/.deps/midi_loader.Plo
@@ -0,0 +1,144 @@
+midi_loader.lo: midi_loader.c /usr/include/stdc-predef.h midi_loader.h \
+ fluid_list.h fluidsynth_priv.h fluid_midi_custom.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdint.h \
+ /usr/include/stdint.h /usr/include/features.h /usr/include/sys/cdefs.h \
+ /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
+ /usr/include/gnu/stubs-64.h /usr/include/bits/wchar.h \
+ /usr/include/stdio.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stddef.h \
+ /usr/include/bits/types.h /usr/include/bits/typesizes.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdarg.h \
+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdio.h /usr/include/stdlib.h \
+ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
+ /usr/include/endian.h /usr/include/bits/endian.h \
+ /usr/include/bits/byteswap.h /usr/include/bits/byteswap-16.h \
+ /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \
+ /usr/include/bits/select.h /usr/include/bits/sigset.h \
+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
+ /usr/include/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \
+ /usr/include/string.h /usr/include/xlocale.h /usr/include/bits/string.h \
+ /usr/include/bits/string2.h /usr/include/unistd.h \
+ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
+ /usr/include/bits/confname.h /usr/include/getopt.h \
+ /usr/include/sys/stat.h /usr/include/bits/stat.h fluid_midi.h \
+ /usr/include/sndfile.h /usr/include/ladspa.h /usr/include/dssi.h \
+ /usr/include/alsa/seq_event.h
+
+/usr/include/stdc-predef.h:
+
+midi_loader.h:
+
+fluid_list.h:
+
+fluidsynth_priv.h:
+
+fluid_midi_custom.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/features.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/include/gnu/stubs-64.h:
+
+/usr/include/bits/wchar.h:
+
+/usr/include/stdio.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stddef.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdarg.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/bits/waitflags.h:
+
+/usr/include/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/bits/endian.h:
+
+/usr/include/bits/byteswap.h:
+
+/usr/include/bits/byteswap-16.h:
+
+/usr/include/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/sys/select.h:
+
+/usr/include/bits/select.h:
+
+/usr/include/bits/sigset.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/sys/sysmacros.h:
+
+/usr/include/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/bits/stdlib-bsearch.h:
+
+/usr/include/bits/stdlib-float.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/bits/string.h:
+
+/usr/include/bits/string2.h:
+
+/usr/include/unistd.h:
+
+/usr/include/bits/posix_opt.h:
+
+/usr/include/bits/environments.h:
+
+/usr/include/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/sys/stat.h:
+
+/usr/include/bits/stat.h:
+
+fluid_midi.h:
+
+/usr/include/sndfile.h:
+
+/usr/include/ladspa.h:
+
+/usr/include/dssi.h:
+
+/usr/include/alsa/seq_event.h:
diff --git a/src/midi/.deps/test_midi_loader.Po b/src/midi/.deps/test_midi_loader.Po
new file mode 100644
index 0000000..46719e6
--- /dev/null
+++ b/src/midi/.deps/test_midi_loader.Po
@@ -0,0 +1,144 @@
+test_midi_loader.o: test_midi_loader.c /usr/include/stdc-predef.h \
+ midi_loader.h fluid_list.h fluidsynth_priv.h fluid_midi_custom.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdint.h \
+ /usr/include/stdint.h /usr/include/features.h /usr/include/sys/cdefs.h \
+ /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
+ /usr/include/gnu/stubs-64.h /usr/include/bits/wchar.h \
+ /usr/include/stdio.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stddef.h \
+ /usr/include/bits/types.h /usr/include/bits/typesizes.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdarg.h \
+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdio.h /usr/include/stdlib.h \
+ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
+ /usr/include/endian.h /usr/include/bits/endian.h \
+ /usr/include/bits/byteswap.h /usr/include/bits/byteswap-16.h \
+ /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \
+ /usr/include/bits/select.h /usr/include/bits/sigset.h \
+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
+ /usr/include/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \
+ /usr/include/string.h /usr/include/xlocale.h /usr/include/bits/string.h \
+ /usr/include/bits/string2.h /usr/include/unistd.h \
+ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
+ /usr/include/bits/confname.h /usr/include/getopt.h \
+ /usr/include/sys/stat.h /usr/include/bits/stat.h fluid_midi.h \
+ /usr/include/sndfile.h /usr/include/ladspa.h /usr/include/dssi.h \
+ /usr/include/alsa/seq_event.h
+
+/usr/include/stdc-predef.h:
+
+midi_loader.h:
+
+fluid_list.h:
+
+fluidsynth_priv.h:
+
+fluid_midi_custom.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/features.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/include/gnu/stubs-64.h:
+
+/usr/include/bits/wchar.h:
+
+/usr/include/stdio.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stddef.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/stdarg.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/bits/waitflags.h:
+
+/usr/include/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/bits/endian.h:
+
+/usr/include/bits/byteswap.h:
+
+/usr/include/bits/byteswap-16.h:
+
+/usr/include/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/sys/select.h:
+
+/usr/include/bits/select.h:
+
+/usr/include/bits/sigset.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/sys/sysmacros.h:
+
+/usr/include/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/bits/stdlib-bsearch.h:
+
+/usr/include/bits/stdlib-float.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/bits/string.h:
+
+/usr/include/bits/string2.h:
+
+/usr/include/unistd.h:
+
+/usr/include/bits/posix_opt.h:
+
+/usr/include/bits/environments.h:
+
+/usr/include/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/sys/stat.h:
+
+/usr/include/bits/stat.h:
+
+fluid_midi.h:
+
+/usr/include/sndfile.h:
+
+/usr/include/ladspa.h:
+
+/usr/include/dssi.h:
+
+/usr/include/alsa/seq_event.h:
diff --git a/src/midi/.fluid_midi.c.swp b/src/midi/.fluid_midi.c.swp
new file mode 100644
index 0000000..b6c14b2
--- /dev/null
+++ b/src/midi/.fluid_midi.c.swp
Binary files differ
diff --git a/src/midi/.libs/fluid_list.o b/src/midi/.libs/fluid_list.o
new file mode 100644
index 0000000..7a338c3
--- /dev/null
+++ b/src/midi/.libs/fluid_list.o
Binary files differ
diff --git a/src/midi/.libs/fluid_midi.o b/src/midi/.libs/fluid_midi.o
new file mode 100644
index 0000000..6f4f151
--- /dev/null
+++ b/src/midi/.libs/fluid_midi.o
Binary files differ
diff --git a/src/midi/.libs/libfluidmidi.a b/src/midi/.libs/libfluidmidi.a
new file mode 100644
index 0000000..7cb0b8c
--- /dev/null
+++ b/src/midi/.libs/libfluidmidi.a
Binary files differ
diff --git a/src/midi/.libs/libfluidmidi.la b/src/midi/.libs/libfluidmidi.la
new file mode 120000
index 0000000..e37d14e
--- /dev/null
+++ b/src/midi/.libs/libfluidmidi.la
@@ -0,0 +1 @@
+../libfluidmidi.la \ No newline at end of file
diff --git a/src/midi/.libs/midi_loader.o b/src/midi/.libs/midi_loader.o
new file mode 100644
index 0000000..c00226c
--- /dev/null
+++ b/src/midi/.libs/midi_loader.o
Binary files differ
diff --git a/src/midi/Makefile b/src/midi/Makefile
new file mode 100644
index 0000000..e65bef3
--- /dev/null
+++ b/src/midi/Makefile
@@ -0,0 +1,645 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# src/midi/Makefile. Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+
+
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/cli-dssi-host
+pkgincludedir = $(includedir)/cli-dssi-host
+pkglibdir = $(libdir)/cli-dssi-host
+pkglibexecdir = $(libexecdir)/cli-dssi-host
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = x86_64-unknown-linux-gnu
+host_triplet = x86_64-unknown-linux-gnu
+bin_PROGRAMS = test_midi_loader$(EXEEXT)
+subdir = src/midi
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libfluidmidi_la_LIBADD =
+am_libfluidmidi_la_OBJECTS = fluid_midi.lo fluid_list.lo \
+ midi_loader.lo
+libfluidmidi_la_OBJECTS = $(am_libfluidmidi_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__v_lt_1 =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_test_midi_loader_OBJECTS = test_midi_loader.$(OBJEXT)
+test_midi_loader_OBJECTS = $(am_test_midi_loader_OBJECTS)
+test_midi_loader_DEPENDENCIES = libfluidmidi.la
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libfluidmidi_la_SOURCES) $(test_midi_loader_SOURCES)
+DIST_SOURCES = $(libfluidmidi_la_SOURCES) $(test_midi_loader_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/pepper/DSSI/dssi-render/missing aclocal-1.14
+ALSA_CFLAGS = -I/usr/include/alsa
+ALSA_LIBS = -lasound
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 1
+AR = ar
+AUTOCONF = ${SHELL} /home/pepper/DSSI/dssi-render/missing autoconf
+AUTOHEADER = ${SHELL} /home/pepper/DSSI/dssi-render/missing autoheader
+AUTOMAKE = ${SHELL} /home/pepper/DSSI/dssi-render/missing automake-1.14
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2
+CPP = gcc -E
+CPPFLAGS =
+CYGPATH_W = echo
+DEFS = -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DPACKAGE=\"cli-dssi-host\" -DVERSION=\"0.1.3\"
+DEPDIR = .deps
+DLLTOOL = false
+DSSI_CFLAGS =
+DSSI_LIBS =
+DSYMUTIL =
+DUMPBIN =
+ECHO_C =
+ECHO_N = -n
+ECHO_T =
+EGREP = /usr/bin/grep -E
+EXEEXT =
+FGREP = /usr/bin/grep -F
+GREP = /usr/bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS =
+LIBOBJS =
+LIBS =
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO =
+LN_S = ln -s
+LTLIBOBJS =
+MAKEINFO = ${SHELL} /home/pepper/DSSI/dssi-render/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /usr/bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT =
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL =
+OTOOL64 =
+PACKAGE = cli-dssi-host
+PACKAGE_BUGREPORT =
+PACKAGE_NAME =
+PACKAGE_STRING =
+PACKAGE_TARNAME =
+PACKAGE_URL =
+PACKAGE_VERSION =
+PATH_SEPARATOR = :
+PKG_CONFIG = /usr/bin/pkg-config
+PKG_CONFIG_LIBDIR =
+PKG_CONFIG_PATH =
+RANLIB = ranlib
+SED = /usr/bin/sed
+SET_MAKE =
+SHELL = /bin/sh
+SNDFILE_CFLAGS =
+SNDFILE_LIBS = -lsndfile
+STRIP = strip
+VERSION = 0.1.3
+abs_builddir = /home/pepper/DSSI/dssi-render/src/midi
+abs_srcdir = /home/pepper/DSSI/dssi-render/src/midi
+abs_top_builddir = /home/pepper/DSSI/dssi-render
+abs_top_srcdir = /home/pepper/DSSI/dssi-render
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_DUMPBIN =
+am__include = include
+am__leading_dot = .
+am__quote =
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-unknown-linux-gnu
+build_alias =
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = unknown
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-unknown-linux-gnu
+host_alias =
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = unknown
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/pepper/DSSI/dssi-render/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias =
+top_build_prefix = ../../
+top_builddir = ../..
+top_srcdir = ../..
+noinst_LTLIBRARIES = libfluidmidi.la
+libfluidmidi_la_SOURCES = fluid_midi.c fluid_list.c midi_loader.c
+test_midi_loader_SOURCES = test_midi_loader.c
+test_midi_loader_LDADD = -lm -ldl libfluidmidi.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/midi/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/midi/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libfluidmidi.la: $(libfluidmidi_la_OBJECTS) $(libfluidmidi_la_DEPENDENCIES) $(EXTRA_libfluidmidi_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libfluidmidi_la_OBJECTS) $(libfluidmidi_la_LIBADD) $(LIBS)
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+test_midi_loader$(EXEEXT): $(test_midi_loader_OBJECTS) $(test_midi_loader_DEPENDENCIES) $(EXTRA_test_midi_loader_DEPENDENCIES)
+ @rm -f test_midi_loader$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_midi_loader_OBJECTS) $(test_midi_loader_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+include ./$(DEPDIR)/fluid_list.Plo
+include ./$(DEPDIR)/fluid_midi.Plo
+include ./$(DEPDIR)/midi_loader.Plo
+include ./$(DEPDIR)/test_midi_loader.Po
+
+.c.o:
+ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+# $(AM_V_CC)source='$<' object='$@' libtool=no \
+# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+# $(AM_V_CC_no)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+# $(AM_V_CC)source='$<' object='$@' libtool=no \
+# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+# $(AM_V_CC)source='$<' object='$@' libtool=yes \
+# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+ clean-binPROGRAMS clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-binPROGRAMS install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/midi/Makefile.am b/src/midi/Makefile.am
index 6473df4..3282105 100644
--- a/src/midi/Makefile.am
+++ b/src/midi/Makefile.am
@@ -1,2 +1,7 @@
noinst_LTLIBRARIES = libfluidmidi.la
-libfluidmidi_la_SOURCES = fluid_midi.c fluid_list.c custom.c
+libfluidmidi_la_SOURCES = fluid_midi.c fluid_list.c midi_loader.c
+
+bin_PROGRAMS = test_midi_loader
+
+test_midi_loader_SOURCES = test_midi_loader.c
+test_midi_loader_LDADD = -lm -ldl libfluidmidi.la
diff --git a/src/midi/Makefile.in b/src/midi/Makefile.in
new file mode 100644
index 0000000..f406eb8
--- /dev/null
+++ b/src/midi/Makefile.in
@@ -0,0 +1,645 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = test_midi_loader$(EXEEXT)
+subdir = src/midi
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libfluidmidi_la_LIBADD =
+am_libfluidmidi_la_OBJECTS = fluid_midi.lo fluid_list.lo \
+ midi_loader.lo
+libfluidmidi_la_OBJECTS = $(am_libfluidmidi_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_test_midi_loader_OBJECTS = test_midi_loader.$(OBJEXT)
+test_midi_loader_OBJECTS = $(am_test_midi_loader_OBJECTS)
+test_midi_loader_DEPENDENCIES = libfluidmidi.la
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libfluidmidi_la_SOURCES) $(test_midi_loader_SOURCES)
+DIST_SOURCES = $(libfluidmidi_la_SOURCES) $(test_midi_loader_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSSI_CFLAGS = @DSSI_CFLAGS@
+DSSI_LIBS = @DSSI_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libfluidmidi.la
+libfluidmidi_la_SOURCES = fluid_midi.c fluid_list.c midi_loader.c
+test_midi_loader_SOURCES = test_midi_loader.c
+test_midi_loader_LDADD = -lm -ldl libfluidmidi.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/midi/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/midi/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libfluidmidi.la: $(libfluidmidi_la_OBJECTS) $(libfluidmidi_la_DEPENDENCIES) $(EXTRA_libfluidmidi_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libfluidmidi_la_OBJECTS) $(libfluidmidi_la_LIBADD) $(LIBS)
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+test_midi_loader$(EXEEXT): $(test_midi_loader_OBJECTS) $(test_midi_loader_DEPENDENCIES) $(EXTRA_test_midi_loader_DEPENDENCIES)
+ @rm -f test_midi_loader$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_midi_loader_OBJECTS) $(test_midi_loader_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fluid_list.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fluid_midi.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midi_loader.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_midi_loader.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+ clean-binPROGRAMS clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-binPROGRAMS install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/midi/fluid_list.lo b/src/midi/fluid_list.lo
new file mode 100644
index 0000000..bbc909d
--- /dev/null
+++ b/src/midi/fluid_list.lo
@@ -0,0 +1,12 @@
+# fluid_list.lo - a libtool object file
+# Generated by libtool (GNU libtool) 2.4.2
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object='.libs/fluid_list.o'
+
+# Name of the non-PIC object
+non_pic_object='fluid_list.o'
+
diff --git a/src/midi/fluid_list.o b/src/midi/fluid_list.o
new file mode 100644
index 0000000..7f329e4
--- /dev/null
+++ b/src/midi/fluid_list.o
Binary files differ
diff --git a/src/midi/fluid_midi.lo b/src/midi/fluid_midi.lo
new file mode 100644
index 0000000..09c84c0
--- /dev/null
+++ b/src/midi/fluid_midi.lo
@@ -0,0 +1,12 @@
+# fluid_midi.lo - a libtool object file
+# Generated by libtool (GNU libtool) 2.4.2
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object='.libs/fluid_midi.o'
+
+# Name of the non-PIC object
+non_pic_object='fluid_midi.o'
+
diff --git a/src/midi/fluid_midi.o b/src/midi/fluid_midi.o
new file mode 100644
index 0000000..4460e8d
--- /dev/null
+++ b/src/midi/fluid_midi.o
Binary files differ
diff --git a/src/midi/custom.h b/src/midi/fluid_midi_custom.h
index 8a2fb14..8712b44 100644
--- a/src/midi/custom.h
+++ b/src/midi/fluid_midi_custom.h
@@ -1,5 +1,8 @@
+typedef struct _fluid_list_t fluid_list_t;
+
typedef struct _fluid_midi_event_t fluid_midi_event_t;
typedef struct _fluid_player_t fluid_player_t;
+typedef struct _fluid_track_t fluid_track_t;
typedef struct _fluid_synth_t fluid_synth_t;
typedef struct _fluid_timer_t fluid_timer_t;
typedef struct _fluid_sample_timer_t fluid_sample_timer_t;
diff --git a/src/midi/fluidsynth_priv.h b/src/midi/fluidsynth_priv.h
index 04c1ee7..93f6d32 100644
--- a/src/midi/fluidsynth_priv.h
+++ b/src/midi/fluidsynth_priv.h
@@ -22,7 +22,8 @@
#ifndef _FLUIDSYNTH_PRIV_H
#define _FLUIDSYNTH_PRIV_H
-#include "custom.h"
+#include "fluid_midi_custom.h"
+#include "midi_loader.h"
//#include <glib.h>
#include <stdint.h>
#include <stdio.h>
diff --git a/src/midi/libfluidmidi.la b/src/midi/libfluidmidi.la
new file mode 100644
index 0000000..8da7fe7
--- /dev/null
+++ b/src/midi/libfluidmidi.la
@@ -0,0 +1,41 @@
+# libfluidmidi.la - a libtool library file
+# Generated by libtool (GNU libtool) 2.4.2
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname=''
+
+# Names of this library.
+library_names=''
+
+# The name of the static archive.
+old_library='libfluidmidi.a'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags=''
+
+# Libraries that this one depends upon.
+dependency_libs=''
+
+# Names of additional weak libraries provided by this library
+weak_library_names=''
+
+# Version information for libfluidmidi.
+current=
+age=
+revision=
+
+# Is this an already installed library?
+installed=no
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=no
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir=''
diff --git a/src/midi/custom.c b/src/midi/midi_loader.c
index 9cb9613..b2de0c4 100644
--- a/src/midi/custom.c
+++ b/src/midi/midi_loader.c
@@ -1,19 +1,4 @@
-#include "fluidsynth_priv.h"
-#include "fluid_midi.h"
-#include <sndfile.h>
-#include <string.h>
-#include <ladspa.h>
-#include <dssi.h>
-
-typedef struct event_table_t{
- snd_seq_event_t *events;
- int length;
- size_t last_nframe;
-} event_table_t;
-typedef struct read_midi_ctx_t {
- fluid_player_t *player;
- fluid_track_t *track;
-} read_midi_ctx_t;
+#include "midi_loader.h"
event_table_t *event_table;
@@ -52,6 +37,19 @@ void delete_event(event_table_t *event_table, snd_seq_event_t *event){
size_t i;
for (i=0; i< event_table->length; i++){
if(compare_events(&event_table->events[i], event)){
+ printf("removed_event\n");
+ memcpy(&event_table->events[i], &event_table->events[i+1], sizeof(snd_seq_event_t)*(event_table->length - i -1));
+ event_table->events = realloc(event_table->events, event_table->length * sizeof(snd_seq_event_t));
+ event_table->length--;
+ i--;
+ }
+ }
+}
+void delete_note_off_events(event_table_t *event_table){
+ size_t i;
+ for (i=0; i< event_table->length; i++){
+ if(event_table->events[i].type == SND_SEQ_EVENT_NOTEOFF){
+ printf("removed_note_off_event\n");
memcpy(&event_table->events[i], &event_table->events[i+1], sizeof(snd_seq_event_t)*(event_table->length - i -1));
event_table->events = realloc(event_table->events, event_table->length * sizeof(snd_seq_event_t));
event_table->length--;
@@ -72,6 +70,7 @@ void replace_events(event_table_t *event_table, snd_seq_event_t *event){
size_t i;
for (i=0; i< event_table->length; i++){
if(compare_events(&event_table->events[i], event)){
+ printf("replaced_event\n");
memcpy(&event_table->events[i], event, sizeof(snd_seq_event_t));
}
}
@@ -94,6 +93,7 @@ void replace_events(event_table_t *event_table, snd_seq_event_t *event){
// on_event.time.tick = 0;
// }}}
void convert_event_format(fluid_midi_event_t *from, snd_seq_event_t *to){
+ memset(to, 0, sizeof(snd_seq_event_t));
//{{{ from->type
switch(from->type){
@@ -166,7 +166,9 @@ void convert_event_format(fluid_midi_event_t *from, snd_seq_event_t *to){
case FLUID_NONE: to->type = SND_SEQ_EVENT_NONE; break; one of those constants, we can have a switch in print function to clearly show what event is it*/
}
//}}}
- to->data.note.channel = from->channel;
+ //to->data.note.channel = from->channel;
+ to->data.note.channel = 0; // FIXME force channel
+ to->time.tick = 0;
}
@@ -187,6 +189,7 @@ void print_snd_seq_event(snd_seq_event_t *event){
printf("channel: %d ", event->data.note.channel);
printf("note: %d ", event->data.note.note);
printf("velocity: %d ", event->data.note.velocity);
+ printf("tick: %d ", event->time.tick);
printf("\n");
}
@@ -211,58 +214,59 @@ int get_events(void *data, fluid_midi_event_t *event){
snd_seq_event_t seq_event;
size_t last_nframe = event_table->last_nframe;
- event_table->last_nframe = (player->deltatime * track->ticks) * 44100 / 1000;
- size_t nframes = event_table->last_nframe - last_nframe;
- //ok so I have no idea how to get the linker to work when we put this code into cli-dssi-host, should we look at that next? sure
- //FIXME msec
- /*printf("track=%02d msec=%05d ticks=%05u dtime=%05u next=%05u type=Ox%x\n",
- track->num,
- track->ticks * player->deltatime,
- track->ticks,
- event->dtime,
- track->ticks + event->dtime,
- event->type); */
-
- convert_event_format(event, &seq_event);
-// print_snd_seq_event(&seq_event);
+ event_table->last_nframe = (player->deltatime * track->ticks) * 44100 / 1000; // FIXME 44100 to ctx->samplerate
+ event_table->nframes_since_last = event_table->last_nframe - last_nframe;
+ convert_event_format(event, &seq_event);
+ //print_snd_seq_event(&seq_event);
+
+ read_midi_callback cb = ctx->callback;
+ if(cb){
+ //size_t i;
+ // for(i = 0; i < event_table->nframes_since_last / 256; i++){ // FIXME //it could be something weird somewhere in this script though, right?
+//some part that we haven't been looking at at all... well yeah, i think of setting this to run whole nframes, and compiling hexter with debug symbols to check it again in valgrind. what is segfaulting...we don't know which part, right? yeah could it be something like an old printf statement somewhere in the code from cli-dssi-host? hm it actually can be code from cli-dssi which is initalizing plugin for only 256 frames and we are trying to run more inside.. yeah that seems right it saves it in "descriptor" right? yeah some buffer there
+ cb(event_table, ctx->callback_userdata);
+ //}
+ }
+ // so i fixed logic a bit, should work now oh ok I have the new file
+ delete_note_off_events(event_table);
switch(event->type){
case NOTE_ON:
insert_event(event_table, &seq_event);
break;
case NOTE_OFF:
- delete_event(event_table, &seq_event);
+ replace_events(event_table, &seq_event);
break;
default:
break;
}
+
printf("event table last nframe: %u\n", event_table->last_nframe);
- printf("run_synth(instancehandle, %u,\n", nframes);
+ printf("run_synth(instancehandle, %u,\n", event_table->nframes_since_last);
print_event_table(event_table);
printf(", %u)\n", event_table->length);
-//weird, negative numbers type problem...is it because we need to print as %u? or something similar? might be
-//ok so it's the event table that we pass in, right? yes
-// descriptor->run_synth(instanceHandle, //instance handle is taken care of for us, current_event is our event_table, right? event_table->events
-// player->msec, //like this? not really
-// event_table->events,
-// event_table->length);
-//
-// so with nfraes, we need to track how many samples we should generate from last get_events call. so it should be something like:
-// ok something like this wow, ok, do we need print this now too, or should we try hooking it up? let's print it first
+
+
+ /*
+ flow
+ call 1:
+ - note_on
+ insert_note()
+ call 2:
+ cb()
+ - note_off
+ replace_events() note_on in table is now note_off
+ call 3:
+ cb()
+ delete_note_off_events()
+ */
}
-//{{{ mrswatson time calculation
-// case TIME_DIVISION_TYPE_TICKS_PER_BEAT: {
-// double ticksPerSecond = (double)timeDivision * getTempo() / 60.0;
-// double sampleFramesPerTick = getSampleRate() / ticksPerSecond;
-// currentTimeInSampleFrames += (long)(unpackedVariableLength * sampleFramesPerTick);
-// }
-//}}}
-void read_midi_file2(char *filename){
+void load_midi_file(char *filename, read_midi_callback callback, void *callback_userdata){ //like that?
int i;
fluid_player_t *player;
fluid_playlist_item playlist_item;
@@ -271,15 +275,19 @@ void read_midi_file2(char *filename){
event_table = malloc(sizeof (event_table_t));
event_table->events = NULL;
event_table->length = 0;
- event_table->last_nframe = 0;
-
+ event_table->last_nframe = 0;
+ event_table->nframes_since_last = 0;
+//where is this calculated?
playlist_item.filename = filename;
//
+ // so the only arg to the callback is ctx, right? yes
// player = (fluid_player_t *)new_fluid_player();
- player = FLUID_NEW(fluid_player_t);
+ player = (fluid_player_t *)new_fluid_player();
player->playback_callback = &get_events; //how do I pass it to the callback? no way to do that, we can only pass one variable as "data"
player->playback_userdata = (void *)&ctx; // here. so i guess need to make a structure and put player, track pointers into it.
ctx.player = player;
+ ctx.callback = callback;
+ ctx.callback_userdata = callback_userdata;
fluid_player_load(player, &playlist_item);
//
@@ -319,7 +327,79 @@ void read_midi_file2(char *filename){
// off_event.time.tick = 0;
-int main(void){
- char *filename = "example.mid";
- read_midi_file2(filename);
+//weird, negative numbers type problem...is it because we need to print as %u? or something similar? might be
+//ok so it's the event table that we pass in, right? yes
+// descriptor->run_synth(instanceHandle, //instance handle is taken care of for us, current_event is our event_table, right? event_table->events
+// player->msec, //like this? not really
+// event_table->events,
+// event_table->length);
+//
+// so with nfraes, we need to track how many samples we should generate from last get_events call. so it should be something like:
+// ok something like this wow, ok, do we need print this now too, or should we try hooking it up? let's print it first
+
+//only thing is, I'm not sure what they mean by start of the block, do they mean start of the track? not sure, i guess to start of events we send to plugin one more time to check this note_on\off
+// * The Events pointer points to a block of EventCount ALSA
+// * sequencer events, which is used to communicate MIDI and related
+// * events to the synth. Each event is timestamped relative to the
+// * start of the block, (mis)using the ALSA "tick time" field as a
+// * frame count. The host is responsible for ensuring that events
+// * with differing timestamps are already ordered by time.
+ //FIXME msec
+ /*printf("track=%02d msec=%05d ticks=%05u dtime=%05u next=%05u type=Ox%x\n",
+ track->num,
+ track->ticks * player->deltatime,
+ track->ticks,
+ event->dtime,
+ track->ticks + event->dtime,
+//ok so do we still have an issue with the ticks calculation? yeah but anyway there is something weird with note generation, if i put event on_event from original code, there is something in output file, if i put our events it's silence
+ event->type); */
+//{{{ mrswatson time calculation
+// case TIME_DIVISION_TYPE_TICKS_PER_BEAT: {
+// double ticksPerSecond = (double)timeDivision * getTempo() / 60.0;
+// double sampleFramesPerTick = getSampleRate() / ticksPerSecond;
+// currentTimeInSampleFrames += (long)(unpackedVariableLength * sampleFramesPerTick); //so do we need the same calculation, currentTimeinFrames? or do we need deltaframes? what are the units we need exactly? basically need timestamp in msec for each event
+// }
+//}}}
+
+/*
+
+get_events original
+int get_events(void *data, fluid_midi_event_t *event){
+ read_midi_ctx_t *ctx = (read_midi_ctx_t *)data;
+ fluid_player_t *player = ctx->player;
+ fluid_track_t *track = ctx->track;
+ snd_seq_event_t seq_event;
+
+ size_t last_nframe = event_table->last_nframe;
+ event_table->last_nframe = (player->deltatime * track->ticks) * 44100 / 1000; // FIXME 44100 to ctx->samplerate
+ event_table->nframes_since_last = event_table->last_nframe - last_nframe;
+
+
+ convert_event_format(event, &seq_event);
+ print_snd_seq_event(&seq_event);
+
+ read_midi_callback cb = ctx->callback;
+ if(cb){
+ size_t i;
+ for(i = 0; i < event_table->nframes_since_last; i++){
+ cb(event_table, ctx->callback_userdata);
+ }
+ }
+
+ switch(event->type){
+ case NOTE_ON:
+ insert_event(event_table, &seq_event);
+ break;
+ case NOTE_OFF:
+ delete_event(event_table, &seq_event);
+ break;
+ default:
+ break;
+ }
+ printf("event table last nframe: %u\n", event_table->last_nframe);
+ printf("run_synth(instancehandle, %u,\n", event_table->nframes_since_last);
+ print_event_table(event_table);
+ printf(", %u)\n", event_table->length);
+
}
+*/
diff --git a/src/midi/midi_loader.h b/src/midi/midi_loader.h
new file mode 100644
index 0000000..bf249aa
--- /dev/null
+++ b/src/midi/midi_loader.h
@@ -0,0 +1,45 @@
+#ifndef MIDI_LOADER_H
+#define MIDI_LOADER_H
+
+#include "fluid_list.h"
+#include "fluidsynth_priv.h" //is this the right idea? just need to load libs in the right order? yep
+#include "fluid_midi.h"
+#include <sndfile.h>
+#include <string.h>
+#include <ladspa.h>
+#include <dssi.h>
+//load all of those in the same way as below? or is the problem with how fluid_midi is accessing this file? yeah basically order issue
+
+
+typedef struct event_table_t{
+ snd_seq_event_t *events;
+ size_t length;
+ size_t last_nframe;
+ size_t nframes_since_last;
+} event_table_t;
+
+typedef void(*read_midi_callback)(event_table_t *event_table, void *userdata);
+
+
+
+typedef struct read_midi_ctx_t {
+ fluid_player_t *player;
+ fluid_track_t *track;
+ read_midi_callback callback;
+ void *callback_userdata;
+} read_midi_ctx_t;
+
+
+//void insert_event(event_table_t *event_table, snd_seq_event_t *event){
+//void delete_event(event_table_t *event_table, snd_seq_event_t *event){
+//int compare_events(snd_seq_event_t *event1, snd_seq_event_t *event2){
+//void replace_events(event_table_t *event_table, snd_seq_event_t *event){
+//like this?
+//void convert_event_format(fluid_midi_event_t *from, snd_seq_event_t *to);
+//void print_snd_seq_event(snd_seq_event_t *event);
+//void print_event_table (event_table_t *event_table);
+//int get_events(void *data, fluid_midi_event_t *event);
+
+void print_snd_seq_event(snd_seq_event_t *event);
+void load_midi_file(char *filename, read_midi_callback callback, void *callback_userdata);
+#endif
diff --git a/src/midi/midi_loader.lo b/src/midi/midi_loader.lo
new file mode 100644
index 0000000..a259e49
--- /dev/null
+++ b/src/midi/midi_loader.lo
@@ -0,0 +1,12 @@
+# midi_loader.lo - a libtool object file
+# Generated by libtool (GNU libtool) 2.4.2
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object='.libs/midi_loader.o'
+
+# Name of the non-PIC object
+non_pic_object='midi_loader.o'
+
diff --git a/src/midi/midi_loader.o b/src/midi/midi_loader.o
new file mode 100644
index 0000000..da224f4
--- /dev/null
+++ b/src/midi/midi_loader.o
Binary files differ
diff --git a/src/midi/test_midi_loader b/src/midi/test_midi_loader
new file mode 100755
index 0000000..2e9deb1
--- /dev/null
+++ b/src/midi/test_midi_loader
Binary files differ
diff --git a/src/midi/test_midi_loader.c b/src/midi/test_midi_loader.c
new file mode 100644
index 0000000..9482a19
--- /dev/null
+++ b/src/midi/test_midi_loader.c
@@ -0,0 +1,5 @@
+#include "midi_loader.h"
+int main(void){
+ char *filename = "example.mid";
+ load_midi_file(filename, NULL, NULL); //do you think this will all compile? hope so
+}
diff --git a/src/midi/test_midi_loader.o b/src/midi/test_midi_loader.o
new file mode 100644
index 0000000..b1a31b3
--- /dev/null
+++ b/src/midi/test_midi_loader.o
Binary files differ
diff --git a/src/new_example.wav b/src/new_example.wav
new file mode 100644
index 0000000..bd348e1
--- /dev/null
+++ b/src/new_example.wav
Binary files differ
diff --git a/src/output.wav b/src/output.wav
index 203d64e..b294777 100644
--- a/src/output.wav
+++ b/src/output.wav
Binary files differ
diff --git a/src/valgrind_output b/src/valgrind_output
new file mode 100644
index 0000000..9ed6fef
--- /dev/null
+++ b/src/valgrind_output
@@ -0,0 +1 @@
+cli-dssi-host: Warning: port 1 (Tuning) was 0.000, overriding to 440.000