From 6a651aca0de7262e805ff8edb12cdc4692009997 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 19 Aug 2012 19:24:44 +0000 Subject: Move omins to plugins directory. git-svn-id: http://svn.drobilla.net/lad/trunk/plugins/omins.lv2@4725 a436a847-0d15-0410-975c-d299462d15a1 --- src/dahdsr_fexp.c | 317 +++++++++++++----------------------------------------- 1 file changed, 74 insertions(+), 243 deletions(-) (limited to 'src/dahdsr_fexp.c') diff --git a/src/dahdsr_fexp.c b/src/dahdsr_fexp.c index 960d8e8..116316b 100644 --- a/src/dahdsr_fexp.c +++ b/src/dahdsr_fexp.c @@ -1,5 +1,5 @@ /* - dahdsr_fexp.c - A LADSPA plugin to generate DAHDSR envelopes + dahdsr_fexp.c - A LV2 plugin to generate DAHDSR envelopes exponential attack, decay and release version. Copyright 2005 Loki Davison, based on DAHDSR by Mike Rawes @@ -20,19 +20,9 @@ #define _XOPEN_SOURCE 500 /* strdup */ #include -#include +#include #include -#ifdef ENABLE_NLS -# include -# 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,8 +33,6 @@ #define DAHDSR_RELEASE 7 #define DAHDSR_OUTPUT 8 -LADSPA_Descriptor **dahdsr_descriptors = 0; - typedef enum { IDLE, DELAY, @@ -56,43 +44,34 @@ 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 +106,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 +133,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 +194,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 +238,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 +251,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 +266,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 +276,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 +291,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,172 +320,22 @@ runDahdsr_Control(LADSPA_Handle instance, unsigned long sample_count) plugin->samples = samples; } -void -_init(void) +static const LV2_Descriptor descriptor = { + "http://drobilla.net/plugins/omins/dahdsr_fexp", + instantiate, + connect_port, + activate, + run, + NULL, + cleanup, + NULL, +}; + +LV2_SYMBOL_EXPORT const LV2_Descriptor* +lv2_descriptor(uint32_t index) { - static const unsigned long ids[] = { 2664 }; - static const char *labels[] = { "dahdsr_fexp" }; - static const char *names[] = { G_NOP("DAHDSR Envelope full exp, adr") }; - 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 "; - 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) -{ - 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; } } -- cgit v1.2.1