aboutsummaryrefslogtreecommitdiffstats
path: root/src/adenv_lvl.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/adenv_lvl.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/adenv_lvl.c')
-rw-r--r--src/adenv_lvl.c302
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;
}
}