Hi all!

I found LMMS did not include one of my favority synths, the DX7 
emulator "hexter" http://dssi.sourceforge.net/hexter.html ,
so I hacked up some glue to achieve this.

My main goal was to alter the hexter source as little as possible, in order to 
benefit from any future development easily. Most of the work was simply 
understanding and finding the APIs; If you could drop a note somewhere e.g. 
in the README that says "the documentation is in the headers, RTFS" that 
would help a lot to get started ;-)

Even there I couldn't find a clear description of what exactly an overloaded
instrument::play() method is expected to do, I hope I got it correct. Please 
comment!

The code is early alpha, so use with caution. The GUI functions are all stubs, 
and will crash LMMS when invoked; so all you currently get is the default 
program of the electric piano. I could imagine to have some sort of DX7 patch 
editor there, with a picture of one of the 32 "algorithms", and settings for 
the 6 oscillators.

I would also like to hear some comments on the concepts of hexter "instances" 
versus the LMMS plugin, and its own handling of "global" polyphony, as well 
as the program changes possible for MIDI instruments.

Attached is only the absolute minimum code to stick hexter into lmms. You'll 
need to

* grab hexter sources from sourceforge.

* move its "src" subdir to LMMS' "plugins/hexter"

* you may remove gui_*, Makefile* and hexter.c; they are not needed for LMMS.

* apply the attached glue patch

* untar the LMMS adaptor files from attached tarball

* compile and enjoy.

        Torsten
--- CMakeLists.txt.orig	2009-08-11 18:52:18.000000000 +0200
+++ CMakeLists.txt	2009-09-12 01:53:56.000000000 +0200
@@ -2,6 +2,7 @@ ADD_SUBDIRECTORY(audio_file_processor)
 ADD_SUBDIRECTORY(bass_booster)
 ADD_SUBDIRECTORY(bit_invader)
 ADD_SUBDIRECTORY(flp_import)
+ADD_SUBDIRECTORY(hexter)
 ADD_SUBDIRECTORY(kicker)
 ADD_SUBDIRECTORY(ladspa_browser)
 ADD_SUBDIRECTORY(ladspa_effect)
diff -Burbp hexter/dx7_voice_data.h hexter/dx7_voice_data.h
--- hexter/dx7_voice_data.h	2009-01-02 08:59:05.000000000 +0100
+++ hexter/dx7_voice_data.h	2009-10-25 15:14:42.000000000 +0100
@@ -26,7 +26,7 @@
 /* dx7_voice_data.c */
 extern dx7_patch_t dx7_voice_init_voice;
 extern uint8_t     dx7_init_performance[DX7_PERFORMANCE_SIZE];
-extern char        base64[];
+// extern char        base64[];
 
 char *dssp_error_message(const char *fmt, ...);
 int  decode_7in6(const char *string, int expected_length, uint8_t *data);
diff -Burbp hexter/hexter_synth.c hexter/hexter_synth.c
--- hexter/hexter_synth.c	2009-01-02 09:10:39.000000000 +0100
+++ hexter/hexter_synth.c	2009-10-25 15:16:14.000000000 +0100
@@ -680,6 +680,7 @@ hexter_instance_select_program(hexter_in
     }
 }
 
+#ifdef HAVE_DSSI
 /*
  * hexter_instance_set_program_descriptor
  */
@@ -701,6 +702,7 @@ hexter_instance_set_program_descriptor(h
     pd->Name = name;
     return 1;
 }
+#endif
 
 /*
  * hexter_instance_handle_patches
diff -Burbp hexter/hexter_synth.h hexter/hexter_synth.h
--- hexter/hexter_synth.h	2009-01-02 09:11:13.000000000 +0100
+++ hexter/hexter_synth.h	2009-10-25 15:18:20.000000000 +0100
@@ -29,7 +29,9 @@
 #include <pthread.h>
 
 #include <ladspa.h>
+#ifdef HAVE_DSSI
 #include <dssi.h>
+#endif
 
 #include "hexter_types.h"
 #include "hexter.h"
@@ -168,10 +170,12 @@ void  hexter_instance_init_controls(hext
 void  hexter_instance_set_performance_data(hexter_instance_t *instance);
 void  hexter_instance_select_program(hexter_instance_t *instance,
                                      unsigned long bank, unsigned long program);
+#ifdef HAVE_DSSI
 int   hexter_instance_set_program_descriptor(hexter_instance_t *instance,
                                              DSSI_Program_Descriptor *pd,
                                              unsigned long bank,
                                              unsigned long program);
+#endif
 char *hexter_instance_handle_patches(hexter_instance_t *instance,
                                      const char *key, const char *value);
 char *hexter_instance_handle_edit_buffer(hexter_instance_t *instance,

Attachment: hexter-lmms-mini.tar.bz2
Description: application/tbz

------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
LMMS-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/lmms-devel

Reply via email to