[SCM] calf/master: + Initial DSSI support, somewhat works but no programs or GUI support

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:36:44 UTC 2013


The following commit has been merged in the master branch:
commit 8dcc046367cd8ae7c057af1c955ef782e8867c82
Author: kfoltman <kfoltman at 78b06b96-2940-0410-b7fc-879d825d01d8>
Date:   Thu Dec 13 23:16:15 2007 +0000

    + Initial DSSI support, somewhat works but no programs or GUI support
    
    
    git-svn-id: https://calf.svn.sourceforge.net/svnroot/calf/trunk@17 78b06b96-2940-0410-b7fc-879d825d01d8

diff --git a/config.h.in b/config.h.in
index 645552c..bd49e05 100644
--- a/config.h.in
+++ b/config.h.in
@@ -12,9 +12,6 @@
 /* Define to 1 if you have the <jack/jack.h> header file. */
 #undef HAVE_JACK_JACK_H
 
-/* Define to 1 if you have the <ladspa.h> header file. */
-#undef HAVE_LADSPA_H
-
 /* Define to 1 if you have the <math.h> header file. */
 #undef HAVE_MATH_H
 
diff --git a/configure.in b/configure.in
index a920179..32ddb2c 100644
--- a/configure.in
+++ b/configure.in
@@ -24,10 +24,12 @@ PKG_PROG_PKG_CONFIG
 
 # Checks for header files.
 AC_HEADER_STDC
-AC_CHECK_HEADERS([memory.h stdint.h stdlib.h ladspa.h time.h math.h])
+AC_CHECK_HEADERS([memory.h stdint.h stdlib.h time.h math.h])
 
 AC_CHECK_HEADER(ladspa.h, LADSPA_FOUND="yes", LADSPA_FOUND="no")
 
+AC_CHECK_HEADER(dssi.h, DSSI_FOUND="yes", DSSI_FOUND="no")
+
 AC_CHECK_HEADERS([jack/jack.h], have_jack_header=yes, have_jack_header=no)
 
 if test "$have_jack_header" = "yes"; then
@@ -80,6 +82,7 @@ AC_ARG_ENABLE(experimental,
 
 AC_MSG_RESULT($set_enable_experimental)
 
+AM_CONDITIONAL(USE_DSSI, test "$DSSI_FOUND" = "yes")
 AM_CONDITIONAL(USE_LADSPA, test "$LADSPA_FOUND" = "yes")
 AM_CONDITIONAL(USE_JACK, test "$JACK_ENABLED" = "yes")
 AM_CONDITIONAL(USE_PHAT, test "$PHAT_ENABLED" = "yes")
@@ -125,6 +128,7 @@ AC_MSG_RESULT([
     Calf configured
 
     LADSPA enabled:         $LADSPA_FOUND
+    DSSI enabeld:           $DSSI_FOUND
     JACK host enabled:      $JACK_ENABLED
     Old-style JACK MIDI:    $OLD_JACK
     PHAT library enabled:   $PHAT_ENABLED
diff --git a/src/Makefile.am b/src/Makefile.am
index 6fa73c2..0813300 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -36,6 +36,9 @@ bin_PROGRAMS += calfmakerdf
 calfmakerdf_SOURCES = makerdf.cpp
 calfmakerdf_LDADD = libcalfstatic.la
 endif
+if USE_DSSI
+AM_CXXFLAGS += -DUSE_DSSI=1
+endif
 
 calfbenchmark_SOURCES = benchmark.cpp
 calfbenchmark_LDADD = 
diff --git a/src/calf/giface.h b/src/calf/giface.h
index 99706d8..7b34593 100644
--- a/src/calf/giface.h
+++ b/src/calf/giface.h
@@ -27,6 +27,9 @@
 #if USE_LADSPA
 #include <ladspa.h>
 #endif
+#if USE_DSSI
+#include <dssi.h>
+#endif
 #if USE_JACK
 #include <jack/jack.h>
 #include <jack/midiport.h>
@@ -129,6 +132,9 @@ template<class Module>
 struct ladspa_wrapper
 {
     LADSPA_Descriptor descriptor;
+#if USE_DSSI
+    DSSI_Descriptor dssi_descriptor;
+#endif
     ladspa_info &info;
 
     ladspa_wrapper(ladspa_info &i) 
@@ -190,6 +196,15 @@ struct ladspa_wrapper
         descriptor.set_run_adding_gain = NULL;
         descriptor.deactivate = cb_deactivate;
         descriptor.cleanup = cb_cleanup;
+#if USE_DSSI
+        memset(&dssi_descriptor, 0, sizeof(dssi_descriptor));
+        dssi_descriptor.DSSI_API_Version = 1;
+        dssi_descriptor.LADSPA_Plugin = &descriptor;
+        dssi_descriptor.configure = cb_configure;
+        // XXXKF make one default program
+        dssi_descriptor.run_synth = cb_run_synth;
+        
+#endif
     }
 
     static LADSPA_Handle cb_instantiate(const struct _LADSPA_Descriptor * Descriptor, unsigned long sample_rate)
@@ -226,18 +241,81 @@ struct ladspa_wrapper
         mod->set_sample_rate(mod->srate);
         mod->activate();
     }
+    
+    static inline void zero_by_mask(Module *module, uint32_t mask, uint32_t offset, uint32_t nsamples)
+    {
+        for (int i=0; i<Module::out_count; i++) {
+            if ((mask & (1 << i)) == 0) {
+                dsp::zero(module->outs[i] + offset, nsamples);
+            }
+        }
+    }
 
     static void cb_run(LADSPA_Handle Instance, unsigned long SampleCount) {
         Module *const mod = (Module *)Instance;
         mod->params_changed();
         uint32_t out_mask = mod->process(0, SampleCount, -1, -1);
-        for (int i=0; i<Module::out_count; i++) {
-          if ((out_mask & (1 << i)) == 0) {
-            if (mod->outs[i])
-              memset(mod->outs[i], 0, sizeof(float) * SampleCount);
-          }
+        zero_by_mask(mod, out_mask, 0, SampleCount);
+    }
+
+#if USE_DSSI
+    static void cb_run_synth(LADSPA_Handle Instance, unsigned long SampleCount, 
+            snd_seq_event_t *Events, unsigned long EventCount) {
+        Module *const mod = (Module *)Instance;
+        mod->params_changed();
+        
+        uint32_t offset = 0;
+        for (uint32_t e = 0; e < EventCount; e++)
+        {
+            uint32_t timestamp = Events[e].time.tick;
+            if (timestamp != offset) {
+                uint32_t out_mask = mod->process(offset, timestamp - offset, -1, -1);
+                zero_by_mask(mod, out_mask, offset, timestamp - offset);
+            }
+            process_dssi_event(mod, Events[e]);
+            offset = timestamp;
+        }
+        if (offset != SampleCount)
+        {
+            uint32_t out_mask = mod->process(offset, SampleCount - offset, -1, -1);
+            zero_by_mask(mod, out_mask, offset, SampleCount - offset);
         }
     }
+    
+    static char *cb_configure(LADSPA_Handle Instance,
+		       const char *Key,
+		       const char *Value)
+    {
+        // XXXKF some day...
+        // Module *const mod = (Module *)Instance;
+        // return mod->configure(Key, Value);
+        return NULL;
+    }
+    
+    char *configure(const char *key, const char *value)
+    {
+        return NULL;
+    }
+    
+    static void process_dssi_event(Module *module, snd_seq_event_t &event)
+    {
+        uint8_t data[4];
+        switch(event.type) {
+            case SND_SEQ_EVENT_NOTEON:
+                data[0] = 0x90 + event.data.note.channel;
+                data[1] = event.data.note.note;
+                data[2] = event.data.note.velocity;
+                module->handle_event(data, 3);
+                break;
+            case SND_SEQ_EVENT_NOTEOFF:
+                data[0] = 0x80 + event.data.note.channel;
+                data[1] = event.data.note.note;
+                data[2] = event.data.note.velocity;
+                module->handle_event(data, 3);
+                break;
+        }
+    }
+#endif
 
     static void cb_deactivate(LADSPA_Handle Instance) {
         Module *const mod = (Module *)Instance;
@@ -254,6 +332,7 @@ struct ladspa_wrapper
     };
 };
 
+
 #endif
 
 struct audio_exception: public std::exception
diff --git a/src/calf/modules.h b/src/calf/modules.h
index eb9e8cf..ea8d813 100644
--- a/src/calf/modules.h
+++ b/src/calf/modules.h
@@ -30,6 +30,15 @@ namespace synth {
 
 using namespace dsp;
 
+inline void default_handle_event(uint8_t *data, int len, float *params[], unsigned int param_count)
+{
+    if (data[0] == 0x7F && len >= 8) {
+        midi_event *p = (midi_event *)data;
+        if (p->param2 < param_count)
+            *params[p->param2] = p->param3;
+    }
+}
+
 class amp_audio_module
 {
 public:
@@ -42,8 +51,9 @@ public:
     static parameter_properties param_props[];
     void set_sample_rate(uint32_t sr) {
     }
-    void handle_midi_event_now(synth::midi_event event);
-    void handle_param_event_now(uint32_t param, float value);
+    void handle_event(uint8_t *data, int len) {
+        default_handle_event(data, len, params, param_count);
+    }
     void params_changed() {
     }
     void activate() {
@@ -63,15 +73,6 @@ public:
     }
 };
 
-inline void default_handle_event(uint8_t *data, int len, float *params[], unsigned int param_count)
-{
-    if (data[0] == 0x7F && len >= 8) {
-        midi_event *p = (midi_event *)data;
-        if (p->param2 < param_count)
-            *params[p->param2] = p->param3;
-    }
-}
-
 class flanger_audio_module
 {
 public:
diff --git a/src/modules.cpp b/src/modules.cpp
index 14e317d..dc82e88 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -201,6 +201,21 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long Index)
 
 };
 
+#if USE_DSSI && ENABLE_EXPERIMENTAL
+extern "C" {
+
+const DSSI_Descriptor *dssi_descriptor(unsigned long Index)
+{
+    switch (Index) {
+        case 0: return &::monosynth.dssi_descriptor;
+        case 1: return &::organ.dssi_descriptor;
+        default: return NULL;
+    }
+}
+
+};
+#endif
+
 std::string synth::get_builtin_modules_rdf()
 {
     std::string rdf;

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list