aboutsummaryrefslogtreecommitdiffstats
path: root/src/dahdsr_hexp.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-08-19 19:24:44 +0000
committerDavid Robillard <d@drobilla.net>2012-08-19 19:24:44 +0000
commit6a651aca0de7262e805ff8edb12cdc4692009997 (patch)
treef14451d008ea578c162df85d2e2605a227bf4bf6 /src/dahdsr_hexp.c
parent5de48cab1d561e6b37502fe823922b94d1489eda (diff)
Move omins to plugins directory.
git-svn-id: http://svn.drobilla.net/lad/trunk/plugins/omins.lv2@4725 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/dahdsr_hexp.c')
-rw-r--r--src/dahdsr_hexp.c319
1 files changed, 76 insertions, 243 deletions
diff --git a/src/dahdsr_hexp.c b/src/dahdsr_hexp.c
index e0147e4..32e9dec 100644
--- a/src/dahdsr_hexp.c
+++ b/src/dahdsr_hexp.c
@@ -1,5 +1,5 @@
/*
- dahdsr.so.c - A LADSPA plugin to generate DAHDSR envelopes
+ dahdsr.so.c - A LV2 plugin to generate DAHDSR envelopes
linear attack, exponential decay and release version.
Copyright 2005 Loki Davison, based on DAHDSR by Mike Rawes
@@ -20,19 +20,9 @@
#define _XOPEN_SOURCE 500 /* strdup */
#include <stdlib.h>
-#include <ladspa.h>
+#include <lv2/lv2plug.in/ns/lv2core/lv2.h>
#include <math.h>
-#ifdef ENABLE_NLS
-# include <locale.h>
-# define G_(s) gettext(s)
-#else
-# define G_(s) (s)
-#endif
-#define G_NOP(s) s
-
-#define DAHDSR_VARIANT_COUNT 1
-
#define DAHDSR_GATE 0
#define DAHDSR_TRIGGER 1
#define DAHDSR_DELAY 2
@@ -43,7 +33,7 @@
#define DAHDSR_RELEASE 7
#define DAHDSR_OUTPUT 8
-LADSPA_Descriptor **dahdsr_descriptors = 0;
+LV2_Descriptor **dahdsr_descriptors = 0;
typedef enum {
IDLE,
@@ -56,43 +46,35 @@ typedef enum {
} DAHDSRState;
typedef struct {
- LADSPA_Data *gate;
- LADSPA_Data *trigger;
- LADSPA_Data *delay;
- LADSPA_Data *attack;
- LADSPA_Data *hold;
- LADSPA_Data *decay;
- LADSPA_Data *sustain;
- LADSPA_Data *release;
- LADSPA_Data *output;
- LADSPA_Data srate;
- LADSPA_Data inv_srate;
- LADSPA_Data last_gate;
- LADSPA_Data last_trigger;
- LADSPA_Data from_level;
- LADSPA_Data level;
+ float *gate;
+ float *trigger;
+ float *delay;
+ float *attack;
+ float *hold;
+ float *decay;
+ float *sustain;
+ float *release;
+ float *output;
+ float srate;
+ float inv_srate;
+ float last_gate;
+ float last_trigger;
+ float from_level;
+ float level;
DAHDSRState state;
unsigned long samples;
} Dahdsr;
-const LADSPA_Descriptor *
-ladspa_descriptor(unsigned long index)
-{
- if (index < DAHDSR_VARIANT_COUNT)
- return dahdsr_descriptors[index];
-
- return 0;
-}
-
-void
-cleanupDahdsr(LADSPA_Handle instance)
+static void
+cleanup(LV2_Handle instance)
{
free(instance);
}
-void
-connectPortDahdsr(LADSPA_Handle instance,
- unsigned long port, LADSPA_Data * data)
+static void
+connect_port(LV2_Handle instance,
+ uint32_t port,
+ void* data)
{
Dahdsr *plugin = (Dahdsr *) instance;
@@ -127,20 +109,22 @@ connectPortDahdsr(LADSPA_Handle instance,
}
}
-LADSPA_Handle
-instantiateDahdsr(const LADSPA_Descriptor * descriptor,
- unsigned long sample_rate)
+static LV2_Handle
+instantiate(const LV2_Descriptor* descriptor,
+ double sample_rate,
+ const char* bundle_path,
+ const LV2_Feature* const* features)
{
Dahdsr *plugin = (Dahdsr *) malloc(sizeof(Dahdsr));
- plugin->srate = (LADSPA_Data) sample_rate;
+ plugin->srate = (float) sample_rate;
plugin->inv_srate = 1.0f / plugin->srate;
- return (LADSPA_Handle) plugin;
+ return (LV2_Handle) plugin;
}
-void
-activateDahdsr(LADSPA_Handle instance)
+static void
+activate(LV2_Handle instance)
{
Dahdsr *plugin = (Dahdsr *) instance;
@@ -152,50 +136,50 @@ activateDahdsr(LADSPA_Handle instance)
plugin->samples = 0;
}
-void
-runDahdsr_Control(LADSPA_Handle instance, unsigned long sample_count)
+static void
+run(LV2_Handle instance, uint32_t sample_count)
{
Dahdsr *plugin = (Dahdsr *) instance;
/* Gate */
- LADSPA_Data *gate = plugin->gate;
+ float *gate = plugin->gate;
/* Trigger */
- LADSPA_Data *trigger = plugin->trigger;
+ float *trigger = plugin->trigger;
/* Delay Time (s) */
- LADSPA_Data delay = *(plugin->delay);
+ float delay = *(plugin->delay);
/* Attack Time (s) */
- LADSPA_Data attack = *(plugin->attack);
+ float attack = *(plugin->attack);
/* Hold Time (s) */
- LADSPA_Data hold = *(plugin->hold);
+ float hold = *(plugin->hold);
/* Decay Time (s) */
- LADSPA_Data decay = *(plugin->decay);
+ float decay = *(plugin->decay);
/* Sustain Level */
- LADSPA_Data sustain = *(plugin->sustain);
+ float sustain = *(plugin->sustain);
/* Release Time (s) */
- LADSPA_Data release = *(plugin->release);
+ float release = *(plugin->release);
/* Envelope Out */
- LADSPA_Data *output = plugin->output;
+ float *output = plugin->output;
/* Instance Data */
- LADSPA_Data srate = plugin->srate;
- LADSPA_Data inv_srate = plugin->inv_srate;
- LADSPA_Data last_gate = plugin->last_gate;
- LADSPA_Data last_trigger = plugin->last_trigger;
- LADSPA_Data from_level = plugin->from_level;
- LADSPA_Data level = plugin->level;
+ float srate = plugin->srate;
+ float inv_srate = plugin->inv_srate;
+ float last_gate = plugin->last_gate;
+ float last_trigger = plugin->last_trigger;
+ float from_level = plugin->from_level;
+ float level = plugin->level;
DAHDSRState state = plugin->state;
unsigned long samples = plugin->samples;
- LADSPA_Data gat, trg, del, att, hld, dec, sus, rel;
- LADSPA_Data elapsed;
+ float gat, trg, del, att, hld, dec, sus, rel;
+ float elapsed;
unsigned long s;
/* Convert times into rates */
@@ -213,9 +197,9 @@ runDahdsr_Control(LADSPA_Handle instance, unsigned long sample_count)
sus = 1.0f;
}
- //LADSPA_Data ReleaseCoeff_att = (0 - log(0.001)) / (attack * srate);
- LADSPA_Data ReleaseCoeff_dec = (log(sus)) / (decay * srate);
- LADSPA_Data ReleaseCoeff_rel =
+ //float ReleaseCoeff_att = (0 - log(0.001)) / (attack * srate);
+ float ReleaseCoeff_dec = (log(sus)) / (decay * srate);
+ float ReleaseCoeff_rel =
(log(0.001) - log(sus)) / (release * srate);
for (s = 0; s < sample_count; s++) {
@@ -257,7 +241,7 @@ runDahdsr_Control(LADSPA_Handle instance, unsigned long sample_count)
break;
case DELAY:
samples++;
- elapsed = (LADSPA_Data) samples *del;
+ elapsed = (float) samples *del;
if (elapsed > 1.0f) {
state = att < srate ? ATTACK
@@ -270,7 +254,7 @@ runDahdsr_Control(LADSPA_Handle instance, unsigned long sample_count)
break;
case ATTACK:
samples++;
- elapsed = (LADSPA_Data) samples *att;
+ elapsed = (float) samples *att;
if (elapsed > 1.0f) {
state = hld < srate ? HOLD
@@ -285,7 +269,7 @@ runDahdsr_Control(LADSPA_Handle instance, unsigned long sample_count)
break;
case HOLD:
samples++;
- elapsed = (LADSPA_Data) samples *hld;
+ elapsed = (float) samples *hld;
if (elapsed > 1.0f) {
state = dec < srate ? DECAY
@@ -295,7 +279,7 @@ runDahdsr_Control(LADSPA_Handle instance, unsigned long sample_count)
break;
case DECAY:
samples++;
- elapsed = (LADSPA_Data) samples *dec;
+ elapsed = (float) samples *dec;
if (elapsed > 1.0f) {
state = gat > 0.0f ? SUSTAIN : (rel < srate ? RELEASE : IDLE);
@@ -310,7 +294,7 @@ runDahdsr_Control(LADSPA_Handle instance, unsigned long sample_count)
break;
case RELEASE:
samples++;
- elapsed = (LADSPA_Data) samples *rel;
+ elapsed = (float) samples *rel;
if (elapsed > 1.0f) {
state = IDLE;
@@ -339,173 +323,22 @@ runDahdsr_Control(LADSPA_Handle instance, unsigned long sample_count)
plugin->samples = samples;
}
-void
-_init(void)
-{
- static const unsigned long ids[] = { 2663 };
- static const char *labels[] = { "dahdsr_hexp" };
- static const char *names[] =
- { G_NOP("DAHDSR Envelope linear attack exp dr") };
- char **port_names;
- LADSPA_PortDescriptor *port_descriptors;
- LADSPA_PortRangeHint *port_range_hints;
- LADSPA_Descriptor *descriptor;
-
- LADSPA_PortDescriptor gate_port_descriptors[] =
- { LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO };
- LADSPA_PortDescriptor trigger_port_descriptors[] =
- { LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO };
- LADSPA_PortDescriptor delay_port_descriptors[] =
- { LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL };
- LADSPA_PortDescriptor attack_port_descriptors[] =
- { LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL };
- LADSPA_PortDescriptor hold_port_descriptors[] =
- { LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL };
- LADSPA_PortDescriptor decay_port_descriptors[] =
- { LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL };
- LADSPA_PortDescriptor sustain_port_descriptors[] =
- { LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL };
- LADSPA_PortDescriptor release_port_descriptors[] =
- { LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL };
- LADSPA_PortDescriptor output_port_descriptors[] =
- { LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO };
-
- void (*run_functions[]) (LADSPA_Handle, unsigned long) = {
- runDahdsr_Control};
-
-#ifdef ENABLE_NLS
- setlocale(LC_ALL, "");
- bindtextdomain(PACKAGE, LOCALEDIR);
- textdomain(PACKAGE);
-#endif
-
- dahdsr_descriptors =
- (LADSPA_Descriptor **) calloc(DAHDSR_VARIANT_COUNT,
- sizeof(LADSPA_Descriptor));
-
- if (dahdsr_descriptors) {
- int i = 0;
-
- dahdsr_descriptors[i] =
- (LADSPA_Descriptor *) malloc(sizeof(LADSPA_Descriptor));
- descriptor = dahdsr_descriptors[i];
- if (descriptor) {
- descriptor->UniqueID = ids[i];
- descriptor->Label = labels[i];
- descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE;
- descriptor->Name = G_(names[i]);
- descriptor->Maker =
- "Loki Davison <ltdav1[at]student.monash.edu.au>";
- descriptor->Copyright = "GPL";
-
- descriptor->PortCount = 9;
-
- port_descriptors =
- (LADSPA_PortDescriptor *) calloc(9,
- sizeof
- (LADSPA_PortDescriptor));
- descriptor->PortDescriptors =
- (const LADSPA_PortDescriptor *)port_descriptors;
-
- port_range_hints =
- (LADSPA_PortRangeHint *) calloc(9,
- sizeof(LADSPA_PortRangeHint));
- descriptor->PortRangeHints =
- (const LADSPA_PortRangeHint *)port_range_hints;
-
- port_names = (char **)calloc(9, sizeof(char *));
- descriptor->PortNames = (const char **)port_names;
-
- /* Parameters for Gate */
- port_descriptors[DAHDSR_GATE] = gate_port_descriptors[i];
- port_names[DAHDSR_GATE] = G_("Gate");
- port_range_hints[DAHDSR_GATE].HintDescriptor =
- LADSPA_HINT_TOGGLED;
-
- /* Parameters for Trigger */
- port_descriptors[DAHDSR_TRIGGER] = trigger_port_descriptors[i];
- port_names[DAHDSR_TRIGGER] = G_("Trigger");
- port_range_hints[DAHDSR_TRIGGER].HintDescriptor =
- LADSPA_HINT_TOGGLED;
-
- /* Parameters for Delay Time (s) */
- port_descriptors[DAHDSR_DELAY] = delay_port_descriptors[i];
- port_names[DAHDSR_DELAY] = G_("Delay Time (s)");
- port_range_hints[DAHDSR_DELAY].HintDescriptor =
- LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MINIMUM;
- port_range_hints[DAHDSR_DELAY].LowerBound = 0.0f;
-
- /* Parameters for Attack Time (s) */
- port_descriptors[DAHDSR_ATTACK] = attack_port_descriptors[i];
- port_names[DAHDSR_ATTACK] = G_("Attack Time (s)");
- port_range_hints[DAHDSR_ATTACK].HintDescriptor =
- LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MINIMUM;
- port_range_hints[DAHDSR_ATTACK].LowerBound = 0.0f;
-
- /* Parameters for Hold Time (s) */
- port_descriptors[DAHDSR_HOLD] = hold_port_descriptors[i];
- port_names[DAHDSR_HOLD] = G_("Hold Time (s)");
- port_range_hints[DAHDSR_HOLD].HintDescriptor =
- LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MINIMUM;
- port_range_hints[DAHDSR_HOLD].LowerBound = 0.0f;
-
- /* Parameters for Decay Time (s) */
- port_descriptors[DAHDSR_DECAY] = decay_port_descriptors[i];
- port_names[DAHDSR_DECAY] = G_("Decay Time (s)");
- port_range_hints[DAHDSR_DECAY].HintDescriptor =
- LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MINIMUM;
- port_range_hints[DAHDSR_DECAY].LowerBound = 0.0f;
-
- /* Parameters for Sustain Level */
- port_descriptors[DAHDSR_SUSTAIN] = sustain_port_descriptors[i];
- port_names[DAHDSR_SUSTAIN] = G_("Sustain Level");
- port_range_hints[DAHDSR_SUSTAIN].HintDescriptor =
- LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE |
- LADSPA_HINT_DEFAULT_MAXIMUM;
- port_range_hints[DAHDSR_SUSTAIN].LowerBound = 0.0f;
- port_range_hints[DAHDSR_SUSTAIN].UpperBound = 1.0f;
-
- /* Parameters for Release Time (s) */
- port_descriptors[DAHDSR_RELEASE] = release_port_descriptors[i];
- port_names[DAHDSR_RELEASE] = G_("Release Time (s)");
- port_range_hints[DAHDSR_RELEASE].HintDescriptor =
- LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MINIMUM;
- port_range_hints[DAHDSR_RELEASE].LowerBound = 0.0f;
-
- /* Parameters for Envelope Out */
- port_descriptors[DAHDSR_OUTPUT] = output_port_descriptors[i];
- port_names[DAHDSR_OUTPUT] = G_("Envelope Out");
- port_range_hints[DAHDSR_OUTPUT].HintDescriptor = 0;
-
- descriptor->activate = activateDahdsr;
- descriptor->cleanup = cleanupDahdsr;
- descriptor->connect_port = connectPortDahdsr;
- descriptor->deactivate = NULL;
- descriptor->instantiate = instantiateDahdsr;
- descriptor->run = run_functions[i];
- descriptor->run_adding = NULL;
- descriptor->set_run_adding_gain = NULL;
-
- }
- }
-}
-
-void
-_fini(void)
+static const LV2_Descriptor descriptor = {
+ "http://drobilla.net/plugins/omins/dahdsr_hexp",
+ instantiate,
+ connect_port,
+ activate,
+ run,
+ NULL,
+ cleanup,
+ NULL,
+};
+
+LV2_SYMBOL_EXPORT const LV2_Descriptor*
+lv2_descriptor(uint32_t index)
{
- LADSPA_Descriptor *descriptor;
- int i;
-
- if (dahdsr_descriptors) {
- for (i = 0; i < DAHDSR_VARIANT_COUNT; i++) {
- descriptor = dahdsr_descriptors[i];
- if (descriptor) {
- free((LADSPA_PortDescriptor *) descriptor->PortDescriptors);
- free((char **)descriptor->PortNames);
- free((LADSPA_PortRangeHint *) descriptor->PortRangeHints);
- free(descriptor);
- }
- }
- free(dahdsr_descriptors);
+ switch (index) {
+ case 0: return &descriptor;
+ default: return NULL;
}
}