Browse Source

Carla: Misc fixing & syntax changes

tags/v0.9.0
falkTX 13 years ago
parent
commit
4c96eb071e
3 changed files with 70 additions and 79 deletions
  1. +47
    -48
      src/carla.py
  2. +11
    -18
      src/carla/lv2.cpp
  3. +12
    -13
      src/carla/lv2_rdf.h

+ 47
- 48
src/carla.py View File

@@ -748,8 +748,7 @@ class PluginRefreshW(QDialog, ui_carla_refresh.Ui_PluginRefreshW):
bins.append(carla_discovery_win64) bins.append(carla_discovery_win64)


self.pThread.setSearchBins(bins) self.pThread.setSearchBins(bins)
self.pThread.setSearchTypes(self.ch_ladspa.isChecked(), self.ch_dssi.isChecked(), self.ch_lv2.isChecked(),
self.ch_vst.isChecked(), self.ch_sf2.isChecked())
self.pThread.setSearchTypes(self.ch_ladspa.isChecked(), self.ch_dssi.isChecked(), self.ch_lv2.isChecked(), self.ch_vst.isChecked(), self.ch_sf2.isChecked())
self.pThread.start() self.pThread.start()


@pyqtSlot() @pyqtSlot()
@@ -988,10 +987,9 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW):
lastLoadedPlugin = self.settings_db.value("Plugins/LastLoadedBinary", "", type=str) lastLoadedPlugin = self.settings_db.value("Plugins/LastLoadedBinary", "", type=str)
if (lastLoadedPlugin): if (lastLoadedPlugin):
lastLoadedPlugin = getShortFileName(lastLoadedPlugin) lastLoadedPlugin = getShortFileName(lastLoadedPlugin)
ask = QMessageBox.question(self, self.tr("Warning"), self.tr(""
"There was an error while checking the plugin %s.\n"
"Do you want to blacklist it?" % (
lastLoadedPlugin)), QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
ask = QMessageBox.question(self, self.tr("Warning"), self.tr("There was an error while checking the plugin %s.\n"
"Do you want to blacklist it?" % (lastLoadedPlugin)),
QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)


if (ask == QMessageBox.Yes): if (ask == QMessageBox.Yes):
blacklist = toList(self.settings_db.value("Plugins/Blacklisted", [])) blacklist = toList(self.settings_db.value("Plugins/Blacklisted", []))
@@ -1045,19 +1043,19 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW):
self.tableWidget.showRow(i) self.tableWidget.showRow(i)


plugin = self.tableWidget.item(i, 0).plugin_data plugin = self.tableWidget.item(i, 0).plugin_data
ains = plugin['audio.ins']
aouts = plugin['audio.outs']
mins = plugin['midi.ins']
mouts = plugin['midi.outs']
ptype = self.tableWidget.item(i, 12).text()
is_synth = bool(plugin['hints'] & PLUGIN_IS_SYNTH)
ains = plugin['audio.ins']
aouts = plugin['audio.outs']
mins = plugin['midi.ins']
mouts = plugin['midi.outs']
ptype = self.tableWidget.item(i, 12).text()
is_synth = bool(plugin['hints'] & PLUGIN_IS_SYNTH)
is_effect = bool(ains > 0 < aouts and not is_synth) is_effect = bool(ains > 0 < aouts and not is_synth)
is_midi = bool(ains == 0 and aouts == 0 and mins > 0 < mouts)
is_sf2 = bool(ptype == "SF2")
is_other = bool(not (is_effect or is_synth or is_midi or is_sf2))
is_midi = bool(ains == 0 and aouts == 0 and mins > 0 < mouts)
is_sf2 = bool(ptype == "SF2")
is_other = bool(not (is_effect or is_synth or is_midi or is_sf2))
is_native = bool(plugin['build'] == BINARY_NATIVE) is_native = bool(plugin['build'] == BINARY_NATIVE)
is_stereo = bool(ains == 2 and aouts == 2) or (is_synth and aouts == 2) is_stereo = bool(ains == 2 and aouts == 2) or (is_synth and aouts == 2)
has_gui = bool(plugin['hints'] & PLUGIN_HAS_GUI)
has_gui = bool(plugin['hints'] & PLUGIN_HAS_GUI)


is_bridged = bool(not is_native and plugin['build'] in native_bins) is_bridged = bool(not is_native and plugin['build'] in native_bins)
is_bridged_wine = bool(not is_native and plugin['build'] in wine_bins) is_bridged_wine = bool(not is_native and plugin['build'] in wine_bins)
@@ -1095,8 +1093,7 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW):
text in self.tableWidget.item(i, 1).text().lower() or text in self.tableWidget.item(i, 1).text().lower() or
text in self.tableWidget.item(i, 2).text().lower() or text in self.tableWidget.item(i, 2).text().lower() or
text in self.tableWidget.item(i, 3).text().lower() or text in self.tableWidget.item(i, 3).text().lower() or
text in self.tableWidget.item(i, 13).text().lower())
):
text in self.tableWidget.item(i, 13).text().lower())):
self.tableWidget.hideRow(i) self.tableWidget.hideRow(i)


def saveSettings(self): def saveSettings(self):
@@ -1180,30 +1177,33 @@ class AboutW(QDialog, ui_carla_about.Ui_AboutW):


self.l_ladspa.setText(self.tr("Everything! (Including LRDF)")) self.l_ladspa.setText(self.tr("Everything! (Including LRDF)"))
self.l_dssi.setText(self.tr("Everything! (Including CustomData/Chunks)")) self.l_dssi.setText(self.tr("Everything! (Including CustomData/Chunks)"))
self.l_lv2.setText(self.tr("About 95&#37; complete (missing state files and other minor features).<br/>"
self.l_lv2.setText(self.tr("About 95&#37; complete (only missing minor features).<br/>"
"Implemented Feature/Extensions:" "Implemented Feature/Extensions:"
"<ul>" "<ul>"
#"<li>http://lv2plug.in/ns/ext/cv-port</li>"
#"<li>http://lv2plug.in/ns/ext/data-access</li>"
#"<li>http://lv2plug.in/ns/ext/event</li>"
#"<li>http://lv2plug.in/ns/ext/host-info</li>"
#"<li>http://lv2plug.in/ns/ext/instance-access</li>"
#"<li>http://lv2plug.in/ns/ext/midi</li>"
#"<li>http://lv2plug.in/ns/ext/port-props</li>"
#"<li>http://lv2plug.in/ns/ext/presets</li>"
#"<li>http://lv2plug.in/ns/ext/state (not files)</li>"
#"<li>http://lv2plug.in/ns/ext/time</li>"
#"<li>http://lv2plug.in/ns/ext/ui-resize</li>"
#"<li>http://lv2plug.in/ns/ext/uri-map</li>"
#"<li>http://lv2plug.in/ns/ext/urid</li>"
#"<li>http://lv2plug.in/ns/extensions/units</li>"
#"<li>http://lv2plug.in/ns/extensions/ui</li>"
#"<li>http://ll-plugins.nongnu.org/lv2/ext/midimap</li>"
#"<li>http://home.gna.org/lv2dynparam/rtmempool/v1</li>"
#"<li>http://nedko.arnaudov.name/lv2/external_ui/</li>"
"</ul>"
"<i>(Note that Gtk2 UIs with instance-access will not work, such as IR.lv2)</i>"))
self.l_vst.setText(self.tr("<p>About 75&#37; complete (missing MIDI-Output and some minor stuff)</p>"))
"<li>http://lv2plug.in/ns/ext/atom</li>"
"<li>http://lv2plug.in/ns/ext/data-access</li>"
"<li>http://lv2plug.in/ns/ext/event</li>"
"<li>http://lv2plug.in/ns/ext/instance-access</li>"
"<li>http://lv2plug.in/ns/ext/log</li>"
"<li>http://lv2plug.in/ns/ext/midi</li>"
#"<li>http://lv2plug.in/ns/ext/patch</li>"
"<li>http://lv2plug.in/ns/ext/port-props</li>"
#"<li>http://lv2plug.in/ns/ext/presets</li>"
"<li>http://lv2plug.in/ns/ext/state</li>"
#"<li>http://lv2plug.in/ns/ext/time</li>"
"<li>http://lv2plug.in/ns/ext/uri-map</li>"
"<li>http://lv2plug.in/ns/ext/urid</li>"
"<li>http://lv2plug.in/ns/ext/worker</li>"
"<li>http://lv2plug.in/ns/extensions/ui</li>"
"<li>http://lv2plug.in/ns/extensions/units</li>"
#"<li>http://home.gna.org/lv2dynparam/v1</li>"
"<li>http://home.gna.org/lv2dynparam/rtmempool/v1</li>"
"<li>http://kxstudio.sf.net/ns/lv2ext/programs</li>"
#"<li>http://ll-plugins.nongnu.org/lv2/ext/midimap</li>"
"<li>http://ll-plugins.nongnu.org/lv2/ext/miditype</li>"
"<li>http://nedko.arnaudov.name/lv2/external_ui/</li>"
"</ul>"))
self.l_vst.setText(self.tr("<p>About 85&#37; complete (missing vst bank/presets and some minor stuff)</p>"))


# Single Plugin Parameter # Single Plugin Parameter
class PluginParameter(QWidget, ui_carla_parameter.Ui_PluginParameter): class PluginParameter(QWidget, ui_carla_parameter.Ui_PluginParameter):
@@ -1597,8 +1597,10 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit):


for j in range(param_info['scalepoint_count']): for j in range(param_info['scalepoint_count']):
scalepoint = CarlaHost.get_scalepoint_info(self.plugin_id, i, j) scalepoint = CarlaHost.get_scalepoint_info(self.plugin_id, i, j)
parameter['scalepoints'].append(
{'value': scalepoint['value'], 'label': c_string(scalepoint['label'])})
parameter['scalepoints'].append({
'value': scalepoint['value'],
'label': c_string(scalepoint['label'])
})


# ----------------------------------------------------------------- # -----------------------------------------------------------------
# Get width values, in packs of 10 # Get width values, in packs of 10
@@ -1847,8 +1849,7 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit):
def slot_saveState(self): def slot_saveState(self):
# TODO - LV2 and VST native formats # TODO - LV2 and VST native formats
if (self.state_filename): if (self.state_filename):
ask_try = QMessageBox.question(self, self.tr("Overwrite?"), self.tr("Overwrite previously created file?"),
QMessageBox.Ok | QMessageBox.Cancel)
ask_try = QMessageBox.question(self, self.tr("Overwrite?"), self.tr("Overwrite previously created file?"), QMessageBox.Ok|QMessageBox.Cancel)


if (ask_try == QMessageBox.Ok): if (ask_try == QMessageBox.Ok):
self.saveState_InternalFormat() self.saveState_InternalFormat()
@@ -2277,8 +2278,7 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget):
# Current MIDI Program # Current MIDI Program


if (self.edit_dialog.cb_midi_programs.currentIndex() >= 0): if (self.edit_dialog.cb_midi_programs.currentIndex() >= 0):
midi_program_info = CarlaHost.get_midi_program_info(self.plugin_id,
self.edit_dialog.cb_midi_programs.currentIndex())
midi_program_info = CarlaHost.get_midi_program_info(self.plugin_id, self.edit_dialog.cb_midi_programs.currentIndex())
x_save_state_dict['CurrentMidiBank'] = midi_program_info['bank'] x_save_state_dict['CurrentMidiBank'] = midi_program_info['bank']
x_save_state_dict['CurrentMidiProgram'] = midi_program_info['program'] x_save_state_dict['CurrentMidiProgram'] = midi_program_info['program']


@@ -2299,8 +2299,7 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget):
x_save_state_parameter['index'] = parameter_data['index'] x_save_state_parameter['index'] = parameter_data['index']
x_save_state_parameter['name'] = c_string(parameter_info['name']) x_save_state_parameter['name'] = c_string(parameter_info['name'])
x_save_state_parameter['symbol'] = c_string(parameter_info['symbol']) x_save_state_parameter['symbol'] = c_string(parameter_info['symbol'])
x_save_state_parameter['value'] = CarlaHost.get_current_parameter_value(self.plugin_id,
parameter_data['index'])
x_save_state_parameter['value'] = CarlaHost.get_current_parameter_value(self.plugin_id, parameter_data['index'])
x_save_state_parameter['midi_channel'] = parameter_data['midi_channel'] + 1 x_save_state_parameter['midi_channel'] = parameter_data['midi_channel'] + 1
x_save_state_parameter['midi_cc'] = parameter_data['midi_cc'] x_save_state_parameter['midi_cc'] = parameter_data['midi_cc']




+ 11
- 18
src/carla/lv2.cpp View File

@@ -26,6 +26,7 @@
#include "lv2/instance-access.h" #include "lv2/instance-access.h"
#include "lv2/log.h" #include "lv2/log.h"
#include "lv2/midi.h" #include "lv2/midi.h"
#include "lv2/patch.h"
#include "lv2/port-props.h" #include "lv2/port-props.h"
#include "lv2/presets.h" #include "lv2/presets.h"
#include "lv2/state.h" #include "lv2/state.h"
@@ -95,8 +96,8 @@ const uint32_t lv2_feature_count = 17;
const unsigned int CARLA_EVENT_DATA_ATOM = 0x01; const unsigned int CARLA_EVENT_DATA_ATOM = 0x01;
const unsigned int CARLA_EVENT_DATA_EVENT = 0x02; const unsigned int CARLA_EVENT_DATA_EVENT = 0x02;
const unsigned int CARLA_EVENT_DATA_MIDI_LL = 0x04; const unsigned int CARLA_EVENT_DATA_MIDI_LL = 0x04;
const unsigned int CARLA_EVENT_TYPE_MIDI = 0x10;
const unsigned int CARLA_EVENT_TYPE_TIME = 0x20; // FIXME
const unsigned int CARLA_EVENT_TYPE_MESSAGE = 0x10;
const unsigned int CARLA_EVENT_TYPE_MIDI = 0x20;


// pre-set uri[d] map ids // pre-set uri[d] map ids
const uint32_t CARLA_URI_MAP_ID_NULL = 0; const uint32_t CARLA_URI_MAP_ID_NULL = 0;
@@ -1025,14 +1026,14 @@ public:
j = evin.count++; j = evin.count++;
descriptor->connect_port(handle, i, evin.data[j].buffer.a); descriptor->connect_port(handle, i, evin.data[j].buffer.a);


if (PortType & LV2_PORT_SUPPORTS_MIDI)
if (PortType & LV2_PORT_SUPPORTS_MIDI_EVENT)
{ {
evin.data[j].types |= CARLA_EVENT_TYPE_MIDI; evin.data[j].types |= CARLA_EVENT_TYPE_MIDI;
evin.data[j].port = jack_port_register(jack_client, port_name, JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0); evin.data[j].port = jack_port_register(jack_client, port_name, JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
} }
if (PortType & LV2_PORT_SUPPORTS_TIME)
if (PortType & LV2_PORT_SUPPORTS_PATCH_MESSAGE)
{ {
evin.data[j].types |= CARLA_EVENT_TYPE_TIME;
evin.data[j].types |= CARLA_EVENT_TYPE_MESSAGE;
} }
} }
else if (LV2_IS_PORT_OUTPUT(PortType)) else if (LV2_IS_PORT_OUTPUT(PortType))
@@ -1040,14 +1041,14 @@ public:
j = evout.count++; j = evout.count++;
descriptor->connect_port(handle, i, evout.data[j].buffer.a); descriptor->connect_port(handle, i, evout.data[j].buffer.a);


if (PortType & LV2_PORT_SUPPORTS_MIDI)
if (PortType & LV2_PORT_SUPPORTS_MIDI_EVENT)
{ {
evout.data[j].types |= CARLA_EVENT_TYPE_MIDI; evout.data[j].types |= CARLA_EVENT_TYPE_MIDI;
evout.data[j].port = jack_port_register(jack_client, port_name, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0); evout.data[j].port = jack_port_register(jack_client, port_name, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0);
} }
if (PortType & LV2_PORT_SUPPORTS_TIME)
if (PortType & LV2_PORT_SUPPORTS_PATCH_MESSAGE)
{ {
evout.data[j].types |= CARLA_EVENT_TYPE_TIME;
evout.data[j].types |= CARLA_EVENT_TYPE_MESSAGE;
} }
} }
else else
@@ -1060,30 +1061,22 @@ public:
j = evin.count++; j = evin.count++;
descriptor->connect_port(handle, i, evin.data[j].buffer.e); descriptor->connect_port(handle, i, evin.data[j].buffer.e);


if (PortType & LV2_PORT_SUPPORTS_MIDI)
if (PortType & LV2_PORT_SUPPORTS_MIDI_EVENT)
{ {
evin.data[j].types |= CARLA_EVENT_TYPE_MIDI; evin.data[j].types |= CARLA_EVENT_TYPE_MIDI;
evin.data[j].port = jack_port_register(jack_client, port_name, JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0); evin.data[j].port = jack_port_register(jack_client, port_name, JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
} }
if (PortType & LV2_PORT_SUPPORTS_TIME)
{
evin.data[j].types |= CARLA_EVENT_TYPE_TIME;
}
} }
else if (LV2_IS_PORT_OUTPUT(PortType)) else if (LV2_IS_PORT_OUTPUT(PortType))
{ {
j = evout.count++; j = evout.count++;
descriptor->connect_port(handle, i, evout.data[j].buffer.e); descriptor->connect_port(handle, i, evout.data[j].buffer.e);


if (PortType & LV2_PORT_SUPPORTS_MIDI)
if (PortType & LV2_PORT_SUPPORTS_MIDI_EVENT)
{ {
evout.data[j].types |= CARLA_EVENT_TYPE_MIDI; evout.data[j].types |= CARLA_EVENT_TYPE_MIDI;
evout.data[j].port = jack_port_register(jack_client, port_name, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0); evout.data[j].port = jack_port_register(jack_client, port_name, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0);
} }
if (PortType & LV2_PORT_SUPPORTS_TIME)
{
evout.data[j].types |= CARLA_EVENT_TYPE_TIME;
}
} }
else else
qWarning("WARNING - Got a broken Port (Event, but not input or output)"); qWarning("WARNING - Got a broken Port (Event, but not input or output)");


+ 12
- 13
src/carla/lv2_rdf.h View File

@@ -145,8 +145,9 @@ struct LV2_RDF_PortScalePoint {
#define LV2_PORT_MIDI_LL 0x100 #define LV2_PORT_MIDI_LL 0x100


// Port Support Types // Port Support Types
#define LV2_PORT_SUPPORTS_MIDI 0x1000
#define LV2_PORT_SUPPORTS_TIME 0x2000
#define LV2_PORT_SUPPORTS_MIDI_EVENT 0x1000
#define LV2_PORT_SUPPORTS_PATCH_MESSAGE 0x2000
//#define LV2_PORT_SUPPORTS_TIME 0x4000 // TODO


#define LV2_IS_PORT_INPUT(x) ((x) & LV2_PORT_INPUT) #define LV2_IS_PORT_INPUT(x) ((x) & LV2_PORT_INPUT)
#define LV2_IS_PORT_OUTPUT(x) ((x) & LV2_PORT_OUTPUT) #define LV2_IS_PORT_OUTPUT(x) ((x) & LV2_PORT_OUTPUT)
@@ -518,8 +519,7 @@ public:
atom_supports (new_uri(LV2_ATOM__supports)), atom_supports (new_uri(LV2_ATOM__supports)),


midi_event (new_uri(LV2_MIDI__MidiEvent)), midi_event (new_uri(LV2_MIDI__MidiEvent)),

time_position (new_uri(LV2_TIME__Position)),
patch_message (new_uri(LV2_PATCH__Message)),


mm_default_control (new_uri(NS_llmm "defaultMidiController")), mm_default_control (new_uri(NS_llmm "defaultMidiController")),
mm_control_type (new_uri(NS_llmm "controllerType")), mm_control_type (new_uri(NS_llmm "controllerType")),
@@ -650,10 +650,11 @@ public:
Lilv::Node atom_buffer_type; Lilv::Node atom_buffer_type;
Lilv::Node atom_supports; Lilv::Node atom_supports;


// Event Data/Types
Lilv::Node midi_event; Lilv::Node midi_event;
Lilv::Node patch_message;


Lilv::Node time_position;

// MIDI CC
Lilv::Node mm_default_control; Lilv::Node mm_default_control;
Lilv::Node mm_control_type; Lilv::Node mm_control_type;
Lilv::Node mm_control_number; Lilv::Node mm_control_number;
@@ -868,9 +869,9 @@ inline const LV2_RDF_Descriptor* lv2_rdf_new(const char* URI)


Lilv::Nodes supports(Port.get_value(Lv2World.atom_supports)); Lilv::Nodes supports(Port.get_value(Lv2World.atom_supports));
if (supports.contains(Lv2World.midi_event)) if (supports.contains(Lv2World.midi_event))
RDF_Port->Type |= LV2_PORT_SUPPORTS_MIDI;
if (supports.contains(Lv2World.time_position))
RDF_Port->Type |= LV2_PORT_SUPPORTS_TIME;
RDF_Port->Type |= LV2_PORT_SUPPORTS_MIDI_EVENT;
if (supports.contains(Lv2World.patch_message))
RDF_Port->Type |= LV2_PORT_SUPPORTS_PATCH_MESSAGE;
} }


if (Port.is_a(Lv2World.port_event)) if (Port.is_a(Lv2World.port_event))
@@ -878,15 +879,13 @@ inline const LV2_RDF_Descriptor* lv2_rdf_new(const char* URI)
RDF_Port->Type |= LV2_PORT_EVENT; RDF_Port->Type |= LV2_PORT_EVENT;


if (Port.supports_event(Lv2World.midi_event)) if (Port.supports_event(Lv2World.midi_event))
RDF_Port->Type |= LV2_PORT_SUPPORTS_MIDI;
if (Port.supports_event(Lv2World.time_position))
RDF_Port->Type |= LV2_PORT_SUPPORTS_TIME;
RDF_Port->Type |= LV2_PORT_SUPPORTS_MIDI_EVENT;
} }


if (Port.is_a(Lv2World.port_midi_ll)) if (Port.is_a(Lv2World.port_midi_ll))
{ {
RDF_Port->Type |= LV2_PORT_MIDI_LL; RDF_Port->Type |= LV2_PORT_MIDI_LL;
RDF_Port->Type |= LV2_PORT_SUPPORTS_MIDI;
RDF_Port->Type |= LV2_PORT_SUPPORTS_MIDI_EVENT;
} }


// ------------------------------------------ // ------------------------------------------


Loading…
Cancel
Save