interesting parts of lv2 core done
This commit is contained in:
parent
8d577e7e46
commit
a0cb9dc8a0
1
TODO
1
TODO
@ -9,3 +9,4 @@
|
|||||||
* lv2: RDF/Turtle escape etc
|
* lv2: RDF/Turtle escape etc
|
||||||
* lv2: extra data, see also - should use plugin.ttl?
|
* lv2: extra data, see also - should use plugin.ttl?
|
||||||
* lv2: i18n?
|
* lv2: i18n?
|
||||||
|
* #if > 0 -> dotjs
|
||||||
|
@ -47,6 +47,24 @@
|
|||||||
{{?}}
|
{{?}}
|
||||||
{{?p.optional}}
|
{{?p.optional}}
|
||||||
lv2:portProperty lv2:connectionOptional ;
|
lv2:portProperty lv2:connectionOptional ;
|
||||||
|
{{?}}
|
||||||
|
{{?p.integer}}
|
||||||
|
lv2:portProperty lv2:integer ;
|
||||||
|
{{?}}
|
||||||
|
{{?p.scalePoints}}
|
||||||
|
lv2:scalePoint [
|
||||||
|
{{~Object.entries(p.scalePoints) :sp:j}}
|
||||||
|
rdfs:label "{{=sp[0]}}" ;
|
||||||
|
rdf:value {{=sp[1].toExponential()}}
|
||||||
|
{{?j < Object.entries(p.scalePoints).length - 1}}
|
||||||
|
] , [
|
||||||
|
{{??}}
|
||||||
|
] ;
|
||||||
|
{{?}}
|
||||||
|
{{~}}
|
||||||
|
{{?}}
|
||||||
|
{{?p.list}}
|
||||||
|
lv2:portProperty lv2:enumeration ;
|
||||||
{{?}}
|
{{?}}
|
||||||
lv2:index {{=i}}
|
lv2:index {{=i}}
|
||||||
{{?i < it.tibia.lv2.ports.length - 1}}
|
{{?i < it.tibia.lv2.ports.length - 1}}
|
||||||
|
@ -9,8 +9,10 @@
|
|||||||
|
|
||||||
# define DATA_PARAM_BYPASS 1
|
# define DATA_PARAM_BYPASS 1
|
||||||
# define DATA_PARAM_TOGGLED (1<<1)
|
# define DATA_PARAM_TOGGLED (1<<1)
|
||||||
|
# define DATA_PARAM_INTEGER (1<<2)
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
|
uint32_t index;
|
||||||
float min;
|
float min;
|
||||||
float max;
|
float max;
|
||||||
float def;
|
float def;
|
||||||
@ -18,12 +20,19 @@ static struct {
|
|||||||
} param_data[DATA_PRODUCT_CONTROL_INPUTS_N] = {
|
} param_data[DATA_PRODUCT_CONTROL_INPUTS_N] = {
|
||||||
{{~it.tibia.lv2.ports.filter(x => x.type == "control" && x.direction == "input") :p}}
|
{{~it.tibia.lv2.ports.filter(x => x.type == "control" && x.direction == "input") :p}}
|
||||||
{
|
{
|
||||||
|
/* .index = */ {{=p.paramIndex}},
|
||||||
/* .min = */ {{=p.minimum.toExponential()}}f,
|
/* .min = */ {{=p.minimum.toExponential()}}f,
|
||||||
/* .max = */ {{=p.maximum.toExponential()}}f,
|
/* .max = */ {{=p.maximum.toExponential()}}f,
|
||||||
/* .def = */ {{=p.defaultValue.toExponential()}}f,
|
/* .def = */ {{=p.defaultValue.toExponential()}}f,
|
||||||
/* .flags = */ 0{{?p.isBypass}} | DATA_PARAM_BYPASS{{?}}{{?p.toggled}} | DATA_PARAM_TOGGLED{{?}}
|
/* .flags = */ 0{{?p.isBypass}} | DATA_PARAM_BYPASS{{?}}{{?p.toggled}} | DATA_PARAM_TOGGLED{{?}}{{?p.integer}} | DATA_PARAM_INTEGER{{?}}
|
||||||
},
|
},
|
||||||
{{~}}
|
{{~}}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if DATA_PRODUCT_CONTROL_OUTPUTS_N > 0
|
||||||
|
static uint32_t param_out_index[DATA_PRODUCT_CONTROL_OUTPUTS_N] = {
|
||||||
|
{{~it.tibia.lv2.ports.filter(x => x.type == "control" && x.direction == "output") :p}}{{=p.paramIndex}}, {{~}}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
@ -27,15 +27,15 @@ static LV2_Handle instantiate(const struct LV2_Descriptor * descriptor, double s
|
|||||||
plugin_init(&instance->p);
|
plugin_init(&instance->p);
|
||||||
plugin_set_sample_rate(&instance->p, sample_rate);
|
plugin_set_sample_rate(&instance->p, sample_rate);
|
||||||
#if DATA_PRODUCT_AUDIO_INPUT_CHANNELS_N > 0
|
#if DATA_PRODUCT_AUDIO_INPUT_CHANNELS_N > 0
|
||||||
for (size_t i = 0; i < DATA_PRODUCT_AUDIO_INPUT_CHANNELS_N; i++)
|
for (uint32_t i = 0; i < DATA_PRODUCT_AUDIO_INPUT_CHANNELS_N; i++)
|
||||||
instance->x[i] = NULL;
|
instance->x[i] = NULL;
|
||||||
#endif
|
#endif
|
||||||
#if DATA_PRODUCT_AUDIO_OUTPUT_CHANNELS_N > 0
|
#if DATA_PRODUCT_AUDIO_OUTPUT_CHANNELS_N > 0
|
||||||
for (size_t i = 0; i < DATA_PRODUCT_AUDIO_OUTPUT_CHANNELS_N; i++)
|
for (uint32_t i = 0; i < DATA_PRODUCT_AUDIO_OUTPUT_CHANNELS_N; i++)
|
||||||
instance->y[i] = NULL;
|
instance->y[i] = NULL;
|
||||||
#endif
|
#endif
|
||||||
#if DATA_PRODUCT_CONTROL_INPUTS_N > 0
|
#if (DATA_PRODUCT_CONTROL_INPUTS_N + DATA_PRODUCT_CONTROL_OUTPUTS_N) > 0
|
||||||
for (size_t i = 0; i < DATA_PRODUCT_CONTROL_INPUTS_N; i++)
|
for (uint32_t i = 0; i < DATA_PRODUCT_CONTROL_INPUTS_N + DATA_PRODUCT_CONTROL_OUTPUTS_N; i++)
|
||||||
instance->c[i] = NULL;
|
instance->c[i] = NULL;
|
||||||
#endif
|
#endif
|
||||||
return instance;
|
return instance;
|
||||||
@ -65,9 +65,10 @@ static void connect_port(LV2_Handle instance, uint32_t port, void * data_locatio
|
|||||||
static void activate(LV2_Handle instance) {
|
static void activate(LV2_Handle instance) {
|
||||||
plugin_instance * i = (plugin_instance *)instance;
|
plugin_instance * i = (plugin_instance *)instance;
|
||||||
#if DATA_PRODUCT_CONTROL_INPUTS_N > 0
|
#if DATA_PRODUCT_CONTROL_INPUTS_N > 0
|
||||||
for (size_t j = 0; j < DATA_PRODUCT_CONTROL_INPUTS_N; j++) {
|
for (uint32_t j = 0; j < DATA_PRODUCT_CONTROL_INPUTS_N; j++) {
|
||||||
i->params[j] = i->c[j] != NULL ? *i->c[j] : param_data[j].def;
|
uint32_t k = param_data[j].index;
|
||||||
plugin_set_parameter(&i->p, j, i->params[j]);
|
i->params[j] = i->c[k] != NULL ? *i->c[k] : param_data[j].def;
|
||||||
|
plugin_set_parameter(&i->p, k, i->params[j]);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
plugin_reset(&i->p);
|
plugin_reset(&i->p);
|
||||||
@ -81,25 +82,37 @@ static void run(LV2_Handle instance, uint32_t sample_count) {
|
|||||||
plugin_instance * i = (plugin_instance *)instance;
|
plugin_instance * i = (plugin_instance *)instance;
|
||||||
|
|
||||||
#if DATA_PRODUCT_CONTROL_INPUTS_N > 0
|
#if DATA_PRODUCT_CONTROL_INPUTS_N > 0
|
||||||
for (size_t j = 0; j < DATA_PRODUCT_CONTROL_INPUTS_N; j++) {
|
for (uint32_t j = 0; j < DATA_PRODUCT_CONTROL_INPUTS_N; j++) {
|
||||||
if (i->c[j] == NULL)
|
uint32_t k = param_data[j].index;
|
||||||
|
if (i->c[k] == NULL)
|
||||||
continue;
|
continue;
|
||||||
float v;
|
float v;
|
||||||
if (param_data[j].flags & DATA_PARAM_BYPASS)
|
if (param_data[j].flags & DATA_PARAM_BYPASS)
|
||||||
v = *i->c[j] > 0.f ? 0.f : 1.f;
|
v = *i->c[k] > 0.f ? 0.f : 1.f;
|
||||||
else if (param_data[j].flags & DATA_PARAM_TOGGLED)
|
else if (param_data[j].flags & DATA_PARAM_TOGGLED)
|
||||||
v = *i->c[j] > 0.f ? 1.f : 0.f;
|
v = *i->c[k] > 0.f ? 1.f : 0.f;
|
||||||
|
else if (param_data[j].flags & DATA_PARAM_INTEGER)
|
||||||
|
v = (int32_t)(*i->c[k] + 0.5f);
|
||||||
else
|
else
|
||||||
v = clampf(*i->c[j], param_data[j].min, param_data[j].max);
|
v = *i->c[k];
|
||||||
|
|
||||||
|
v = clampf(v, param_data[j].min, param_data[j].max);
|
||||||
if (v != i->params[j]) {
|
if (v != i->params[j]) {
|
||||||
i->params[j] = v;
|
i->params[j] = v;
|
||||||
plugin_set_parameter(&i->p, j, v);
|
plugin_set_parameter(&i->p, k, v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
plugin_process(&i->p, i->x, i->y, sample_count);
|
plugin_process(&i->p, i->x, i->y, sample_count);
|
||||||
|
|
||||||
|
#if DATA_PRODUCT_CONTROL_OUTPUTS_N > 0
|
||||||
|
for (uint32_t j = 0; j < DATA_PRODUCT_CONTROL_OUTPUTS_N; j++) {
|
||||||
|
uint32_t k = param_out_index[j];
|
||||||
|
if (i->c[k] != NULL)
|
||||||
|
i->c[k] = plugin_get_parameter(&i->p, k);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cleanup(LV2_Handle instance) {
|
static void cleanup(LV2_Handle instance) {
|
||||||
|
@ -32,6 +32,7 @@ module.exports = function (data, api) {
|
|||||||
var e = Object.create(p);
|
var e = Object.create(p);
|
||||||
e.type = "control";
|
e.type = "control";
|
||||||
e.symbol = data.lv2.parameterSymbols[i];
|
e.symbol = data.lv2.parameterSymbols[i];
|
||||||
|
e.paramIndex = i;
|
||||||
data.tibia.lv2.ports.push(e);
|
data.tibia.lv2.ports.push(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +39,14 @@
|
|||||||
"minimum": -60.0,
|
"minimum": -60.0,
|
||||||
"maximum": 12.0,
|
"maximum": 12.0,
|
||||||
"toggled": false,
|
"toggled": false,
|
||||||
"optional": false
|
"optional": false,
|
||||||
|
"integer": false,
|
||||||
|
"scalePoints": {
|
||||||
|
"0": 0.0,
|
||||||
|
"Max": 12.0,
|
||||||
|
"Min": -60.0
|
||||||
|
},
|
||||||
|
"list": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Bypass",
|
"name": "Bypass",
|
||||||
@ -53,7 +60,13 @@
|
|||||||
"minimum": 0,
|
"minimum": 0,
|
||||||
"maximum": 1,
|
"maximum": 1,
|
||||||
"toggled": true,
|
"toggled": true,
|
||||||
"optional": true
|
"optional": true,
|
||||||
|
"integer": true,
|
||||||
|
"scalePoints": {
|
||||||
|
"Off": 0,
|
||||||
|
"On": 1
|
||||||
|
},
|
||||||
|
"list": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user