diff options
author | David Robillard <d@drobilla.net> | 2012-08-19 19:24:44 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2012-08-19 19:24:44 +0000 |
commit | 6a651aca0de7262e805ff8edb12cdc4692009997 (patch) | |
tree | f14451d008ea578c162df85d2e2605a227bf4bf6 /src/adenv_lvl.c | |
parent | 5de48cab1d561e6b37502fe823922b94d1489eda (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/adenv_lvl.c')
-rw-r--r-- | src/adenv_lvl.c | 302 |
1 files changed, 70 insertions, 232 deletions
diff --git a/src/adenv_lvl.c b/src/adenv_lvl.c index 1ba2a26..2c57530 100644 --- a/src/adenv_lvl.c +++ b/src/adenv_lvl.c @@ -1,5 +1,5 @@ /* - adenv.c - A LADSPA plugin to generate percussive (i.e no sustain time), linear AD envelopes. + adenv.c - A LV2 plugin to generate percussive (i.e no sustain time), linear AD envelopes. This one takes in levels to make filter sweeps/etc easier. Copyright 2005 Loki Davison @@ -22,18 +22,10 @@ #define _XOPEN_SOURCE 500 /* strdup */ #include <stdlib.h> -#include <ladspa.h> +#include <lv2/lv2plug.in/ns/lv2core/lv2.h> #include <stdio.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 ADENVLVL_BASE_ID 2662 #define ADENVLVL_VARIANT_COUNT 1 @@ -47,8 +39,6 @@ #define ADENVLVL_OUTPUT 7 #define ADENVLVL_RESET 8 -LADSPA_Descriptor **dahdsr_descriptors = 0; - typedef enum { IDLE, ATTACK, @@ -56,43 +46,34 @@ typedef enum { } ADENVLVLState; typedef struct { - LADSPA_Data *gate; - LADSPA_Data *trigger; - LADSPA_Data *attack; - LADSPA_Data *reset; - LADSPA_Data *decay; - LADSPA_Data *start_level; - LADSPA_Data *attack_level; - LADSPA_Data *decay_level; - LADSPA_Data *output; - LADSPA_Data srate; - LADSPA_Data inv_srate; - LADSPA_Data last_gate; - LADSPA_Data last_trigger; - LADSPA_Data last_reset; - LADSPA_Data level; + float *gate; + float *trigger; + float *attack; + float *reset; + float *decay; + float *start_level; + float *attack_level; + float *decay_level; + float *output; + float srate; + float inv_srate; + float last_gate; + float last_trigger; + float last_reset; + float level; ADENVLVLState state; unsigned long samples; } Dahdsr; -const LADSPA_Descriptor * -ladspa_descriptor(unsigned long index) -{ - if (index < ADENVLVL_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 +108,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 +135,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; /* Reset */ - LADSPA_Data *reset = plugin->reset; + float *reset = plugin->reset; /* Start Level */ - LADSPA_Data start_level = *(plugin->start_level); + float start_level = *(plugin->start_level); /* Attack Level */ - LADSPA_Data attack_level = *(plugin->attack_level); + float attack_level = *(plugin->attack_level); /* Decay Level */ - LADSPA_Data decay_level = *(plugin->decay_level); + float decay_level = *(plugin->decay_level); /* Attack Time (s) */ - LADSPA_Data attack = *(plugin->attack); + float attack = *(plugin->attack); /* Decay Time (s) */ - LADSPA_Data decay = *(plugin->decay); + float decay = *(plugin->decay); /* 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 last_reset = plugin->last_reset; - 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 last_reset = plugin->last_reset; + float level = plugin->level; ADENVLVLState state = plugin->state; unsigned long samples = plugin->samples; - LADSPA_Data gat, trg, att, dec; - LADSPA_Data elapsed; + float gat, trg, att, dec; + float elapsed; unsigned long s; /* Convert times into rates */ @@ -216,9 +199,9 @@ runDahdsr_Control(LADSPA_Handle instance, unsigned long sample_count) if (decay_level == 0) { decay_level = 0.0000001; } - LADSPA_Data ReleaseCoeff_att = + float ReleaseCoeff_att = (log(attack_level) - log(start_level)) / (attack * srate); - LADSPA_Data ReleaseCoeff_dec = + float ReleaseCoeff_dec = (log(decay_level) - log(attack_level)) / (decay * srate); for (s = 0; s < sample_count; s++) { @@ -253,7 +236,7 @@ runDahdsr_Control(LADSPA_Handle instance, unsigned long sample_count) level = start_level; } samples++; - elapsed = (LADSPA_Data) samples *att; + elapsed = (float) samples *att; if (elapsed > 1.0f) { state = DECAY; @@ -265,7 +248,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) { //fprintf(stderr, "finished decay, RC %f , level %f decay_level %f start %f\n", ReleaseCoeff_dec, level, decay_level, start_level); @@ -295,167 +278,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/adenv_lvl", + instantiate, + connect_port, + activate, + run, + NULL, + cleanup, + NULL, +}; + +LV2_SYMBOL_EXPORT const LV2_Descriptor* +lv2_descriptor(uint32_t index) { - static const unsigned long ids[] = { ADENVLVL_BASE_ID }; - static const char *labels[] = { "adenv_lvl" }; - static const char *names[] = - { G_NOP("Percussive AD Envelope with levels") }; - 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 start_level_port_descriptors[] = - { LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL }; - LADSPA_PortDescriptor attack_level_port_descriptors[] = - { LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL }; - LADSPA_PortDescriptor decay_level_port_descriptors[] = - { LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL }; - LADSPA_PortDescriptor attack_port_descriptors[] = - { LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL }; - LADSPA_PortDescriptor decay_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(ADENVLVL_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[ADENVLVL_GATE] = gate_port_descriptors[i]; - port_names[ADENVLVL_GATE] = G_("Gate"); - port_range_hints[ADENVLVL_GATE].HintDescriptor = - LADSPA_HINT_TOGGLED; - - /* Parameters for Trigger */ - port_descriptors[ADENVLVL_TRIGGER] = trigger_port_descriptors[i]; - port_names[ADENVLVL_TRIGGER] = G_("Trigger"); - port_range_hints[ADENVLVL_TRIGGER].HintDescriptor = - LADSPA_HINT_TOGGLED; - /* Parameters for Reset */ - port_descriptors[ADENVLVL_RESET] = trigger_port_descriptors[i]; - port_names[ADENVLVL_RESET] = G_("Reset Level"); - port_range_hints[ADENVLVL_RESET].HintDescriptor = - LADSPA_HINT_TOGGLED; - - /* Parameters for Attack Time (s) */ - port_descriptors[ADENVLVL_ATTACK] = attack_port_descriptors[i]; - port_names[ADENVLVL_ATTACK] = G_("Attack Time (s)"); - port_range_hints[ADENVLVL_ATTACK].HintDescriptor = - LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MINIMUM; - port_range_hints[ADENVLVL_ATTACK].LowerBound = 0.0f; - - /* Parameters for Start Level */ - port_descriptors[ADENVLVL_START_LEVEL] = - start_level_port_descriptors[i]; - port_names[ADENVLVL_START_LEVEL] = G_("Initial Level"); - port_range_hints[ADENVLVL_START_LEVEL].HintDescriptor = - LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MINIMUM; - port_range_hints[ADENVLVL_START_LEVEL].LowerBound = 0.0f; - - /* Parameters for Attack to level (s) */ - port_descriptors[ADENVLVL_ATTACK_LEVEL] = - attack_level_port_descriptors[i]; - port_names[ADENVLVL_ATTACK_LEVEL] = G_("Attack to Level"); - port_range_hints[ADENVLVL_ATTACK_LEVEL].HintDescriptor = - LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_1; - port_range_hints[ADENVLVL_ATTACK_LEVEL].LowerBound = 0.0f; - - /* Parameters for Decay to level (s) */ - port_descriptors[ADENVLVL_DECAY_LEVEL] = - decay_level_port_descriptors[i]; - port_names[ADENVLVL_DECAY_LEVEL] = G_("Decay to Level"); - port_range_hints[ADENVLVL_DECAY_LEVEL].HintDescriptor = - LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MINIMUM; - port_range_hints[ADENVLVL_DECAY_LEVEL].LowerBound = 0.0f; - - /* Parameters for Decay Time (s) */ - port_descriptors[ADENVLVL_DECAY] = decay_port_descriptors[i]; - port_names[ADENVLVL_DECAY] = G_("Decay Time (s)"); - port_range_hints[ADENVLVL_DECAY].HintDescriptor = - LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MINIMUM; - port_range_hints[ADENVLVL_DECAY].LowerBound = 0.0f; - - /* Parameters for Envelope Out */ - port_descriptors[ADENVLVL_OUTPUT] = output_port_descriptors[i]; - port_names[ADENVLVL_OUTPUT] = G_("Envelope Out"); - port_range_hints[ADENVLVL_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; - - if (dahdsr_descriptors) { - descriptor = dahdsr_descriptors[0]; - 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; } } |