Browse Source

Testing time, initial work for lv2 atom support

tags/v0.9.0
falkTX 13 years ago
parent
commit
e869ced766
7 changed files with 264 additions and 129 deletions
  1. +2
    -0
      src/carla.py
  2. +139
    -43
      src/carla/lv2.cpp
  3. +6
    -11
      src/carla/lv2_rdf.h
  4. +29
    -10
      src/carla_backend.py
  5. +13
    -13
      src/digitalpeakmeter.py
  6. +69
    -46
      src/lv2_rdf.py
  7. +6
    -6
      src/pixmapdial.py

+ 2
- 0
src/carla.py View File

@@ -100,8 +100,10 @@ def CustomDataType2String(dtype):
elif (dtype == CUSTOM_DATA_FLOAT): elif (dtype == CUSTOM_DATA_FLOAT):
return "float" return "float"
elif (dtype == CUSTOM_DATA_STRING): elif (dtype == CUSTOM_DATA_STRING):
print("Carla requiested type save - string", dtype)
return "string" return "string"
elif (dtype == CUSTOM_DATA_BINARY): elif (dtype == CUSTOM_DATA_BINARY):
print("Carla requiested type save - binary", dtype)
return "binary" return "binary"
else: else:
return "null" return "null"


+ 139
- 43
src/carla/lv2.cpp View File

@@ -23,6 +23,7 @@


#include "lv2/lv2.h" #include "lv2/lv2.h"
#include "lv2/atom.h" #include "lv2/atom.h"
#include "lv2/atom-util.h"
#include "lv2/data-access.h" #include "lv2/data-access.h"
#include "lv2/event.h" #include "lv2/event.h"
#include "lv2/event-helpers.h" #include "lv2/event-helpers.h"
@@ -79,11 +80,13 @@ const unsigned int CARLA_EVENT_TYPE_MIDI = 0x10;
const unsigned int CARLA_EVENT_TYPE_TIME = 0x20; const unsigned int CARLA_EVENT_TYPE_TIME = 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_ATOM_STRING = 1;
const uint32_t CARLA_URI_MAP_ID_EVENT_MIDI = 2;
const uint32_t CARLA_URI_MAP_ID_EVENT_TIME = 3;
const uint32_t CARLA_URI_MAP_ID_COUNT = 4;
const uint32_t CARLA_URI_MAP_ID_NULL = 0;
const uint32_t CARLA_URI_MAP_ID_ATOM_CHUNK = 1;
const uint32_t CARLA_URI_MAP_ID_ATOM_SEQUENCE = 2;
const uint32_t CARLA_URI_MAP_ID_ATOM_STRING = 3;
const uint32_t CARLA_URI_MAP_ID_EVENT_MIDI = 4;
const uint32_t CARLA_URI_MAP_ID_EVENT_TIME = 5;
const uint32_t CARLA_URI_MAP_ID_COUNT = 6;


enum Lv2ParameterDataType { enum Lv2ParameterDataType {
LV2_PARAMETER_TYPE_CONTROL, LV2_PARAMETER_TYPE_CONTROL,
@@ -94,6 +97,7 @@ struct EventData {
unsigned int types; unsigned int types;
jack_port_t* port; jack_port_t* port;
union { union {
LV2_Atom_Sequence* a;
LV2_Event_Buffer* e; LV2_Event_Buffer* e;
LV2_MIDI* m; LV2_MIDI* m;
} buffer; } buffer;
@@ -316,8 +320,7 @@ public:
else if (LV2_IS_DYNAMICS(Category)) else if (LV2_IS_DYNAMICS(Category))
return PLUGIN_CATEGORY_DYNAMICS; return PLUGIN_CATEGORY_DYNAMICS;


// TODO - try to get category from label
return PLUGIN_CATEGORY_NONE;
return get_category_from_name(m_name);
} }


virtual long unique_id() virtual long unique_id()
@@ -550,6 +553,8 @@ public:


virtual void set_custom_data(CustomDataType dtype, const char* key, const char* value, bool gui_send) virtual void set_custom_data(CustomDataType dtype, const char* key, const char* value, bool gui_send)
{ {
CarlaPlugin::set_custom_data(dtype, key, value, gui_send);

if ((m_hints & PLUGIN_HAS_EXTENSION_STATE) > 0 && descriptor->extension_data) if ((m_hints & PLUGIN_HAS_EXTENSION_STATE) > 0 && descriptor->extension_data)
{ {
LV2_State_Interface* state = (LV2_State_Interface*)descriptor->extension_data(LV2_STATE__interface); LV2_State_Interface* state = (LV2_State_Interface*)descriptor->extension_data(LV2_STATE__interface);
@@ -557,8 +562,6 @@ public:
if (state) if (state)
state->restore(handle, carla_lv2_state_retrieve, this, 0, features); state->restore(handle, carla_lv2_state_retrieve, this, 0, features);
} }

CarlaPlugin::set_custom_data(dtype, key, value, gui_send);
} }


virtual void set_gui_data(int, void* ptr) virtual void set_gui_data(int, void* ptr)
@@ -646,10 +649,10 @@ public:
LV2_EXTERNAL_UI_HIDE((lv2_external_ui*)ui.widget); LV2_EXTERNAL_UI_HIDE((lv2_external_ui*)ui.widget);
gui.visible = false; gui.visible = false;


if (ui.descriptor->cleanup)
ui.descriptor->cleanup(ui.handle);
//if (ui.descriptor->cleanup)
// ui.descriptor->cleanup(ui.handle);


ui.handle = nullptr;
//ui.handle = nullptr;
} }
} }
else else
@@ -736,6 +739,15 @@ public:
else if (LV2_IS_PORT_OUTPUT(PortType)) else if (LV2_IS_PORT_OUTPUT(PortType))
cv_outs += 1; cv_outs += 1;
} }
else if (LV2_IS_PORT_ATOM_SEQUENCE(PortType))
{
qDebug("Atom Sequence port found, index: %i, name: %s", i, rdf_descriptor->Ports[i].Name);
if (LV2_IS_PORT_INPUT(PortType))
ev_ins += 1;
else if (LV2_IS_PORT_OUTPUT(PortType))
ev_outs += 1;
event_data_type = CARLA_EVENT_DATA_ATOM;
}
else if (LV2_IS_PORT_EVENT(PortType)) else if (LV2_IS_PORT_EVENT(PortType))
{ {
if (LV2_IS_PORT_INPUT(PortType)) if (LV2_IS_PORT_INPUT(PortType))
@@ -754,14 +766,16 @@ public:
} }
else if (LV2_IS_PORT_CONTROL(PortType)) else if (LV2_IS_PORT_CONTROL(PortType))
params += 1; params += 1;
else
qDebug("Unknown port type found, index: %i, name: %s", i, rdf_descriptor->Ports[i].Name);
} }


// if (params == 0 && (hints & PLUGIN_HAS_EXTENSION_DYNPARAM) > 0)
// {
// dynparam_plugin = (lv2dynparam_plugin_callbacks*)descriptor->extension_data(LV2DYNPARAM_URI);
// if (dynparam_plugin)
// dynparam_plugin->host_attach(handle, &dynparam_host, this);
// }
// if (params == 0 && (hints & PLUGIN_HAS_EXTENSION_DYNPARAM) > 0)
// {
// dynparam_plugin = (lv2dynparam_plugin_callbacks*)descriptor->extension_data(LV2DYNPARAM_URI);
// if (dynparam_plugin)
// dynparam_plugin->host_attach(handle, &dynparam_host, this);
// }


if (ains > 0) if (ains > 0)
{ {
@@ -785,8 +799,12 @@ public:


if (event_data_type == CARLA_EVENT_DATA_ATOM) if (event_data_type == CARLA_EVENT_DATA_ATOM)
{ {
evin.data[j].types = CARLA_EVENT_DATA_ATOM;
// TODO
evin.data[j].types = CARLA_EVENT_DATA_ATOM;
evin.data[j].buffer.a = (LV2_Atom_Sequence*)malloc(sizeof(LV2_Atom_Sequence) + MAX_EVENT_BUFFER);
evin.data[j].buffer.a->atom.size = sizeof(LV2_Atom_Sequence_Body);
evin.data[j].buffer.a->atom.type = CARLA_URI_MAP_ID_ATOM_SEQUENCE;
evin.data[j].buffer.a->body.unit = CARLA_URI_MAP_ID_NULL;
evin.data[j].buffer.a->body.pad = 0;
} }
else if (event_data_type == CARLA_EVENT_DATA_EVENT) else if (event_data_type == CARLA_EVENT_DATA_EVENT)
{ {
@@ -815,8 +833,12 @@ public:


if (event_data_type == CARLA_EVENT_DATA_ATOM) if (event_data_type == CARLA_EVENT_DATA_ATOM)
{ {
evout.data[j].types = CARLA_EVENT_DATA_ATOM;
// TODO
evout.data[j].types = CARLA_EVENT_DATA_ATOM;
evout.data[j].buffer.a = (LV2_Atom_Sequence*)malloc(sizeof(LV2_Atom_Sequence) + MAX_EVENT_BUFFER);
evout.data[j].buffer.a->atom.size = sizeof(LV2_Atom_Sequence_Body);
evout.data[j].buffer.a->atom.type = CARLA_URI_MAP_ID_ATOM_SEQUENCE;
evout.data[j].buffer.a->body.unit = CARLA_URI_MAP_ID_NULL;
evout.data[j].buffer.a->body.pad = 0;
} }
else if (event_data_type == CARLA_EVENT_DATA_EVENT) else if (event_data_type == CARLA_EVENT_DATA_EVENT)
{ {
@@ -825,7 +847,7 @@ public:
} }
else if (event_data_type == CARLA_EVENT_DATA_MIDI_LL) else if (event_data_type == CARLA_EVENT_DATA_MIDI_LL)
{ {
evout.data[j].types = CARLA_EVENT_DATA_MIDI_LL;
evout.data[j].types = CARLA_EVENT_DATA_MIDI_LL;
evout.data[j].buffer.m = new LV2_MIDI; evout.data[j].buffer.m = new LV2_MIDI;
evout.data[j].buffer.m->capacity = MAX_EVENT_BUFFER; evout.data[j].buffer.m->capacity = MAX_EVENT_BUFFER;
evout.data[j].buffer.m->data = new unsigned char [MAX_EVENT_BUFFER]; evout.data[j].buffer.m->data = new unsigned char [MAX_EVENT_BUFFER];
@@ -851,7 +873,7 @@ public:
{ {
const LV2_Property PortType = rdf_descriptor->Ports[i].Type; const LV2_Property PortType = rdf_descriptor->Ports[i].Type;


if (LV2_IS_PORT_AUDIO(PortType) || LV2_IS_PORT_CV(PortType) || LV2_IS_PORT_EVENT(PortType) || LV2_IS_PORT_MIDI_LL(PortType))
if (LV2_IS_PORT_AUDIO(PortType) || LV2_IS_PORT_ATOM_SEQUENCE(PortType) || LV2_IS_PORT_CV(PortType) || LV2_IS_PORT_EVENT(PortType) || LV2_IS_PORT_MIDI_LL(PortType))
{ {
#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
if (carla_options.global_jack_client) if (carla_options.global_jack_client)
@@ -898,6 +920,41 @@ public:


descriptor->connect_port(handle, i, nullptr); descriptor->connect_port(handle, i, nullptr);
} }
else if (LV2_IS_PORT_ATOM_SEQUENCE(PortType))
{
if (LV2_IS_PORT_INPUT(PortType))
{
j = evin.count++;
descriptor->connect_port(handle, i, evin.data[j].buffer.a);

if (PortType & LV2_PORT_SUPPORTS_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);
}
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.a);

if (PortType & LV2_PORT_SUPPORTS_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);
}
if (PortType & LV2_PORT_SUPPORTS_TIME)
{
evout.data[j].types |= CARLA_EVENT_TYPE_TIME;
}
}
else
qWarning("WARNING - Got a broken Port (Atom Sequence, but not input or output)");
}
else if (LV2_IS_PORT_EVENT(PortType)) else if (LV2_IS_PORT_EVENT(PortType))
{ {
if (LV2_IS_PORT_INPUT(PortType)) if (LV2_IS_PORT_INPUT(PortType))
@@ -905,12 +962,12 @@ 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 (LV2_IS_PORT_EVENT_MIDI(PortType))
if (PortType & LV2_PORT_SUPPORTS_MIDI)
{ {
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 (LV2_IS_PORT_EVENT_TIME(PortType))
if (PortType & LV2_PORT_SUPPORTS_TIME)
{ {
evin.data[j].types |= CARLA_EVENT_TYPE_TIME; evin.data[j].types |= CARLA_EVENT_TYPE_TIME;
} }
@@ -920,12 +977,12 @@ public:
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 (LV2_IS_PORT_EVENT_MIDI(PortType))
if (PortType & LV2_PORT_SUPPORTS_MIDI)
{ {
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 (LV2_IS_PORT_EVENT_TIME(PortType))
if (PortType & LV2_PORT_SUPPORTS_TIME)
{ {
evout.data[j].types |= CARLA_EVENT_TYPE_TIME; evout.data[j].types |= CARLA_EVENT_TYPE_TIME;
} }
@@ -1200,8 +1257,10 @@ public:
void* evouts_buffer[evout.count]; void* evouts_buffer[evout.count];


// different midi APIs // different midi APIs
LV2_MIDIState evin_states[evin.count];
uint32_t atomSequenceOffsets[evin.count];
LV2_Event_Iterator evin_iters[evin.count]; LV2_Event_Iterator evin_iters[evin.count];
LV2_MIDIState evin_states[evin.count];



for (i=0; i < ain.count; i++) for (i=0; i < ain.count; i++)
ains_buffer[i] = (jack_default_audio_sample_t*)jack_port_get_buffer(ain.ports[i], nframes); ains_buffer[i] = (jack_default_audio_sample_t*)jack_port_get_buffer(ain.ports[i], nframes);
@@ -1213,6 +1272,11 @@ public:
{ {
if (evin.data[i].types & CARLA_EVENT_DATA_ATOM) if (evin.data[i].types & CARLA_EVENT_DATA_ATOM)
{ {
atomSequenceOffsets[i] = 0;
evin.data[i].buffer.a->atom.size = 0;
evin.data[i].buffer.a->atom.type = CARLA_URI_MAP_ID_ATOM_SEQUENCE;
evin.data[i].buffer.a->body.unit = CARLA_URI_MAP_ID_NULL;
evin.data[i].buffer.a->body.pad = 0;
} }
else if (evin.data[i].types & CARLA_EVENT_DATA_EVENT) else if (evin.data[i].types & CARLA_EVENT_DATA_EVENT)
{ {
@@ -1237,14 +1301,18 @@ public:


for (i=0; i < evout.count; i++) for (i=0; i < evout.count; i++)
{ {
if (evin.data[i].types & CARLA_EVENT_DATA_ATOM)
if (evout.data[i].types & CARLA_EVENT_DATA_ATOM)
{ {
evout.data[i].buffer.a->atom.size = 0;
evout.data[i].buffer.a->atom.type = CARLA_URI_MAP_ID_ATOM_SEQUENCE;
evout.data[i].buffer.a->body.unit = CARLA_URI_MAP_ID_NULL;
evout.data[i].buffer.a->body.pad = 0;
} }
else if (evin.data[i].types & CARLA_EVENT_DATA_EVENT)
else if (evout.data[i].types & CARLA_EVENT_DATA_EVENT)
{ {
lv2_event_buffer_reset(evout.data[i].buffer.e, LV2_EVENT_AUDIO_STAMP, (uint8_t*)(evout.data[i].buffer.e + 1)); lv2_event_buffer_reset(evout.data[i].buffer.e, LV2_EVENT_AUDIO_STAMP, (uint8_t*)(evout.data[i].buffer.e + 1));
} }
else if (evin.data[i].types & CARLA_EVENT_DATA_MIDI_LL)
else if (evout.data[i].types & CARLA_EVENT_DATA_MIDI_LL)
{ {
// not needed // not needed
} }
@@ -1432,9 +1500,20 @@ public:
if (evin.data[k].types & CARLA_EVENT_TYPE_MIDI) if (evin.data[k].types & CARLA_EVENT_TYPE_MIDI)
{ {
if (evin.data[k].types & CARLA_EVENT_DATA_ATOM) if (evin.data[k].types & CARLA_EVENT_DATA_ATOM)
continue; // TODO
{
LV2_Atom_Event* aev = (LV2_Atom_Event*)((char*)LV2_ATOM_CONTENTS(LV2_Atom_Sequence, evin.data[k].buffer.a) + atomSequenceOffsets[k]);
aev->time.frames = 0;
aev->body.type = CARLA_URI_MAP_ID_EVENT_MIDI;
aev->body.size = 3;
memcpy(LV2_ATOM_BODY(&aev->body), midi_event, 3);

uint32_t size = lv2_atom_pad_size(sizeof(LV2_Atom_Event) + 3);
atomSequenceOffsets[k] += size;
evin.data[k].buffer.a->atom.size += size;
}
else if (evin.data[k].types & CARLA_EVENT_DATA_EVENT) else if (evin.data[k].types & CARLA_EVENT_DATA_EVENT)
lv2_event_write(&evin_iters[k], 0, 0, CARLA_URI_MAP_ID_EVENT_MIDI, 3, midi_event); lv2_event_write(&evin_iters[k], 0, 0, CARLA_URI_MAP_ID_EVENT_MIDI, 3, midi_event);

else if (evin.data[k].types & CARLA_EVENT_DATA_MIDI_LL) else if (evin.data[k].types & CARLA_EVENT_DATA_MIDI_LL)
lv2midi_put_event(&evin_states[k], 0, 3, midi_event); lv2midi_put_event(&evin_states[k], 0, 3, midi_event);
} }
@@ -1720,6 +1799,7 @@ public:
{ {
if (evin.data[i].types & CARLA_EVENT_DATA_ATOM) if (evin.data[i].types & CARLA_EVENT_DATA_ATOM)
{ {
free(evin.data[i].buffer.a);
} }
else if (evin.data[i].types & CARLA_EVENT_DATA_EVENT) else if (evin.data[i].types & CARLA_EVENT_DATA_EVENT)
{ {
@@ -1741,6 +1821,7 @@ public:
{ {
if (evout.data[i].types & CARLA_EVENT_DATA_ATOM) if (evout.data[i].types & CARLA_EVENT_DATA_ATOM)
{ {
free(evout.data[i].buffer.a);
} }
else if (evout.data[i].types & CARLA_EVENT_DATA_EVENT) else if (evout.data[i].types & CARLA_EVENT_DATA_EVENT)
{ {
@@ -1907,6 +1988,7 @@ public:
LV2_Property PortType = rdf_descriptor->Ports[i].Type; LV2_Property PortType = rdf_descriptor->Ports[i].Type;
if (bool(LV2_IS_PORT_AUDIO(PortType) || LV2_IS_PORT_CONTROL(PortType) || LV2_IS_PORT_EVENT(PortType) || LV2_IS_PORT_MIDI_LL(PortType)) == false) if (bool(LV2_IS_PORT_AUDIO(PortType) || LV2_IS_PORT_CONTROL(PortType) || LV2_IS_PORT_EVENT(PortType) || LV2_IS_PORT_MIDI_LL(PortType)) == false)
{ {
qCritical("Got unsupported port -> %i", PortType);
if (! LV2_IS_PORT_OPTIONAL(rdf_descriptor->Ports[i].Properties)) if (! LV2_IS_PORT_OPTIONAL(rdf_descriptor->Ports[i].Properties))
{ {
set_last_error("Plugin requires a port that is not currently supported"); set_last_error("Plugin requires a port that is not currently supported");
@@ -1926,8 +2008,6 @@ public:
can_continue = false; can_continue = false;
break; break;
} }
else
qDebug("Plugin wants a feature that is not supported:\n%s", rdf_descriptor->Features[i].URI);
} }


// Check extensions (...) // Check extensions (...)
@@ -2008,17 +2088,17 @@ public:
switch (rdf_descriptor->UIs[i].Type) switch (rdf_descriptor->UIs[i].Type)
{ {
case LV2_UI_QT4: case LV2_UI_QT4:
if (is_ui_bridgeable(i))
eQt4 = i;
else
iQt4 = i;
//if (is_ui_bridgeable(i))
// eQt4 = i;
//else
iQt4 = i;
break; break;


case LV2_UI_X11: case LV2_UI_X11:
if (is_ui_bridgeable(i))
eX11 = i;
else
iX11 = i;
//if (is_ui_bridgeable(i))
// eX11 = i;
//else
iX11 = i;
break; break;


case LV2_UI_GTK2: case LV2_UI_GTK2:
@@ -2293,6 +2373,14 @@ public:
else if (strcmp(uri, "http://lv2plug.in/ns/ext/time#Position") == 0) else if (strcmp(uri, "http://lv2plug.in/ns/ext/time#Position") == 0)
return CARLA_URI_MAP_ID_EVENT_TIME; return CARLA_URI_MAP_ID_EVENT_TIME;
} }
else if (strcmp(uri, LV2_ATOM__Chunk) == 0)
{
return CARLA_URI_MAP_ID_ATOM_CHUNK;
}
else if (strcmp(uri, LV2_ATOM__Sequence) == 0)
{
return CARLA_URI_MAP_ID_ATOM_SEQUENCE;
}
else if (strcmp(uri, LV2_ATOM__String) == 0) else if (strcmp(uri, LV2_ATOM__String) == 0)
{ {
return CARLA_URI_MAP_ID_ATOM_STRING; return CARLA_URI_MAP_ID_ATOM_STRING;
@@ -2317,6 +2405,10 @@ public:
return CARLA_URI_MAP_ID_EVENT_MIDI; return CARLA_URI_MAP_ID_EVENT_MIDI;
else if (strcmp(uri, "http://lv2plug.in/ns/ext/time#Position") == 0) else if (strcmp(uri, "http://lv2plug.in/ns/ext/time#Position") == 0)
return CARLA_URI_MAP_ID_EVENT_TIME; return CARLA_URI_MAP_ID_EVENT_TIME;
else if (strcmp(uri, LV2_ATOM__Chunk) == 0)
return CARLA_URI_MAP_ID_ATOM_CHUNK;
else if (strcmp(uri, LV2_ATOM__Sequence) == 0)
return CARLA_URI_MAP_ID_ATOM_SEQUENCE;
else if (strcmp(uri, LV2_ATOM__String) == 0) else if (strcmp(uri, LV2_ATOM__String) == 0)
return CARLA_URI_MAP_ID_ATOM_STRING; return CARLA_URI_MAP_ID_ATOM_STRING;


@@ -2338,6 +2430,10 @@ public:
return "http://lv2plug.in/ns/ext/midi#MidiEvent"; return "http://lv2plug.in/ns/ext/midi#MidiEvent";
else if (urid == CARLA_URI_MAP_ID_EVENT_TIME) else if (urid == CARLA_URI_MAP_ID_EVENT_TIME)
return "http://lv2plug.in/ns/ext/time#Position"; return "http://lv2plug.in/ns/ext/time#Position";
else if (urid == CARLA_URI_MAP_ID_ATOM_CHUNK)
return LV2_ATOM__Chunk;
else if (urid == CARLA_URI_MAP_ID_ATOM_SEQUENCE)
return LV2_ATOM__Sequence;
else if (urid == CARLA_URI_MAP_ID_ATOM_STRING) else if (urid == CARLA_URI_MAP_ID_ATOM_STRING)
return LV2_ATOM__String; return LV2_ATOM__String;




+ 6
- 11
src/carla/lv2_rdf.h View File

@@ -136,29 +136,24 @@ struct LV2_RDF_PortScalePoint {
#define LV2_PORT_OUTPUT 0x02 #define LV2_PORT_OUTPUT 0x02
#define LV2_PORT_CONTROL 0x04 #define LV2_PORT_CONTROL 0x04
#define LV2_PORT_AUDIO 0x08 #define LV2_PORT_AUDIO 0x08
#define LV2_PORT_ATOM_MESSAGE 0x10
#define LV2_PORT_ATOM_VALUE 0x20
#define LV2_PORT_ATOM 0x10
#define LV2_PORT_ATOM_SEQUENCE (0x20 | LV2_PORT_ATOM)
#define LV2_PORT_CV 0x40 #define LV2_PORT_CV 0x40
#define LV2_PORT_EVENT 0x80 #define LV2_PORT_EVENT 0x80
#define LV2_PORT_MIDI_LL 0x100 #define LV2_PORT_MIDI_LL 0x100


// TODO - Port Atom types

// Port Event types
#define LV2_PORT_EVENT_MIDI 0x1000
#define LV2_PORT_EVENT_TIME 0x2000
// Port Support Types
#define LV2_PORT_SUPPORTS_MIDI 0x1000
#define LV2_PORT_SUPPORTS_TIME 0x2000


#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)
#define LV2_IS_PORT_CONTROL(x) ((x) & LV2_PORT_CONTROL) #define LV2_IS_PORT_CONTROL(x) ((x) & LV2_PORT_CONTROL)
#define LV2_IS_PORT_AUDIO(x) ((x) & LV2_PORT_AUDIO) #define LV2_IS_PORT_AUDIO(x) ((x) & LV2_PORT_AUDIO)
#define LV2_IS_PORT_ATOM_MESSAGE(x) ((x) & LV2_PORT_ATOM_MESSAGE)
#define LV2_IS_PORT_ATOM_VALUE(x) ((x) & LV2_PORT_ATOM_VALUE)
#define LV2_IS_PORT_ATOM_SEQUENCE(x) ((x) & LV2_PORT_ATOM_SEQUENCE)
#define LV2_IS_PORT_CV(x) ((x) & LV2_PORT_CV) #define LV2_IS_PORT_CV(x) ((x) & LV2_PORT_CV)
#define LV2_IS_PORT_EVENT(x) ((x) & LV2_PORT_EVENT) #define LV2_IS_PORT_EVENT(x) ((x) & LV2_PORT_EVENT)
#define LV2_IS_PORT_MIDI_LL(x) ((x) & LV2_PORT_MIDI_LL) #define LV2_IS_PORT_MIDI_LL(x) ((x) & LV2_PORT_MIDI_LL)
#define LV2_IS_PORT_EVENT_MIDI(x) ((x) & LV2_PORT_EVENT_MIDI)
#define LV2_IS_PORT_EVENT_TIME(x) ((x) & LV2_PORT_EVENT_TIME)


// Port Properties // Port Properties
#define LV2_PORT_OPTIONAL 0x00001 #define LV2_PORT_OPTIONAL 0x00001


+ 29
- 10
src/carla_backend.py View File

@@ -184,7 +184,9 @@ else:
] ]


# ------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------
# Carla command-line tools
# Search for Carla library and tools

carla_library_path = ""


carla_discovery_unix32 = "" carla_discovery_unix32 = ""
carla_discovery_unix64 = "" carla_discovery_unix64 = ""
@@ -200,6 +202,13 @@ carla_bridge_lv2_gtk2 = ""
carla_bridge_lv2_qt4 = "" carla_bridge_lv2_qt4 = ""
carla_bridge_lv2_x11 = "" carla_bridge_lv2_x11 = ""


if (WINDOWS):
carla_libname = "carla_backend.dll"
elif (MACOS):
carla_libname = "carla_backend.dylib"
else:
carla_libname = "carla_backend.so"

if (WINDOWS): if (WINDOWS):
PATH = (os.path.join(PROGRAMFILES, "Cadence", "carla"),) PATH = (os.path.join(PROGRAMFILES, "Cadence", "carla"),)


@@ -213,6 +222,23 @@ else:


CWD = sys.path[0] CWD = sys.path[0]


# carla-backend
if (os.path.exists(os.path.join(CWD, "carla", carla_libname))):
carla_library_path = os.path.join(CWD, "carla", carla_libname)
else:
if (WINDOWS):
CARLA_PATH = (os.path.join(PROGRAMFILES, "Cadence"),)
elif (MACOS):
CARLA_PATH = ("/usr/lib", "/usr/local/lib/") # FIXME
else:
CARLA_PATH = ("/usr/lib", "/usr/local/lib/")
for p in CARLA_PATH:
if (os.path.exists(os.path.join(p, "carla", carla_libname))):
carla_library_path = os.path.join(p, "carla", carla_libname)
break

print(carla_library_path)

# discovery-unix32 # discovery-unix32
if (os.path.exists(os.path.join(CWD, "carla-discovery", "carla-discovery-unix32"))): if (os.path.exists(os.path.join(CWD, "carla-discovery", "carla-discovery-unix32"))):
carla_discovery_unix32 = os.path.join(CWD, "carla-discovery", "carla-discovery-unix32") carla_discovery_unix32 = os.path.join(CWD, "carla-discovery", "carla-discovery-unix32")
@@ -547,7 +573,7 @@ def checkPluginLV2(rdf_info):
elif (PortType & lv2_rdf.LV2_PORT_OUTPUT): elif (PortType & lv2_rdf.LV2_PORT_OUTPUT):
pinfo['audio.outs'] += 1 pinfo['audio.outs'] += 1


elif (PortType & lv2_rdf.LV2_PORT_EVENT_MIDI):
elif (PortType & lv2_rdf.LV2_PORT_SUPPORTS_MIDI):
pinfo['midi.total'] += 1 pinfo['midi.total'] += 1
if (PortType & lv2_rdf.LV2_PORT_INPUT): if (PortType & lv2_rdf.LV2_PORT_INPUT):
pinfo['midi.ins'] += 1 pinfo['midi.ins'] += 1
@@ -791,14 +817,7 @@ class Host(object):
def __init__(self): def __init__(self):
object.__init__(self) object.__init__(self)


if (WINDOWS):
libname = "carla_backend.dll"
elif (MACOS):
libname = "carla_backend.dylib"
else:
libname = "carla_backend.so"

self.lib = cdll.LoadLibrary(os.path.join("carla", libname))
self.lib = cdll.LoadLibrary(carla_library_path)


self.lib.carla_init.argtypes = [c_char_p] self.lib.carla_init.argtypes = [c_char_p]
self.lib.carla_init.restype = c_bool self.lib.carla_init.restype = c_bool


+ 13
- 13
src/digitalpeakmeter.py View File

@@ -113,8 +113,14 @@ class DigitalPeakMeter(QWidget):
value = 5 value = 5
self.m_smoothMultiplier = value self.m_smoothMultiplier = value


def minimumSizeHint(self):
return QSize(30, 30)

def sizeHint(self):
return QSize(self.m_width, self.m_height)

def updateSizes(self): def updateSizes(self):
self.m_width = self.width()
self.m_width = self.width()
self.m_height = self.height() self.m_height = self.height()
self.m_sizeMeter = 0 self.m_sizeMeter = 0


@@ -130,12 +136,6 @@ class DigitalPeakMeter(QWidget):


self.update() self.update()


def minimumSizeHint(self):
return QSize(30, 30)

def sizeHint(self):
return QSize(self.m_width, self.m_height)

def paintEvent(self, event): def paintEvent(self, event):
painter = QPainter(self) painter = QPainter(self)


@@ -152,14 +152,14 @@ class DigitalPeakMeter(QWidget):
continue continue


if (self.m_orientation == self.HORIZONTAL): if (self.m_orientation == self.HORIZONTAL):
value = self.m_width*level
value = level*self.m_width
elif (self.m_orientation == self.VERTICAL): elif (self.m_orientation == self.VERTICAL):
value = self.m_height-(self.m_height*level)
value = float(self.m_height)-(level*self.m_height)
else: else:
value = 0
value = 0.0


if (value < 0):
value = 0
if (value < 0.0):
value = 0.0


# Don't bounce the meter so much # Don't bounce the meter so much
if (self.m_smoothMultiplier > 0): if (self.m_smoothMultiplier > 0):
@@ -224,7 +224,7 @@ class DigitalPeakMeter(QWidget):
painter.setPen(QColor(110, 15, 15, 100)) painter.setPen(QColor(110, 15, 15, 100))
painter.drawLine(1, lsmall-(lsmall/1.04), lfull, lsmall-(lsmall/1.04)) painter.drawLine(1, lsmall-(lsmall/1.04), lfull, lsmall-(lsmall/1.04))


QWidget.paintEvent(self, event)
#QWidget.paintEvent(self, event)


def resizeEvent(self, event): def resizeEvent(self, event):
self.updateSizes() self.updateSizes()


+ 69
- 46
src/lv2_rdf.py View File

@@ -13,16 +13,14 @@ LV2_HOST_INFO_URI = "http://lv2plug.in/ns/ext/host-info"
LV2_INSTANCE_ACCESS_URI = "http://lv2plug.in/ns/ext/instance-access" LV2_INSTANCE_ACCESS_URI = "http://lv2plug.in/ns/ext/instance-access"
LV2_LOG_URI = "http://lv2plug.in/ns/ext/log" LV2_LOG_URI = "http://lv2plug.in/ns/ext/log"
LV2_MIDI_URI = "http://lv2plug.in/ns/ext/midi" LV2_MIDI_URI = "http://lv2plug.in/ns/ext/midi"
LV2_PARAMETERS_URI = "http://lv2plug.in/ns/ext/parameters" # FIXME?
LV2_PATCH_URI = "http://lv2plug.in/ns/ext/patch" LV2_PATCH_URI = "http://lv2plug.in/ns/ext/patch"
LV2_PORT_GROUPS_URI = "http://lv2plug.in/ns/ext/port-groups" LV2_PORT_GROUPS_URI = "http://lv2plug.in/ns/ext/port-groups"
LV2_PORT_PROPS_URI = "http://lv2plug.in/ns/ext/port-props" LV2_PORT_PROPS_URI = "http://lv2plug.in/ns/ext/port-props"
LV2_PRESETS_URI = "http://lv2plug.in/ns/ext/presets" LV2_PRESETS_URI = "http://lv2plug.in/ns/ext/presets"
LV2_PUI_URI = "http://lv2plug.in/ns/ext/pui"
LV2_REFERENCE_URI = "http://lv2plug.in/ns/ext/reference"
LV2_RESIZE_PORT_URI = "http://lv2plug.in/ns/ext/resize-port" LV2_RESIZE_PORT_URI = "http://lv2plug.in/ns/ext/resize-port"
LV2_STATE_URI = "http://lv2plug.in/ns/ext/state" LV2_STATE_URI = "http://lv2plug.in/ns/ext/state"
LV2_TIME_URI = "http://lv2plug.in/ns/ext/time" LV2_TIME_URI = "http://lv2plug.in/ns/ext/time"
LV2_UI_RESIZE_URI = "http://lv2plug.in/ns/ext/ui-resize"
LV2_URI_MAP_URI = "http://lv2plug.in/ns/ext/uri-map" LV2_URI_MAP_URI = "http://lv2plug.in/ns/ext/uri-map"
LV2_URID_URI = "http://lv2plug.in/ns/ext/urid" LV2_URID_URI = "http://lv2plug.in/ns/ext/urid"
LV2_WORKER_URI = "http://lv2plug.in/ns/ext/worker" LV2_WORKER_URI = "http://lv2plug.in/ns/ext/worker"
@@ -38,6 +36,7 @@ LV2_RTSAFE_MEMORY_POOL_URI = "http://home.gna.org/lv2dynparam/rtmempool/v1"
LV2_EXTERNAL_UI_URI = "http://nedko.arnaudov.name/lv2/external_ui/" LV2_EXTERNAL_UI_URI = "http://nedko.arnaudov.name/lv2/external_ui/"


LV2_RDF_Supported_Features_URI = ( LV2_RDF_Supported_Features_URI = (
LV2_ATOM_URI,
LV2_DATA_ACCESS_URI, LV2_DATA_ACCESS_URI,
LV2_EVENT_URI, LV2_EVENT_URI,
LV2_HOST_INFO_URI, LV2_HOST_INFO_URI,
@@ -46,7 +45,6 @@ LV2_RDF_Supported_Features_URI = (
LV2_PORT_PROPS_URI, LV2_PORT_PROPS_URI,
LV2_PRESETS_URI, LV2_PRESETS_URI,
LV2_STATE_URI, LV2_STATE_URI,
LV2_UI_RESIZE_URI,
LV2_URI_MAP_URI, LV2_URI_MAP_URI,
LV2_URID_URI, LV2_URID_URI,
LV2_UI_URI, LV2_UI_URI,
@@ -147,17 +145,15 @@ LV2_PORT_INPUT = 0x01
LV2_PORT_OUTPUT = 0x02 LV2_PORT_OUTPUT = 0x02
LV2_PORT_CONTROL = 0x04 LV2_PORT_CONTROL = 0x04
LV2_PORT_AUDIO = 0x08 LV2_PORT_AUDIO = 0x08
LV2_PORT_ATOM_MESSAGE = 0x10
LV2_PORT_ATOM_VALUE = 0x20
LV2_PORT_ATOM = 0x10
LV2_PORT_ATOM_SEQUENCE = 0x20 | LV2_PORT_ATOM
LV2_PORT_CV = 0x40 LV2_PORT_CV = 0x40
LV2_PORT_EVENT = 0x80 LV2_PORT_EVENT = 0x80
LV2_PORT_MIDI_LL = 0x100 LV2_PORT_MIDI_LL = 0x100


# TODO - Port Atom types

# Port Event types
LV2_PORT_EVENT_MIDI = 0x1000
LV2_PORT_EVENT_TIME = 0x2000
# Port Support Types
LV2_PORT_SUPPORTS_MIDI = 0x1000
LV2_PORT_SUPPORTS_TIME = 0x2000


# Port Properties # Port Properties
LV2_PORT_OPTIONAL = 0x00001 LV2_PORT_OPTIONAL = 0x00001
@@ -470,20 +466,28 @@ NS_rdfs = "http://www.w3.org/2000/01/rdf-schema#"


NS_lv2 = "http://lv2plug.in/ns/lv2core#" NS_lv2 = "http://lv2plug.in/ns/lv2core#"
NS_lv2atom = "http://lv2plug.in/ns/ext/atom#" NS_lv2atom = "http://lv2plug.in/ns/ext/atom#"
NS_lv2ctx = "http://lv2plug.in/ns/ext/contexts#"
NS_lv2cv = "http://lv2plug.in/ns/ext/cv-port#" NS_lv2cv = "http://lv2plug.in/ns/ext/cv-port#"
NS_lv2dyn = "http://lv2plug.in/ns/ext/dynmanifest#"
NS_lv2da = "http://lv2plug.in/ns/ext/data-access#"
NS_lv2dman = "http://lv2plug.in/ns/ext/dynmanifest#"
NS_lv2ev = "http://lv2plug.in/ns/ext/event#" NS_lv2ev = "http://lv2plug.in/ns/ext/event#"
NS_lv2hi = "http://lv2plug.in/ns/ext/host-info#" NS_lv2hi = "http://lv2plug.in/ns/ext/host-info#"
NS_lv2ia = "http://lv2plug.in/ns/ext/instance-access#"
NS_lv2log = "http://lv2plug.in/ns/ext/log#"
NS_lv2param = "http://lv2plug.in/ns/ext/parameters#"
NS_lv2patch = "http://lv2plug.in/ns/ext/patch#"
NS_lv2pg = "http://lv2plug.in/ns/ext/port-groups#" NS_lv2pg = "http://lv2plug.in/ns/ext/port-groups#"
NS_lv2pprops = "http://lv2plug.in/ns/ext/port-props#" NS_lv2pprops = "http://lv2plug.in/ns/ext/port-props#"
NS_lv2pset = "http://lv2plug.in/ns/ext/presets#" NS_lv2pset = "http://lv2plug.in/ns/ext/presets#"
NS_lv2rsz = "http://lv2plug.in/ns/ext/resize-port#"
NS_lv2state = "http://lv2plug.in/ns/ext/state#" NS_lv2state = "http://lv2plug.in/ns/ext/state#"
NS_lv2umap = "http://lv2plug.in/ns/ext/uri-map#"
NS_lv2urid = "http://lv2plug.in/ns/ext/urid#"
NS_lv2work = "http://lv2plug.in/ns/ext/worker#"
NS_lv2ui = "http://lv2plug.in/ns/extensions/ui#" NS_lv2ui = "http://lv2plug.in/ns/extensions/ui#"
NS_lv2units = "http://lv2plug.in/ns/extensions/units#" NS_lv2units = "http://lv2plug.in/ns/extensions/units#"
#NS_llext = "http://ll-plugins.nongnu.org/lv2/ext/" #NS_llext = "http://ll-plugins.nongnu.org/lv2/ext/"
NS_lv2mm = "http://ll-plugins.nongnu.org/lv2/ext/midimap#"
NS_llplug = "http://ll-plugins.nongnu.org/lv2/namespace#"
NS_lv2mm = "http://ll-plugins.nongnu.org/lv2/ext/midimap#" # FIXME?
NS_llplug = "http://ll-plugins.nongnu.org/lv2/namespace#" # FIXME?


# Prefixes (sorted alphabetically and by type) # Prefixes (sorted alphabetically and by type)
rdf_prefix = { rdf_prefix = {
@@ -496,8 +500,6 @@ rdf_prefix = {
'doap:license': NS_doap+"license", 'doap:license': NS_doap+"license",
'doap:maintainer': NS_doap+"maintainer", 'doap:maintainer': NS_doap+"maintainer",
'doap:name': NS_doap+"name", 'doap:name': NS_doap+"name",
#'foaf:homepage': "http://xmlns.com/foaf/0.1/homepage",
#'foaf:mbox': "http://xmlns.com/foaf/0.1/mbox",
'foaf:name': NS_foaf+"name", 'foaf:name': NS_foaf+"name",
'rdf:type': NS_rdf+"type", 'rdf:type': NS_rdf+"type",
'rdf:value': NS_rdf+"value", 'rdf:value': NS_rdf+"value",
@@ -513,39 +515,44 @@ rdf_prefix = {
'lv2:default': NS_lv2+"default", 'lv2:default': NS_lv2+"default",
'lv2:documentation': NS_lv2+"documentation", 'lv2:documentation': NS_lv2+"documentation",
'lv2:extensionData': NS_lv2+"extensionData", 'lv2:extensionData': NS_lv2+"extensionData",
'lv2:freeWheeling': NS_lv2+"freeWheeling",
'lv2:hasParameter': NS_lv2+"hasParameter",
'lv2:index': NS_lv2+"index", 'lv2:index': NS_lv2+"index",
'lv2:isParameter': NS_lv2+"isParameter",
'lv2:latency': NS_lv2+"latency",
'lv2:maximum': NS_lv2+"maximum", 'lv2:maximum': NS_lv2+"maximum",
'lv2:minimum': NS_lv2+"minimum", 'lv2:minimum': NS_lv2+"minimum",
'lv2:name': NS_lv2+"name", 'lv2:name': NS_lv2+"name",
'lv2:port': NS_lv2+"port", 'lv2:port': NS_lv2+"port",
'lv2:portProperty': NS_lv2+"portProperty", 'lv2:portProperty': NS_lv2+"portProperty",
'lv2:property': NS_lv2+"property",
'lv2:scalePoint': NS_lv2+"scalePoint", 'lv2:scalePoint': NS_lv2+"scalePoint",
'lv2:symbol': NS_lv2+"symbol", 'lv2:symbol': NS_lv2+"symbol",


'lv2:optionalFeature': NS_lv2+"optionalFeature", 'lv2:optionalFeature': NS_lv2+"optionalFeature",
'lv2:requiredFeature': NS_lv2+"requiredFeature", 'lv2:requiredFeature': NS_lv2+"requiredFeature",


# LV2 Atom
'lv2atom:MessagePort': NS_lv2atom+"MessagePort",
# LV2 Atom - TODO, incomplete
'lv2atom:AtomPort': NS_lv2atom+"AtomPort",
'lv2atom:bufferType': NS_lv2atom+"bufferType",
'lv2atom:Sequence': NS_lv2atom+"Sequence",
'lv2atom:String': NS_lv2atom+"String", 'lv2atom:String': NS_lv2atom+"String",
'lv2atom:ValuePort': NS_lv2atom+"ValuePort",
'lv2atom:supports': NS_lv2atom+"supports",


# LV2 CV # LV2 CV
'lv2cv:CVPort': NS_lv2cv+"CVPort", 'lv2cv:CVPort': NS_lv2cv+"CVPort",


# LV2 Event
# LV2 Event - TODO, incomplete
'lv2ev:EventPort': NS_lv2ev+"EventPort", 'lv2ev:EventPort': NS_lv2ev+"EventPort",
'lv2ev:supportsEvent': NS_lv2ev+"supportsEvent", 'lv2ev:supportsEvent': NS_lv2ev+"supportsEvent",


# LV2 Presets
# LV2 Presets - FIXME appliesTo ?, see when new lv2 gets released
'lv2pset:Preset': NS_lv2pset+"Preset", 'lv2pset:Preset': NS_lv2pset+"Preset",
'lv2pset:value': NS_lv2pset+"value", 'lv2pset:value': NS_lv2pset+"value",


# LV2 State
# LV2 State - TODO, incomplete
'lv2state:state': NS_lv2state+"state", 'lv2state:state': NS_lv2state+"state",


# LV2 UI
# LV2 UI - TODO, incomplete
'lv2ui:ui': NS_lv2ui+"ui", 'lv2ui:ui': NS_lv2ui+"ui",
'lv2ui:binary': NS_lv2ui+"binary", 'lv2ui:binary': NS_lv2ui+"binary",
'lv2ui:events': NS_lv2ui+"events", 'lv2ui:events': NS_lv2ui+"events",
@@ -556,12 +563,14 @@ rdf_prefix = {
'lv2ui:optionalFeature': NS_lv2ui+"optionalFeature", 'lv2ui:optionalFeature': NS_lv2ui+"optionalFeature",
'lv2ui:requiredFeature': NS_lv2ui+"requiredFeature", 'lv2ui:requiredFeature': NS_lv2ui+"requiredFeature",


# LV2 Units
# LV2 Units - TODO, incomplete
'lv2units:unit': NS_lv2units+"unit", 'lv2units:unit': NS_lv2units+"unit",
'lv2units:name': NS_lv2units+"name", 'lv2units:name': NS_lv2units+"name",
'lv2units:render': NS_lv2units+"render", 'lv2units:render': NS_lv2units+"render",
'lv2units:symbol': NS_lv2units+"symbol", 'lv2units:symbol': NS_lv2units+"symbol",


# FIXME ?

# LV2 Midi Map # LV2 Midi Map
'lv2mm:defaultMidiController': NS_lv2mm+"defaultMidiController", 'lv2mm:defaultMidiController': NS_lv2mm+"defaultMidiController",
'lv2mm:controllerType': NS_lv2mm+"controllerType", 'lv2mm:controllerType': NS_lv2mm+"controllerType",
@@ -702,10 +711,8 @@ def get_c_port_type(value):
return LV2_PORT_CONTROL return LV2_PORT_CONTROL
elif (value_str == "AudioPort"): elif (value_str == "AudioPort"):
return LV2_PORT_AUDIO return LV2_PORT_AUDIO
elif (value == rdf_prefix['lv2atom:MessagePort']):
return LV2_PORT_ATOM_MESSAGE
elif (value == rdf_prefix['lv2atom:ValuePort']):
return LV2_PORT_ATOM_VALUE
elif (value == rdf_prefix['lv2atom:AtomPort']):
return LV2_PORT_ATOM
elif (value == rdf_prefix['lv2cv:CVPort']): elif (value == rdf_prefix['lv2cv:CVPort']):
return LV2_PORT_CV return LV2_PORT_CV
elif (value == rdf_prefix['lv2ev:EventPort']): elif (value == rdf_prefix['lv2ev:EventPort']):
@@ -716,13 +723,13 @@ def get_c_port_type(value):
print("LV2_RDF - Got an unknown port type '%s'" % value_str) print("LV2_RDF - Got an unknown port type '%s'" % value_str)
return 0 return 0


def get_c_port_event_type(value):
def get_c_port_supported_type(value):
if (value == "http://lv2plug.in/ns/ext/midi#MidiEvent"): if (value == "http://lv2plug.in/ns/ext/midi#MidiEvent"):
return LV2_PORT_EVENT_MIDI
#elif (value == "http://lv2plug.in/ns/ext/time#Position"):
#return LV2_PORT_EVENT_TIME
return LV2_PORT_SUPPORTS_MIDI
elif (value == "http://lv2plug.in/ns/ext/time#Position"):
return LV2_PORT_SUPPORTS_TIME
else: else:
print("LV2_RDF - Got an unknown port event type '%s'" % value)
print("LV2_RDF - Got an unknown port supported type '%s'" % value)
return 0 return 0


def get_c_port_midi_map_type(value): def get_c_port_midi_map_type(value):
@@ -835,7 +842,7 @@ def get_c_port_unit_type(value):
elif (value_str == "semitone12TET"): elif (value_str == "semitone12TET"):
return LV2_UNIT_SEMITONE return LV2_UNIT_SEMITONE
else: else:
print("LV2_RDF - Got an unknown Unit type '%s'" % value_str)
print("LV2_RDF - Got an unknown unit type '%s'" % value_str)
return 0 return 0


def get_c_ui_type(value): def get_c_ui_type(value):
@@ -852,7 +859,7 @@ def get_c_ui_type(value):
elif (value == LV2_EXTERNAL_UI_URI): elif (value == LV2_EXTERNAL_UI_URI):
return LV2_UI_EXTERNAL return LV2_UI_EXTERNAL
else: else:
print("LV2_RDF - Got an unknown UI type '%s'" % value_str)
print("LV2_RDF - Got an unknown ui type '%s'" % value_str)
return 0 return 0


# ------------------------------------------------------------------------------- # -------------------------------------------------------------------------------
@@ -1224,7 +1231,7 @@ def fill_information(parse, bundle_path):
or_plugin_value(uri, 'Type', c_class) or_plugin_value(uri, 'Type', c_class)


# DynManifest, ignored # DynManifest, ignored
elif (s_object.startswith(NS_lv2dyn)):
elif (s_object.startswith(NS_lv2dman)):
pass pass


# Host Info, ignored # Host Info, ignored
@@ -1414,11 +1421,7 @@ def fill_information(parse, bundle_path):
# UI ------------------end # UI ------------------end


# DynManifest, ignored # DynManifest, ignored
elif (s_predicate.startswith(NS_lv2dyn)):
pass

# Contexts, ignored
elif (s_predicate.startswith(NS_lv2ctx)):
elif (s_predicate.startswith(NS_lv2dman)):
pass pass


# Host Info, ignored # Host Info, ignored
@@ -1678,14 +1681,34 @@ def fill_information(parse, bundle_path):
c_port_type = get_c_port_type(port_type) c_port_type = get_c_port_type(port_type)
py_port['Type'] |= c_port_type py_port['Type'] |= c_port_type


# TODO - atom buffer types
if (c_port_type == LV2_PORT_ATOM):
buffer_type_try = get_node_property(s_object, nodes_list, rdf_prefix['lv2atom:bufferType'], None)

if (buffer_type_try != None):
buffer_type = str(buffer_type_try)

if (buffer_type == rdf_prefix['lv2atom:Sequence']):
py_port['Type'] |= LV2_PORT_ATOM_SEQUENCE
else:
print("LV2_RDF - Got an unknown atom buffer type '%s'" % buffer_type)

supported_type_try = get_node_property(s_object, nodes_list, rdf_prefix['lv2atom:supports'], None)

if (supported_type_try != None):
supported_type = str(supported_type_try)
py_port['Type'] |= get_c_port_supported_type(supported_type)
else:
print("LV2_RDF - Internal error, Atom Port without supported type")

else:
print("LV2_RDF - Internal error, Atom Port without buffer type")


if (c_port_type == LV2_PORT_EVENT):
elif (c_port_type == LV2_PORT_EVENT):
event_type_try = get_node_property(s_object, nodes_list, rdf_prefix['lv2ev:supportsEvent'], None) event_type_try = get_node_property(s_object, nodes_list, rdf_prefix['lv2ev:supportsEvent'], None)


if (event_type_try != None): if (event_type_try != None):
event_type = str(event_type_try) event_type = str(event_type_try)
py_port['Type'] |= get_c_port_event_type(event_type)
py_port['Type'] |= get_c_port_supported_type(event_type)
else: else:
print("LV2_RDF - Internal error, Event Port without supported Event") print("LV2_RDF - Internal error, Event Port without supported Event")




+ 6
- 6
src/pixmapdial.py View File

@@ -42,7 +42,7 @@ class PixmapDial(QDial):


self.m_label = "" self.m_label = ""
self.m_label_pos = QPointF(0.0, 0.0) self.m_label_pos = QPointF(0.0, 0.0)
self.m_label_width = 0
self.m_label_width = 0
self.m_label_height = 0 self.m_label_height = 0
self.m_label_gradient = QLinearGradient(0, 0, 0, 1) self.m_label_gradient = QLinearGradient(0, 0, 0, 1)


@@ -52,7 +52,7 @@ class PixmapDial(QDial):
self.m_color2 = QColor(0, 0, 0, 0) self.m_color2 = QColor(0, 0, 0, 0)
self.m_colorT = [self.palette().text().color(), self.palette().mid().color()] self.m_colorT = [self.palette().text().color(), self.palette().mid().color()]
else: else:
## Dark background
# Dark background
self.m_color1 = QColor(0, 0, 0, 255) self.m_color1 = QColor(0, 0, 0, 255)
self.m_color2 = QColor(0, 0, 0, 0) self.m_color2 = QColor(0, 0, 0, 0)
self.m_colorT = [Qt.white, Qt.darkGray] self.m_colorT = [Qt.white, Qt.darkGray]
@@ -111,7 +111,7 @@ class PixmapDial(QDial):
return QSize(self.p_size, self.p_size) return QSize(self.p_size, self.p_size)


def updateSizes(self): def updateSizes(self):
self.p_width = self.m_pixmap.width()
self.p_width = self.m_pixmap.width()
self.p_height = self.m_pixmap.height() self.p_height = self.m_pixmap.height()


if (self.p_width < 1): if (self.p_width < 1):
@@ -127,8 +127,8 @@ class PixmapDial(QDial):
self.p_size = self.p_width self.p_size = self.p_width
self.p_count = self.p_height/self.p_width self.p_count = self.p_height/self.p_width


self.setMinimumSize(self.p_size, self.p_size+self.m_label_height+5)
self.setMaximumSize(self.p_size, self.p_size+self.m_label_height+5)
self.setMinimumSize(self.p_size, self.p_size + self.m_label_height + 5)
self.setMaximumSize(self.p_size, self.p_size + self.m_label_height + 5)


def paintEvent(self, event): def paintEvent(self, event):
painter = QPainter(self) painter = QPainter(self)
@@ -168,4 +168,4 @@ class PixmapDial(QDial):


def resizeEvent(self, event): def resizeEvent(self, event):
self.updateSizes() self.updateSizes()
return QDial.resizeEvent(self, event)
QDial.resizeEvent(self, event)

Loading…
Cancel
Save