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)

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()

@pyqtSlot()
@@ -988,10 +987,9 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW):
lastLoadedPlugin = self.settings_db.value("Plugins/LastLoadedBinary", "", type=str)
if (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):
blacklist = toList(self.settings_db.value("Plugins/Blacklisted", []))
@@ -1045,19 +1043,19 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW):
self.tableWidget.showRow(i)

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_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_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_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, 2).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)

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_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:"
"<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
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']):
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
@@ -1847,8 +1849,7 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit):
def slot_saveState(self):
# TODO - LV2 and VST native formats
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):
self.saveState_InternalFormat()
@@ -2277,8 +2278,7 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget):
# Current MIDI Program

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['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['name'] = c_string(parameter_info['name'])
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_cc'] = parameter_data['midi_cc']



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

@@ -26,6 +26,7 @@
#include "lv2/instance-access.h"
#include "lv2/log.h"
#include "lv2/midi.h"
#include "lv2/patch.h"
#include "lv2/port-props.h"
#include "lv2/presets.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_EVENT = 0x02;
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
const uint32_t CARLA_URI_MAP_ID_NULL = 0;
@@ -1025,14 +1026,14 @@ public:
j = evin.count++;
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].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))
@@ -1040,14 +1041,14 @@ public:
j = evout.count++;
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].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
@@ -1060,30 +1061,22 @@ public:
j = evin.count++;
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].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))
{
j = evout.count++;
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].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
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

// 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_OUTPUT(x) ((x) & LV2_PORT_OUTPUT)
@@ -518,8 +519,7 @@ public:
atom_supports (new_uri(LV2_ATOM__supports)),

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_control_type (new_uri(NS_llmm "controllerType")),
@@ -650,10 +650,11 @@ public:
Lilv::Node atom_buffer_type;
Lilv::Node atom_supports;

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

Lilv::Node time_position;

// MIDI CC
Lilv::Node mm_default_control;
Lilv::Node mm_control_type;
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));
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))
@@ -878,15 +879,13 @@ inline const LV2_RDF_Descriptor* lv2_rdf_new(const char* URI)
RDF_Port->Type |= LV2_PORT_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))
{
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