summaryrefslogtreecommitdiffstats
path: root/hosts
diff options
context:
space:
mode:
Diffstat (limited to 'hosts')
-rw-r--r--hosts/lv2_jack_host.c15
-rw-r--r--hosts/lv2_simple_jack_host.c30
2 files changed, 29 insertions, 16 deletions
diff --git a/hosts/lv2_jack_host.c b/hosts/lv2_jack_host.c
index e5e51a3..03d57d9 100644
--- a/hosts/lv2_jack_host.c
+++ b/hosts/lv2_jack_host.c
@@ -35,6 +35,7 @@ struct Port {
enum Direction { INPUT, OUTPUT} direction;
enum Type { UNKNOWN, FLOAT, MIDI } type;
+ SLV2PortID id;
jack_port_t* jack_port; /**< For audio and MIDI ports, otherwise NULL */
float control; /**< For control ports, otherwise 0.0f */
LV2_MIDI* midi_buffer; /**< For midi ports, otherwise NULL */
@@ -65,6 +66,8 @@ main(int argc, char** argv)
host.num_ports = 0;
host.ports = NULL;
+ slv2_init();
+
/* Find all installed plugins */
SLV2List plugins = slv2_list_new();
slv2_list_load_all(plugins);
@@ -143,6 +146,8 @@ main(int argc, char** argv)
}
jack_client_close(host.jack_client);
+ slv2_finish();
+
return 0;
}
@@ -170,6 +175,7 @@ create_port(struct JackHost* host,
//struct Port* port = (Port*)malloc(sizeof(Port));
struct Port* const port = &host->ports[port_index];
+ port->id = slv2_port_by_index(port_index);
port->type = UNKNOWN;
port->jack_port = NULL;
port->control = 0.0f;
@@ -177,17 +183,18 @@ create_port(struct JackHost* host,
slv2_instance_connect_port(host->instance, port_index, NULL);
- char* type_str = slv2_port_get_data_type(host->plugin, port_index);
+ char* type_str = slv2_port_get_data_type(host->plugin, port->id);
+
if (!strcmp(type_str, SLV2_DATA_TYPE_FLOAT))
port->type = FLOAT;
else if (!strcmp(type_str, SLV2_DATA_TYPE_MIDI))
port->type = MIDI;
/* Get the port symbol (label) for console printing */
- char* symbol = slv2_port_get_symbol(host->plugin, port_index);
+ char* symbol = slv2_port_get_symbol(host->plugin, port->id);
/* Get the 'class' (not data type) of the port (control input, audio output, etc) */
- enum SLV2PortClass class = slv2_port_get_class(host->plugin, port_index);
+ enum SLV2PortClass class = slv2_port_get_class(host->plugin, port->id);
if (port->type == FLOAT) {
@@ -195,7 +202,7 @@ create_port(struct JackHost* host,
switch (class) {
case SLV2_CONTROL_RATE_INPUT:
port->direction = INPUT;
- port->control = slv2_port_get_default_value(host->plugin, port_index);
+ port->control = slv2_port_get_default_value(host->plugin, port->id);
slv2_instance_connect_port(host->instance, port_index, &port->control);
printf("Set %s to %f\n", symbol, host->ports[port_index].control);
break;
diff --git a/hosts/lv2_simple_jack_host.c b/hosts/lv2_simple_jack_host.c
index 4b7493f..ef386b7 100644
--- a/hosts/lv2_simple_jack_host.c
+++ b/hosts/lv2_simple_jack_host.c
@@ -49,6 +49,8 @@ main(int argc, char** argv)
host.jack_ports = NULL;
host.controls = NULL;
+ slv2_init();
+
/* Find all installed plugins */
SLV2List plugins = slv2_list_new();
slv2_list_load_all(plugins);
@@ -125,6 +127,8 @@ main(int argc, char** argv)
}
jack_client_close(host.jack_client);
+ slv2_finish();
+
return 0;
}
@@ -147,40 +151,42 @@ die(const char* msg)
*/
void
create_port(struct JackHost* host,
- uint32_t port_index)
+ uint32_t index)
{
+ SLV2PortID id = slv2_port_by_index(index);
+
/* Make sure this is a float port */
- char* type = slv2_port_get_data_type(host->plugin, port_index);
+ char* type = slv2_port_get_data_type(host->plugin, id);
if (strcmp(type, SLV2_DATA_TYPE_FLOAT))
die("Unrecognized data type, aborting.");
free(type);
/* Get the port symbol (label) for console printing */
- char* symbol = slv2_port_get_symbol(host->plugin, port_index);
+ char* symbol = slv2_port_get_symbol(host->plugin, id);
/* Initialize the port array elements */
- host->jack_ports[port_index] = NULL;
- host->controls[port_index] = 0.0f;
+ host->jack_ports[index] = NULL;
+ host->controls[index] = 0.0f;
/* Get the 'class' of the port (control input, audio output, etc) */
- enum SLV2PortClass class = slv2_port_get_class(host->plugin, port_index);
+ enum SLV2PortClass class = slv2_port_get_class(host->plugin, id);
/* Connect the port based on it's 'class' */
switch (class) {
case SLV2_CONTROL_RATE_INPUT:
- host->controls[port_index] = slv2_port_get_default_value(host->plugin, port_index);
- slv2_instance_connect_port(host->instance, port_index, &host->controls[port_index]);
- printf("Set %s to %f\n", symbol, host->controls[port_index]);
+ host->controls[index] = slv2_port_get_default_value(host->plugin, id);
+ slv2_instance_connect_port(host->instance, index, &host->controls[index]);
+ printf("Set %s to %f\n", symbol, host->controls[index]);
break;
case SLV2_CONTROL_RATE_OUTPUT:
- slv2_instance_connect_port(host->instance, port_index, &host->controls[port_index]);
+ slv2_instance_connect_port(host->instance, index, &host->controls[index]);
break;
case SLV2_AUDIO_RATE_INPUT:
- host->jack_ports[port_index] = jack_port_register(host->jack_client,
+ host->jack_ports[index] = jack_port_register(host->jack_client,
symbol, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
break;
case SLV2_AUDIO_RATE_OUTPUT:
- host->jack_ports[port_index] = jack_port_register(host->jack_client,
+ host->jack_ports[index] = jack_port_register(host->jack_client,
symbol, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
break;
default: