summaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/engine/LV2Node.cpp27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/libs/engine/LV2Node.cpp b/src/libs/engine/LV2Node.cpp
index 40270409..1f195dbe 100644
--- a/src/libs/engine/LV2Node.cpp
+++ b/src/libs/engine/LV2Node.cpp
@@ -87,8 +87,6 @@ LV2Node::instantiate()
port_path = path() + "/" + port_name;
- // Assumes there is only the 4 classes
-
SLV2PortClass port_class = slv2_port_get_class(_lv2_plugin, j);
const bool is_control = (port_class == SLV2_CONTROL_RATE_INPUT
|| port_class == SLV2_CONTROL_RATE_OUTPUT);
@@ -100,12 +98,25 @@ LV2Node::instantiate()
else
port_buffer_size = _buffer_size;
- if (is_input) {
- port = new InputPort<Sample>(this, port_name, j, _poly, DataType::FLOAT, port_buffer_size);
- _ports->at(j) = port;
- } else /* output */ {
- port = new OutputPort<Sample>(this, port_name, j, _poly, DataType::FLOAT, port_buffer_size);
- _ports->at(j) = port;
+ char* const data_type = slv2_port_get_data_type(_lv2_plugin, j);
+
+ if (!strcmp(data_type, SLV2_DATA_TYPE_FLOAT)) {
+ if (is_input) {
+ port = new InputPort<Sample>(this, port_name, j, _poly, DataType::FLOAT, port_buffer_size);
+ _ports->at(j) = port;
+ } else /* output */ {
+ port = new OutputPort<Sample>(this, port_name, j, _poly, DataType::FLOAT, port_buffer_size);
+ _ports->at(j) = port;
+ }
+ } else if (!strcmp(data_type, "http://ll-plugins.nongnu.org/lv2/namespace#miditype")) {
+ cerr << "MIDI PORT!\n";
+ if (is_input) {
+ port = new InputPort<MidiMessage>(this, port_name, j, _poly, DataType::MIDI, port_buffer_size);
+ _ports->at(j) = port;
+ } else /* output */ {
+ port = new OutputPort<MidiMessage>(this, port_name, j, _poly, DataType::MIDI, port_buffer_size);
+ _ports->at(j) = port;
+ }
}
assert(_ports->at(j) != NULL);