Browse Source

More carla work, now shows Edit dialog

tags/v0.9.0
falkTX 13 years ago
parent
commit
23cef99665
7 changed files with 703 additions and 544 deletions
  1. +501
    -488
      src/carla.py
  2. +54
    -48
      src/carla/carla_backend.cpp
  3. +1
    -0
      src/carla/carla_backend.h
  4. +134
    -2
      src/carla/carla_plugin.h
  5. +2
    -2
      src/carla_backend.py
  6. +1
    -1
      src/paramspinbox.py
  7. +10
    -3
      src/shared.py

+ 501
- 488
src/carla.py
File diff suppressed because it is too large
View File


+ 54
- 48
src/carla/carla_backend.cpp View File

@@ -176,8 +176,8 @@ bool carla_close()
get_plugin_info(0);
get_parameter_info(0, 0);
get_scalepoint_info(0, 0, 0);
//get_chunk_data(0);
//get_real_plugin_name(0);
get_chunk_data(0);
get_real_plugin_name(0);

return closed;
}
@@ -461,15 +461,13 @@ MidiProgramInfo* get_midi_program_info(unsigned short plugin_id, uint32_t midi_p
CarlaPlugin* plugin = CarlaPlugins[i];
if (plugin && plugin->id() == plugin_id)
{
// if (midi_program_id < plugin->midiprog.count)
// {
// info.valid = true;
// info.bank = plugin->midiprog.data[midi_program_id].bank;
// info.program = plugin->midiprog.data[midi_program_id].program;
// info.label = plugin->midiprog.names[midi_program_id];
// }
// else
// qCritical("get_midi_program_info(%i, %i) - midi_program_id out of bounds", plugin_id, midi_program_id);
if (midi_program_id < plugin->midiprog_count())
{
info.valid = true;
plugin->get_midi_program_info(&info);
}
else
qCritical("get_midi_program_info(%i, %i) - midi_program_id out of bounds", plugin_id, midi_program_id);

return &info;
}
@@ -490,10 +488,10 @@ ParameterData* get_parameter_data(unsigned short plugin_id, uint32_t parameter_i
CarlaPlugin* plugin = CarlaPlugins[i];
if (plugin && plugin->id() == plugin_id)
{
// if (parameter_id < plugin->param_count())
// return &plugin->param.data[parameter_id];
// else
// qCritical("get_parameter_data(%i, %i) - parameter_id out of bounds", plugin_id, parameter_id);
if (parameter_id < plugin->param_count())
return plugin->param_data(parameter_id);
else
qCritical("get_parameter_data(%i, %i) - parameter_id out of bounds", plugin_id, parameter_id);

return &data;
}
@@ -514,10 +512,10 @@ ParameterRanges* get_parameter_ranges(unsigned short plugin_id, uint32_t paramet
CarlaPlugin* plugin = CarlaPlugins[i];
if (plugin && plugin->id() == plugin_id)
{
// if (parameter_id < plugin->param.count)
// return &plugin->param.ranges[parameter_id];
// else
// qCritical("get_parameter_ranges(%i, %i) - parameter_id out of bounds", plugin_id, parameter_id);
if (parameter_id < plugin->param_count())
return plugin->param_ranges(parameter_id);
else
qCritical("get_parameter_ranges(%i, %i) - parameter_id out of bounds", plugin_id, parameter_id);

return &ranges;
}
@@ -616,9 +614,9 @@ uint32_t get_parameter_count(unsigned short plugin_id)

for (unsigned short i=0; i<MAX_PLUGINS; i++)
{
// CarlaPlugin* plugin = CarlaPlugins[i];
// if (plugin && plugin->id() == plugin_id)
// return plugin->param_count;
CarlaPlugin* plugin = CarlaPlugins[i];
if (plugin && plugin->id() == plugin_id)
return plugin->param_count();
}

qCritical("get_parameter_count(%i) - could not find plugin", plugin_id);
@@ -730,12 +728,12 @@ const char* get_real_plugin_name(unsigned short plugin_id)
CarlaPlugin* plugin = CarlaPlugins[i];
if (plugin && plugin->id() == plugin_id)
{
// char buf_str[STR_MAX] = { 0 };
char buf_str[STR_MAX] = { 0 };

// plugin->get_real_name(buf_str);
// real_plugin_name = strdup(buf_str);
plugin->get_real_name(buf_str);
real_plugin_name = strdup(buf_str);

// return real_plugin_name;
return real_plugin_name;
}
}

@@ -844,16 +842,16 @@ double get_output_peak_value(unsigned short plugin_id, unsigned short port_id)

void set_active(unsigned short plugin_id, bool onoff)
{
// qDebug("set_active(%i, %s)", plugin_id, bool2str(onoff));
qDebug("set_active(%i, %s)", plugin_id, bool2str(onoff));

for (unsigned short i=0; i<MAX_PLUGINS; i++)
{
// CarlaPlugin* plugin = CarlaPlugins[i];
// if (plugin && plugin->id() == plugin_id)
// return plugin->set_active(onoff, true, false);
CarlaPlugin* plugin = CarlaPlugins[i];
if (plugin && plugin->id() == plugin_id)
return plugin->set_active(onoff, true, false);
}

// qCritical("set_active(%i, %s) - could not find plugin", plugin_id, bool2str(onoff));
qCritical("set_active(%i, %s) - could not find plugin", plugin_id, bool2str(onoff));
}

void set_drywet(unsigned short plugin_id, double value)
@@ -862,9 +860,9 @@ void set_drywet(unsigned short plugin_id, double value)

for (unsigned short i=0; i<MAX_PLUGINS; i++)
{
// CarlaPlugin* plugin = CarlaPlugins[i];
// if (plugin && plugin->id() == plugin_id)
// return plugin->set_drywet(value, true, false);
CarlaPlugin* plugin = CarlaPlugins[i];
if (plugin && plugin->id() == plugin_id)
return plugin->set_drywet(value, true, false);
}

qCritical("set_drywet(%i, %f) - could not find plugin", plugin_id, value);
@@ -876,9 +874,9 @@ void set_volume(unsigned short plugin_id, double value)

for (unsigned short i=0; i<MAX_PLUGINS; i++)
{
// CarlaPlugin* plugin = CarlaPlugins[i];
// if (plugin && plugin->id() == plugin_id)
// return plugin->set_vol(value, true, false);
CarlaPlugin* plugin = CarlaPlugins[i];
if (plugin && plugin->id() == plugin_id)
return plugin->set_volume(value, true, false);
}

qCritical("set_vol(%i, %f) - could not find plugin", plugin_id, value);
@@ -890,9 +888,9 @@ void set_balance_left(unsigned short plugin_id, double value)

for (unsigned short i=0; i<MAX_PLUGINS; i++)
{
// CarlaPlugin* plugin = CarlaPlugins[i];
// if (plugin && plugin->id() == plugin_id)
// return plugin->set_balance_left(value, true, false);
CarlaPlugin* plugin = CarlaPlugins[i];
if (plugin && plugin->id() == plugin_id)
return plugin->set_balance_left(value, true, false);
}

qCritical("set_balance_left(%i, %f) - could not find plugin", plugin_id, value);
@@ -904,9 +902,9 @@ void set_balance_right(unsigned short plugin_id, double value)

for (unsigned short i=0; i<MAX_PLUGINS; i++)
{
// CarlaPlugin* plugin = CarlaPlugins[i];
// if (plugin && plugin->id() == plugin_id)
// return plugin->set_balance_right(value, true, false);
CarlaPlugin* plugin = CarlaPlugins[i];
if (plugin && plugin->id() == plugin_id)
return plugin->set_balance_right(value, true, false);
}

qCritical("set_balance_right(%i, %f) - could not find plugin", plugin_id, value);
@@ -1101,7 +1099,7 @@ void set_gui_data(unsigned short plugin_id, int data, intptr_t gui_addr)

void show_gui(unsigned short plugin_id, bool yesno)
{
// qDebug("show_gui(%i, %s)", plugin_id, bool2str(yesno));
qDebug("show_gui(%i, %s)", plugin_id, bool2str(yesno));

for (unsigned short i=0; i<MAX_PLUGINS; i++)
{
@@ -1113,7 +1111,7 @@ void show_gui(unsigned short plugin_id, bool yesno)
}
}

// qCritical("show_gui(%i, %s) - could not find plugin", plugin_id, bool2str(yesno));
qCritical("show_gui(%i, %s) - could not find plugin", plugin_id, bool2str(yesno));
}

void idle_gui(unsigned short plugin_id)
@@ -1135,7 +1133,7 @@ void idle_gui(unsigned short plugin_id)

void send_midi_note(unsigned short plugin_id, bool onoff, uint8_t note, uint8_t velocity)
{
// qDebug("send_midi_note(%i, %s, %i, %i)", plugin_id, bool2str(onoff), note, velocity);
qDebug("send_midi_note(%i, %s, %i, %i)", plugin_id, bool2str(onoff), note, velocity);

for (unsigned short i=0; i<MAX_PLUGINS; i++)
{
@@ -1144,7 +1142,7 @@ void send_midi_note(unsigned short plugin_id, bool onoff, uint8_t note, uint8_t
// return send_plugin_midi_note(plugin_id, onoff, note, velocity, true, true, false);
}

// qCritical("send_midi_note(%i, %s, %i, %i) - could not find plugin", plugin_id, bool2str(onoff), note, velocity);
qCritical("send_midi_note(%i, %s, %i, %i) - could not find plugin", plugin_id, bool2str(onoff), note, velocity);
}

void prepare_for_save(unsigned short plugin_id)
@@ -1226,6 +1224,14 @@ double get_latency()
// -------------------------------------------------------------------------------------------------------------------
// Helper functions

const char* bool2str(bool yesno)
{
if (yesno)
return "true";
else
return "false";
}

short get_new_plugin_id()
{
for (unsigned short i=0; i<MAX_PLUGINS; i++)
@@ -1251,7 +1257,7 @@ const char* get_unique_name(const char* name)
qname = "(No name)";

qname.truncate(max);
qname.replace(":", "."); // ":" is used in JACK to split client/port names
//qname.replace(":", "."); // ":" is used in JACK to split client/port names

for (unsigned short i=0; i<MAX_PLUGINS; i++)
{


+ 1
- 0
src/carla/carla_backend.h View File

@@ -288,6 +288,7 @@ CARLA_EXPORT double get_latency();
// -----------------------------------------------------

// Helper functions
const char* bool2str(bool yesno);
short get_new_plugin_id();
const char* get_unique_name(const char* name);
void* get_pointer(intptr_t ptr_addr);


+ 134
- 2
src/carla/carla_plugin.h View File

@@ -89,6 +89,12 @@ public:
{
qDebug("CarlaPlugin::~CarlaPlugin()");

// Unregister jack ports
remove_from_jack();

// Delete data
delete_buffers();

lib_close();

if (m_name)
@@ -131,9 +137,19 @@ public:
return param.count;
}

void set_id(short id)
uint32_t midiprog_count()
{
m_id = id;
return 0;
}

ParameterData* param_data(uint32_t index)
{
return &param.data[index];
}

ParameterRanges* param_ranges(uint32_t index)
{
return &param.ranges[index];
}

void get_audio_port_count_info(PortCountInfo* info)
@@ -165,6 +181,122 @@ public:
}
}

void get_midi_program_info(MidiProgramInfo* info)
{
info->bank = 0;
info->program = 0;
info->label = nullptr;
//info.bank = plugin->midiprog.data[midi_program_id].bank;
//info.program = plugin->midiprog.data[midi_program_id].program;
//info.label = plugin->midiprog.names[midi_program_id];
}

void set_id(short id)
{
m_id = id;
}

void set_active(bool active, bool osc_send, bool callback_send)
{
m_active = active;
double value = active ? 1.0 : 0.0;

if (osc_send)
{
//osc_send_set_parameter_value(&global_osc_data, id, PARAMETER_ACTIVE, value);

//if (hints & PLUGIN_IS_BRIDGE)
// osc_send_control(&osc.data, PARAMETER_ACTIVE, value);
}

if (callback_send)
callback_action(CALLBACK_PARAMETER_CHANGED, m_id, PARAMETER_ACTIVE, 0, value);
}

void set_drywet(double value, bool osc_send, bool callback_send)
{
if (value < 0.0)
value = 0.0;
else if (value > 1.0)
value = 1.0;

x_drywet = value;

if (osc_send)
{
//osc_send_set_parameter_value(&global_osc_data, id, PARAMETER_DRYWET, value);

//if (hints & PLUGIN_IS_BRIDGE)
// osc_send_control(&osc.data, PARAMETER_DRYWET, value);
}

if (callback_send)
callback_action(CALLBACK_PARAMETER_CHANGED, m_id, PARAMETER_DRYWET, 0, value);
}

void set_volume(double value, bool osc_send, bool callback_send)
{
if (value < 0.0)
value = 0.0;
else if (value > 1.27)
value = 1.27;

x_vol = value;

if (osc_send)
{
//osc_send_set_parameter_value(&global_osc_data, id, PARAMETER_VOLUME, value);

//if (hints & PLUGIN_IS_BRIDGE)
// osc_send_control(&osc.data, PARAMETER_VOLUME, value);
}

if (callback_send)
callback_action(CALLBACK_PARAMETER_CHANGED, m_id, PARAMETER_VOLUME, 0, value);
}

void set_balance_left(double value, bool osc_send, bool callback_send)
{
if (value < -1.0)
value = -1.0;
else if (value > 1.0)
value = 1.0;

x_bal_left = value;

if (osc_send)
{
//osc_send_set_parameter_value(&global_osc_data, id, PARAMETER_BALANCE_LEFT, value);

//if (hints & PLUGIN_IS_BRIDGE)
// osc_send_control(&osc.data, PARAMETER_BALANCE_LEFT, value);
}

if (callback_send)
callback_action(CALLBACK_PARAMETER_CHANGED, m_id, PARAMETER_BALANCE_LEFT, 0, value);
}

void set_balance_right(double value, bool osc_send, bool callback_send)
{
if (value < -1.0)
value = -1.0;
else if (value > 1.0)
value = 1.0;

x_bal_right = value;

if (osc_send)
{
//osc_send_set_parameter_value(&global_osc_data, id, PARAMETER_BALANCE_RIGHT, value);

//if (hints & PLUGIN_IS_BRIDGE)
// osc_send_control(&osc.data, PARAMETER_BALANCE_RIGHT, value);
}

if (callback_send)
callback_action(CALLBACK_PARAMETER_CHANGED, m_id, PARAMETER_BALANCE_RIGHT, 0, value);
}

virtual PluginCategory category() = 0;
virtual long unique_id() = 0;



+ 2
- 2
src/carla_backend.py View File

@@ -1056,7 +1056,7 @@ class Host(object):
return self.lib.set_custom_data(plugin_id, dtype, key, value)

def set_chunk_data(self, plugin_id, chunk_data):
self.lib.set_chunk_data(plugin_id, chunk_data)
self.lib.set_chunk_data(plugin_id, chunk_data.encode("utf-8"))

def set_gui_data(self, plugin_id, data, gui_addr):
self.lib.set_gui_data(plugin_id, data, gui_addr)
@@ -1079,7 +1079,7 @@ class Host(object):
self.lib.set_callback_function(Callback)

def set_option(self, option, value, value_str):
self.lib.set_option(option, value, value_str)
self.lib.set_option(option, value, value_str.encode("utf-8"))

def get_last_error(self):
return self.lib.get_last_error()


+ 1
- 1
src/paramspinbox.py View File

@@ -123,7 +123,7 @@ class ParamProgressBar(QProgressBar):
return QProgressBar.mouseReleaseEvent(self, event)

def paintEvent(self, event):
self.setFormat(QString("%1 %2 %3").arg(self._pre_label).arg(self._rvalue).arg(self._label))
self.setFormat("%s %f %s" % (self._pre_label, self._rvalue, self._label))
return QProgressBar.paintEvent(self, event)

# Special SpinBox used for parameters


+ 10
- 3
src/shared.py View File

@@ -179,11 +179,18 @@ def isNumber(string):
# Convert a value to a list
def toList(value):
if value is None:
return []
return []
elif not isinstance(value, list):
return [value]
return [value]
else:
return value
return value

# Convert a ctypes char_p to a string
def toString(value):
if (value):
return value.decode("utf-8")
else:
return ""

# Remove/convert non-ascii chars from a string
def unicode2ascii(string):


Loading…
Cancel
Save