diff options
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/engine/LV2Node.cpp | 27 |
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); |