[SCM] calf/master: + Framework: add require_midi flag to plugins, generate LV2 requiredFeature from it, more API documentation to giface.h

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:38:12 UTC 2013


The following commit has been merged in the master branch:
commit 72379e9b81fde2febef4a0ca487c55ab47e97818
Author: Krzysztof Foltman <wdev at foltman.com>
Date:   Sat Nov 1 14:08:27 2008 +0000

    + Framework: add require_midi flag to plugins, generate LV2 requiredFeature from it, more API documentation to giface.h

diff --git a/src/calf/giface.h b/src/calf/giface.h
index 55a1003..91690ab 100644
--- a/src/calf/giface.h
+++ b/src/calf/giface.h
@@ -220,30 +220,43 @@ struct plugin_ctl_iface
     virtual ~plugin_ctl_iface() {}
 };
 
-struct midi_event {
-    uint8_t command;
-    uint8_t param1;
-    uint16_t param2;
-    float param3;
-};
-
 struct ladspa_plugin_info
 {
+    /// LADSPA ID
     uint32_t unique_id;
+    /// plugin short name (camel case)
     const char *label;
+    /// plugin human-readable name
     const char *name;
+    /// maker (author)
     const char *maker;
+    /// copyright notice
     const char *copyright;
+    /// plugin type for LRDF/LV2
     const char *plugin_type;
 };
 
 struct giface_plugin_info
 {
+    /// information like LADSPA ID, LADSPA label, name, maker, copyright and LRDF/LV2 plugin type (category)
     ladspa_plugin_info *info;
-    int inputs, outputs, params;
-    bool rt_capable, midi_in_capable;
+    /// number of inputs
+    int inputs;
+    /// number of outputs
+    int outputs;
+    /// number of control ports (inputs or outputs)
+    int params;
+    /// is realtime-capable?
+    bool rt_capable;
+    /// has MIDI input?
+    bool midi_in_capable;
+    /// requires MIDI input handling (a synth or equivalent)
+    bool midi_in_required;
+    /// parameter properties structure
     parameter_properties *param_props;
+    /// is a given parameter a control voltage?
     bool (*is_cv)(int param_no);
+    /// is the given parameter non-interpolated?
     bool (*is_noisy)(int param_no);
 };
 
diff --git a/src/calf/modules.h b/src/calf/modules.h
index aa6fba9..6a6b297 100644
--- a/src/calf/modules.h
+++ b/src/calf/modules.h
@@ -91,7 +91,7 @@ public:
 class amp_audio_module: public null_audio_module
 {
 public:
-    enum { in_count = 2, out_count = 2, param_count = 1, support_midi = false, rt_capable = true };
+    enum { in_count = 2, out_count = 2, param_count = 1, support_midi = false, require_midi = false, rt_capable = true };
     float *ins[2]; 
     float *outs[2];
     float *params[1];
@@ -118,7 +118,7 @@ class flanger_audio_module: public null_audio_module
 {
 public:
     enum { par_delay, par_depth, par_rate, par_fb, par_stereo, par_reset, par_amount, param_count };
-    enum { in_count = 2, out_count = 2, support_midi = false, rt_capable = true };
+    enum { in_count = 2, out_count = 2, support_midi = false, require_midi = false, rt_capable = true };
     static const char *port_names[in_count + out_count];
     static synth::ladspa_plugin_info plugin_info;
     dsp::simple_flanger<float, 2048> left, right;
@@ -189,7 +189,7 @@ class phaser_audio_module: public null_audio_module
 {
 public:
     enum { par_freq, par_depth, par_rate, par_fb, par_stages, par_stereo, par_reset, par_amount, param_count };
-    enum { in_count = 2, out_count = 2, support_midi = false, rt_capable = true };
+    enum { in_count = 2, out_count = 2, support_midi = false, require_midi = false, rt_capable = true };
     static const char *port_names[in_count + out_count];
     static synth::ladspa_plugin_info plugin_info;
     float *ins[in_count]; 
@@ -262,7 +262,7 @@ class reverb_audio_module: public null_audio_module
 {
 public:    
     enum { par_decay, par_hfdamp, par_roomsize, par_diffusion, par_amount, param_count };
-    enum { in_count = 2, out_count = 2, support_midi = false, rt_capable = true };
+    enum { in_count = 2, out_count = 2, support_midi = false, require_midi = false, rt_capable = true };
     static const char *port_names[in_count + out_count];
     static synth::ladspa_plugin_info plugin_info;
     dsp::reverb<float> reverb;
@@ -311,7 +311,7 @@ class filter_audio_module: public null_audio_module
 {
 public:    
     enum { par_cutoff, par_resonance, par_mode, par_inertia, param_count };
-    enum { in_count = 2, out_count = 2, rt_capable = true, support_midi = false };
+    enum { in_count = 2, out_count = 2, rt_capable = true, require_midi = false, support_midi = false };
     float *ins[in_count]; 
     float *outs[out_count];
     float *params[param_count];
@@ -466,7 +466,7 @@ public:
     // 1MB of delay memory per channel... uh, RAM is cheap
     enum { MAX_DELAY = 262144, ADDR_MASK = MAX_DELAY - 1 };
     enum { par_bpm, par_divide, par_time_l, par_time_r, par_feedback, par_amount, par_mixmode, par_medium, param_count };
-    enum { in_count = 2, out_count = 2, rt_capable = true, support_midi = false };
+    enum { in_count = 2, out_count = 2, rt_capable = true, support_midi = false, require_midi = false };
     float *ins[in_count]; 
     float *outs[out_count];
     float *params[param_count];
@@ -576,7 +576,7 @@ class rotary_speaker_audio_module: public null_audio_module
 {
 public:
     enum { par_speed, par_spacing, par_shift, par_moddepth, par_treblespeed, par_bassspeed, par_micdistance, par_reflection, param_count };
-    enum { in_count = 2, out_count = 2, support_midi = true, rt_capable = true };
+    enum { in_count = 2, out_count = 2, support_midi = true, require_midi = false, rt_capable = true };
     static const char *port_names[];
     float *ins[in_count]; 
     float *outs[out_count];
@@ -775,7 +775,7 @@ class multichorus_audio_module: public null_audio_module
 {
 public:    
     enum { par_delay, par_depth, par_rate, par_stereo, par_voices, par_vphase, par_amount, par_lfophase_l, par_lfophase_r, param_count };
-    enum { in_count = 2, out_count = 2, rt_capable = true, support_midi = false };
+    enum { in_count = 2, out_count = 2, rt_capable = true, support_midi = false, require_midi = false };
     float *ins[in_count]; 
     float *outs[out_count];
     float *params[param_count];
diff --git a/src/calf/modules_synths.h b/src/calf/modules_synths.h
index de4458c..35ca5d2 100644
--- a/src/calf/modules_synths.h
+++ b/src/calf/modules_synths.h
@@ -42,7 +42,7 @@ public:
     enum { wave_saw, wave_sqr, wave_pulse, wave_sine, wave_triangle, wave_varistep, wave_skewsaw, wave_skewsqr, wave_test1, wave_test2, wave_test3, wave_test4, wave_test5, wave_test6, wave_test7, wave_test8, wave_count };
     enum { flt_lp12, flt_lp24, flt_2lp12, flt_hp12, flt_lpbr, flt_hpbr, flt_bp6, flt_2bp6 };
     enum { par_wave1, par_wave2, par_detune, par_osc2xpose, par_oscmode, par_oscmix, par_filtertype, par_cutoff, par_resonance, par_cutoffsep, par_envmod, par_envtores, par_envtoamp, par_attack, par_decay, par_sustain, par_release, par_keyfollow, par_legato, par_portamento, par_vel2filter, par_vel2amp, par_master, param_count };
-    enum { in_count = 0, out_count = 2, support_midi = true, rt_capable = true };
+    enum { in_count = 0, out_count = 2, support_midi = true, require_midi = true, rt_capable = true };
     enum { step_size = 64 };
     static const char *port_names[];
     static synth::ladspa_plugin_info plugin_info;
@@ -220,7 +220,7 @@ public:
     using drawbar_organ::note_on;
     using drawbar_organ::note_off;
     using drawbar_organ::control_change;
-    enum { in_count = 0, out_count = 2, support_midi = true, rt_capable = true };
+    enum { in_count = 0, out_count = 2, support_midi = true, require_midi = true, rt_capable = true };
     static const char *port_names[];
     float *ins[in_count]; 
     float *outs[out_count];
diff --git a/src/makerdf.cpp b/src/makerdf.cpp
index 19ed05c..82ae658 100644
--- a/src/makerdf.cpp
+++ b/src/makerdf.cpp
@@ -27,6 +27,7 @@
 #include <calf/plugininfo.h>
 #if USE_LV2
 #include <calf/lv2_event.h>
+#include <calf/lv2_uri_map.h>
 #endif
 
 using namespace std;
@@ -434,8 +435,16 @@ void make_ttl(string path_prefix)
         if (pi.rt_capable)
             ttl += "    lv2:optionalFeature lv2:hardRtCapable ;\n";
         if (pi.midi_in_capable)
-            ttl += "    lv2:optionalFeature <" LV2_EVENT_URI "> ;\n";
-            // ttl += "    lv2:requiredFeature <" LV2_EVENT_URI "> ;\n";
+        {
+            if (pi.midi_in_required) {
+                ttl += "    lv2:requiredFeature <" LV2_EVENT_URI "> ;\n";
+                ttl += "    lv2:requiredFeature <" LV2_URI_MAP_URI "> ;\n";                
+            }
+            else {
+                ttl += "    lv2:optionalFeature <" LV2_EVENT_URI "> ;\n";
+                ttl += "    lv2:optionalFeature <" LV2_URI_MAP_URI "> ;\n";                
+            }
+        }
         
         string ports = "";
         int pn = 0;
diff --git a/src/modules.cpp b/src/modules.cpp
index b8e6359..aa926a5 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -185,6 +185,7 @@ giface_plugin_info create_plugin_info(ladspa_plugin_info &info)
     pi.params = Module::param_count;
     pi.rt_capable = Module::rt_capable;
     pi.midi_in_capable = Module::support_midi;
+    pi.midi_in_required = Module::require_midi;
     pi.param_props = Module::param_props;
     pi.is_noisy = Module::is_noisy;
     pi.is_cv = Module::is_cv;

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list