aboutsummaryrefslogtreecommitdiffstats
path: root/src/adenv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/adenv.c')
-rw-r--r--src/adenv.c250
1 files changed, 63 insertions, 187 deletions
diff --git a/src/adenv.c b/src/adenv.c
index 1c75688..81b54f4 100644
--- a/src/adenv.c
+++ b/src/adenv.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.
Copyright 2005 Loki Davison
based on ADENV by Mike Rawes
@@ -21,20 +21,11 @@
#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 ADENV_BASE_ID 2661
-#define ADENV_VARIANT_COUNT 1
#define ADENV_GATE 0
#define ADENV_TRIGGER 1
@@ -42,7 +33,7 @@
#define ADENV_DECAY 3
#define ADENV_OUTPUT 4
-LADSPA_Descriptor **dahdsr_descriptors = 0;
+LV2_Descriptor **dahdsr_descriptors = 0;
typedef enum {
IDLE,
@@ -51,39 +42,31 @@ typedef enum {
} ADENVState;
typedef struct {
- LADSPA_Data *gate;
- LADSPA_Data *trigger;
- LADSPA_Data *attack;
- LADSPA_Data *decay;
- 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 *attack;
+ float *decay;
+ float *output;
+ float srate;
+ float inv_srate;
+ float last_gate;
+ float last_trigger;
+ float from_level;
+ float level;
ADENVState state;
unsigned long samples;
} Dahdsr;
-const LADSPA_Descriptor *
-ladspa_descriptor(unsigned long index)
-{
- if (index < ADENV_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;
@@ -106,20 +89,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;
@@ -131,38 +116,38 @@ 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;
/* 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 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;
ADENVState 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 */
@@ -174,7 +159,7 @@ runDahdsr_Control(LADSPA_Handle instance, unsigned long sample_count)
* while (currentSample < endSample) Level += Level * ReleaseCoeff;
*/
- LADSPA_Data ReleaseCoeff = log(0.001) / (decay * srate);
+ float ReleaseCoeff = log(0.001) / (decay * srate);
for (s = 0; s < sample_count; s++) {
gat = gate[s];
@@ -201,7 +186,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 = DECAY;
@@ -213,7 +198,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 = IDLE;
@@ -244,131 +229,22 @@ runDahdsr_Control(LADSPA_Handle instance, unsigned long sample_count)
plugin->samples = samples;
}
-void
-_init(void)
-{
- static const unsigned long ids[] = { ADENV_BASE_ID };
- static const char *labels[] = { "adenv" };
- static const char *names[] = { G_NOP("Percussive AD Envelope") };
- 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 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(ADENV_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 = 5;
-
- port_descriptors =
- (LADSPA_PortDescriptor *) calloc(5,
- sizeof
- (LADSPA_PortDescriptor));
- descriptor->PortDescriptors =
- (const LADSPA_PortDescriptor *)port_descriptors;
-
- port_range_hints =
- (LADSPA_PortRangeHint *) calloc(5,
- sizeof(LADSPA_PortRangeHint));
- descriptor->PortRangeHints =
- (const LADSPA_PortRangeHint *)port_range_hints;
-
- port_names = (char **)calloc(5, sizeof(char *));
- descriptor->PortNames = (const char **)port_names;
-
- /* Parameters for Gate */
- port_descriptors[ADENV_GATE] = gate_port_descriptors[i];
- port_names[ADENV_GATE] = G_("Gate");
- port_range_hints[ADENV_GATE].HintDescriptor =
- LADSPA_HINT_TOGGLED;
-
- /* Parameters for Trigger */
- port_descriptors[ADENV_TRIGGER] = trigger_port_descriptors[i];
- port_names[ADENV_TRIGGER] = G_("Trigger");
- port_range_hints[ADENV_TRIGGER].HintDescriptor =
- LADSPA_HINT_TOGGLED;
-
- /* Parameters for Attack Time (s) */
- port_descriptors[ADENV_ATTACK] = attack_port_descriptors[i];
- port_names[ADENV_ATTACK] = G_("Attack Time (s)");
- port_range_hints[ADENV_ATTACK].HintDescriptor =
- LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MINIMUM;
- port_range_hints[ADENV_ATTACK].LowerBound = 0.0f;
-
- /* Parameters for Decay Time (s) */
- port_descriptors[ADENV_DECAY] = decay_port_descriptors[i];
- port_names[ADENV_DECAY] = G_("Decay Time (s)");
- port_range_hints[ADENV_DECAY].HintDescriptor =
- LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MINIMUM;
- port_range_hints[ADENV_DECAY].LowerBound = 0.0f;
-
- /* Parameters for Envelope Out */
- port_descriptors[ADENV_OUTPUT] = output_port_descriptors[i];
- port_names[ADENV_OUTPUT] = G_("Envelope Out");
- port_range_hints[ADENV_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/adenv",
+ instantiate,
+ connect_port,
+ activate,
+ run,
+ NULL,
+ cleanup,
+ NULL,
+};
+
+LV2_SYMBOL_EXPORT const LV2_Descriptor*
+lv2_descriptor(uint32_t index)
{
- 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;
}
}