diff --git a/Makefile b/Makefile index 44c1ed5..9a60e9f 100644 --- a/Makefile +++ b/Makefile @@ -244,44 +244,44 @@ install: install -m 644 data/*.desktop $(DESTDIR)$(PREFIX)/share/applications/ # Install icons, 16x16 - install -m 644 src/icons/16x16/cadence.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/ - install -m 644 src/icons/16x16/catarina.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/ - install -m 644 src/icons/16x16/catia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/ - install -m 644 src/icons/16x16/claudia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/ - install -m 644 src/icons/16x16/claudia-launcher.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/ - install -m 644 src/icons/16x16/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/ + install -m 644 resources/16x16/cadence.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/ + install -m 644 resources/16x16/catarina.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/ + install -m 644 resources/16x16/catia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/ + install -m 644 resources/16x16/claudia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/ + install -m 644 resources/16x16/claudia-launcher.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/ + install -m 644 resources/16x16/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/ # Install icons, 48x48 - install -m 644 src/icons/48x48/cadence.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ - install -m 644 src/icons/48x48/catarina.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ - install -m 644 src/icons/48x48/catia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ - install -m 644 src/icons/48x48/claudia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ - install -m 644 src/icons/48x48/claudia-launcher.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ - install -m 644 src/icons/48x48/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ + install -m 644 resources/48x48/cadence.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ + install -m 644 resources/48x48/catarina.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ + install -m 644 resources/48x48/catia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ + install -m 644 resources/48x48/claudia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ + install -m 644 resources/48x48/claudia-launcher.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ + install -m 644 resources/48x48/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ # Install icons, 128x128 - install -m 644 src/icons/128x128/cadence.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ - install -m 644 src/icons/128x128/catarina.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ - install -m 644 src/icons/128x128/catia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ - install -m 644 src/icons/128x128/claudia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ - install -m 644 src/icons/128x128/claudia-launcher.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ - install -m 644 src/icons/128x128/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ + install -m 644 resources/128x128/cadence.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ + install -m 644 resources/128x128/catarina.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ + install -m 644 resources/128x128/catia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ + install -m 644 resources/128x128/claudia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ + install -m 644 resources/128x128/claudia-launcher.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ + install -m 644 resources/128x128/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ # Install icons, 256x256 - install -m 644 src/icons/256x256/cadence.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/ - install -m 644 src/icons/256x256/catarina.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/ - install -m 644 src/icons/256x256/catia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/ - install -m 644 src/icons/256x256/claudia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/ - install -m 644 src/icons/256x256/claudia-launcher.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/ - install -m 644 src/icons/256x256/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/ + install -m 644 resources/256x256/cadence.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/ + install -m 644 resources/256x256/catarina.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/ + install -m 644 resources/256x256/catia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/ + install -m 644 resources/256x256/claudia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/ + install -m 644 resources/256x256/claudia-launcher.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/ + install -m 644 resources/256x256/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/ # Install icons, scalable - install -m 644 src/icons/scalable/cadence.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/ - install -m 644 src/icons/scalable/catarina.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/ - install -m 644 src/icons/scalable/catia.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/ - install -m 644 src/icons/scalable/claudia.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/ - install -m 644 src/icons/scalable/claudia-launcher.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/ - install -m 644 src/icons/scalable/carla.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/ + install -m 644 resources/scalable/cadence.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/ + install -m 644 resources/scalable/catarina.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/ + install -m 644 resources/scalable/catia.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/ + install -m 644 resources/scalable/claudia.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/ + install -m 644 resources/scalable/claudia-launcher.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/ + install -m 644 resources/scalable/carla.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/ # Install main code install -m 755 src/*.py $(DESTDIR)$(PREFIX)/share/cadence/src/ diff --git a/c++/carla-backend/carla_engine.cpp b/c++/carla-backend/carla_engine.cpp index 7f714a4..b34c80a 100644 --- a/c++/carla-backend/carla_engine.cpp +++ b/c++/carla-backend/carla_engine.cpp @@ -837,211 +837,212 @@ void CarlaEngineMidiPort::writeEvent(uint32_t time, uint8_t* data, uint8_t size) // ------------------------------------------------------------------------------------------------------------------- // Carla Engine OSC stuff -void CarlaEngine::osc_send_add_plugin(int plugin_id, const char* plugin_name) +void CarlaEngine::osc_send_add_plugin(const int32_t pluginId, const char* const pluginName) { - qDebug("CarlaEngine::osc_send_add_plugin(%i, %s)", plugin_id, plugin_name); + qDebug("CarlaEngine::osc_send_add_plugin(%i, \"%s\")", pluginId, pluginName); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { char target_path[strlen(oscData->path)+12]; strcpy(target_path, oscData->path); strcat(target_path, "/add_plugin"); - lo_send(oscData->target, target_path, "is", plugin_id, plugin_name); + lo_send(oscData->target, target_path, "is", pluginId, pluginName); } } -void CarlaEngine::osc_send_remove_plugin(int plugin_id) +void CarlaEngine::osc_send_remove_plugin(const int32_t pluginId) { - qDebug("CarlaEngine::osc_send_remove_plugin(%i)", plugin_id); + qDebug("CarlaEngine::osc_send_remove_plugin(%i)", pluginId); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); if (oscData->target) { char target_path[strlen(oscData->path)+15]; strcpy(target_path, oscData->path); strcat(target_path, "/remove_plugin"); - lo_send(oscData->target, target_path, "i", plugin_id); + lo_send(oscData->target, target_path, "i", pluginId); } } -void CarlaEngine::osc_send_set_plugin_data(int plugin_id, int type, int category, int hints, const char* name, const char* label, const char* maker, const char* copyright, long unique_id) +void CarlaEngine::osc_send_set_plugin_data(const int32_t pluginId, const int32_t type, const int32_t category, const int32_t hints, + const char* const realName, const char* const label, const char* const maker, const char* const copyright, const int64_t uniqueId) { - qDebug("CarlaEngine::osc_send_set_plugin_data(%i, %i, %i, %i, %s, %s, %s, %s, %li)", plugin_id, type, category, hints, name, label, maker, copyright, unique_id); + qDebug("CarlaEngine::osc_send_set_plugin_data(%i, %i, %i, %i, \"%s\", \"%s\", \"%s\", \"%s\", %li)", pluginId, type, category, hints, realName, label, maker, copyright, uniqueId); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { char target_path[strlen(oscData->path)+17]; strcpy(target_path, oscData->path); strcat(target_path, "/set_plugin_data"); - lo_send(oscData->target, target_path, "iiiissssi", plugin_id, type, category, hints, name, label, maker, copyright, unique_id); + lo_send(oscData->target, target_path, "iiiissssh", pluginId, type, category, hints, realName, label, maker, copyright, uniqueId); } } -void CarlaEngine::osc_send_set_plugin_ports(int plugin_id, int ains, int aouts, int mins, int mouts, int cins, int couts, int ctotals) +void CarlaEngine::osc_send_set_plugin_ports(const int32_t pluginId, const int32_t audioIns, const int32_t audioOuts, const int32_t midiIns, const int32_t midiOuts, + const int32_t cIns, const int32_t cOuts, const int32_t cTotals) { - qDebug("CarlaEngine::osc_send_set_plugin_ports(%i, %i, %i, %i, %i, %i, %i, %i)", plugin_id, ains, aouts, mins, mouts, cins, couts, ctotals); + qDebug("CarlaEngine::osc_send_set_plugin_ports(%i, %i, %i, %i, %i, %i, %i, %i)", pluginId, audioIns, audioOuts, midiIns, midiOuts, cIns, cOuts, cTotals); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { char target_path[strlen(oscData->path)+18]; strcpy(target_path, oscData->path); strcat(target_path, "/set_plugin_ports"); - lo_send(oscData->target, target_path, "iiiiiiii", plugin_id, ains, aouts, mins, mouts, cins, couts, ctotals); + lo_send(oscData->target, target_path, "iiiiiiii", pluginId, audioIns, audioOuts, midiIns, midiOuts, cIns, cOuts, cTotals); } } -void CarlaEngine::osc_send_set_parameter_value(int plugin_id, int param_id, double value) +void CarlaEngine::osc_send_set_parameter_data(const int32_t pluginId, const int32_t index, const int32_t type, const int32_t hints, + const char* const name, const char* const label, const double current) { -#if DEBUG - if (param_id < 0) - qDebug("CarlaEngine::osc_send_set_parameter_value(%i, %s, %g)", plugin_id, InternalParametersIndex2str((InternalParametersIndex)param_id), value); - else - qDebug("CarlaEngine::osc_send_set_parameter_value(%i, %i, %g)", plugin_id, param_id, value); -#endif - const CarlaOscData* const oscData = m_osc.getControllerData(); - - if (oscData->target) - { - char target_path[strlen(oscData->path)+21]; - strcpy(target_path, oscData->path); - strcat(target_path, "/set_parameter_value"); - lo_send(oscData->target, target_path, "iif", plugin_id, param_id, value); - } -} - -void CarlaEngine::osc_send_set_parameter_data(int plugin_id, int param_id, int ptype, int hints, const char* name, const char* label, double current) -{ - qDebug("CarlaEngine::osc_send_set_parameter_data(%i, %i, %i, %i, %s, %s, %f)", plugin_id, param_id, ptype, hints, name, label, current); + qDebug("CarlaEngine::osc_send_set_parameter_data(%i, %i, %i, %i, \"%s\", \"%s\", %g)", pluginId, index, type, hints, name, label, current); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { char target_path[strlen(oscData->path)+20]; strcpy(target_path, oscData->path); strcat(target_path, "/set_parameter_data"); - lo_send(oscData->target, target_path, "iiiissf", plugin_id, param_id, ptype, hints, name, label, current); + lo_send(oscData->target, target_path, "iiiissd", pluginId, index, type, hints, name, label, current); } } -void CarlaEngine::osc_send_set_parameter_ranges(int plugin_id, int param_id, double x_min, double x_max, double x_def, double x_step, double x_step_small, double x_step_large) +void CarlaEngine::osc_send_set_parameter_ranges(const int32_t pluginId, const int32_t index, const double min, const double max, const double def, + const double step, const double stepSmall, const double stepLarge) { - qDebug("CarlaEngine::osc_send_set_parameter_ranges(%i, %i, %f, %f, %f, %f, %f, %f)", plugin_id, param_id, x_min, x_max, x_def, x_step, x_step_small, x_step_large); + qDebug("CarlaEngine::osc_send_set_parameter_ranges(%i, %i, %g, %g, %g, %g, %g, %g)", pluginId, index, min, max, def, step, stepSmall, stepLarge); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { char target_path[strlen(oscData->path)+22]; strcpy(target_path, oscData->path); strcat(target_path, "/set_parameter_ranges"); - lo_send(oscData->target, target_path, "iiffffff", plugin_id, param_id, x_min, x_max, x_def, x_step, x_step_small, x_step_large); + lo_send(oscData->target, target_path, "iidddddd", pluginId, index, min, max, def, step, stepSmall, stepLarge); } } -void CarlaEngine::osc_send_set_parameter_midi_channel(int plugin_id, int parameter_id, int midi_channel) +void CarlaEngine::osc_send_set_parameter_midi_cc(const int32_t pluginId, const int32_t index, const int32_t cc) { - qDebug("CarlaEngine::osc_send_set_parameter_midi_channel(%i, %i, %i)", plugin_id, parameter_id, midi_channel); - const CarlaOscData* const oscData = m_osc.getControllerData(); - - if (oscData->target) - { - char target_path[strlen(oscData->path)+28]; - strcpy(target_path, oscData->path); - strcat(target_path, "/set_parameter_midi_channel"); - lo_send(oscData->target, target_path, "iii", plugin_id, parameter_id, midi_channel); - } -} - -void CarlaEngine::osc_send_set_parameter_midi_cc(int plugin_id, int parameter_id, int midi_cc) -{ - qDebug("CarlaEngine::osc_send_set_parameter_midi_cc(%i, %i, %i)", plugin_id, parameter_id, midi_cc); + qDebug("CarlaEngine::osc_send_set_parameter_midi_cc(%i, %i, %i)", pluginId, index, cc); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { char target_path[strlen(oscData->path)+23]; strcpy(target_path, oscData->path); strcat(target_path, "/set_parameter_midi_cc"); - lo_send(oscData->target, target_path, "iii", plugin_id, parameter_id, midi_cc); + lo_send(oscData->target, target_path, "iii", pluginId, index, cc); } } -void CarlaEngine::osc_send_set_default_value(int plugin_id, int param_id, double value) +void CarlaEngine::osc_send_set_parameter_midi_channel(const int32_t pluginId, const int32_t index, const int32_t channel) { - qDebug("CarlaEngine::osc_send_set_default_value(%i, %i, %f)", plugin_id, param_id, value); + qDebug("CarlaEngine::osc_send_set_parameter_midi_channel(%i, %i, %i)", pluginId, index, channel); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { - char target_path[strlen(oscData->path)+19]; + char target_path[strlen(oscData->path)+28]; strcpy(target_path, oscData->path); - strcat(target_path, "/set_default_value"); - lo_send(oscData->target, target_path, "iif", plugin_id, param_id, value); + strcat(target_path, "/set_parameter_midi_channel"); + lo_send(oscData->target, target_path, "iii", pluginId, index, channel); } } -void CarlaEngine::osc_send_set_input_peak_value(int plugin_id, int port_id, double value) +void CarlaEngine::osc_send_set_parameter_value(const int32_t pluginId, const int32_t index, const double value) { - qDebug("CarlaEngine::osc_send_set_input_peak_value(%i, %i, %f)", plugin_id, port_id, value); +#if DEBUG + if (index < 0) + qDebug("CarlaEngine::osc_send_set_parameter_value(%i, %s, %g)", pluginId, InternalParametersIndex2str((InternalParametersIndex)index), value); + else + qDebug("CarlaEngine::osc_send_set_parameter_value(%i, %i, %g)", pluginId, index, value); +#endif const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { - char target_path[strlen(oscData->path)+22]; + char target_path[strlen(oscData->path)+21]; strcpy(target_path, oscData->path); - strcat(target_path, "/set_input_peak_value"); - lo_send(oscData->target, target_path, "iif", plugin_id, port_id, value); + strcat(target_path, "/set_parameter_value"); + lo_send(oscData->target, target_path, "iid", pluginId, index, value); } } -void CarlaEngine::osc_send_set_output_peak_value(int plugin_id, int port_id, double value) +void CarlaEngine::osc_send_set_default_value(const int32_t pluginId, const int32_t index, const double value) { - qDebug("CarlaEngine::osc_send_set_output_peak_value(%i, %i, %f)", plugin_id, port_id, value); + qDebug("CarlaEngine::osc_send_set_default_value(%i, %i, %g)", pluginId, index, value); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { - char target_path[strlen(oscData->path)+23]; + char target_path[strlen(oscData->path)+19]; strcpy(target_path, oscData->path); - strcat(target_path, "/set_output_peak_value"); - lo_send(oscData->target, target_path, "iif", plugin_id, port_id, value); + strcat(target_path, "/set_default_value"); + lo_send(oscData->target, target_path, "iid", pluginId, index, value); } } -void CarlaEngine::osc_send_set_program(int plugin_id, int program_id) +void CarlaEngine::osc_send_set_program(const int32_t pluginId, const int32_t index) { - qDebug("CarlaEngine::osc_send_set_program(%i, %i)", plugin_id, program_id); + qDebug("CarlaEngine::osc_send_set_program(%i, %i)", pluginId, index); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { char target_path[strlen(oscData->path)+13]; strcpy(target_path, oscData->path); strcat(target_path, "/set_program"); - lo_send(oscData->target, target_path, "ii", plugin_id, program_id); + lo_send(oscData->target, target_path, "ii", pluginId, index); } } -void CarlaEngine::osc_send_set_program_count(int plugin_id, int program_count) +void CarlaEngine::osc_send_set_program_count(const int32_t pluginId, const int32_t count) { - qDebug("CarlaEngine::osc_send_set_program_count(%i, %i)", plugin_id, program_count); + qDebug("CarlaEngine::osc_send_set_program_count(%i, %i)", pluginId, count); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { char target_path[strlen(oscData->path)+19]; strcpy(target_path, oscData->path); strcat(target_path, "/set_program_count"); - lo_send(oscData->target, target_path, "ii", plugin_id, program_count); + lo_send(oscData->target, target_path, "ii", pluginId, count); } } -void CarlaEngine::osc_send_set_program_name(int plugin_id, int program_id, const char* program_name) +void CarlaEngine::osc_send_set_program_name(const int32_t plugin_id, const int32_t program_id, const char* const program_name) { qDebug("CarlaEngine::osc_send_set_program_name(%i, %i, %s)", plugin_id, program_id, program_name); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { @@ -1052,10 +1053,12 @@ void CarlaEngine::osc_send_set_program_name(int plugin_id, int program_id, const } } -void CarlaEngine::osc_send_set_midi_program(int plugin_id, int midi_program_id) +void CarlaEngine::osc_send_set_midi_program(const int32_t plugin_id, const int32_t midi_program_id) { qDebug("CarlaEngine::osc_send_set_midi_program(%i, %i)", plugin_id, midi_program_id); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { @@ -1066,10 +1069,12 @@ void CarlaEngine::osc_send_set_midi_program(int plugin_id, int midi_program_id) } } -void CarlaEngine::osc_send_set_midi_program_count(int plugin_id, int midi_program_count) +void CarlaEngine::osc_send_set_midi_program_count(const int32_t plugin_id, const int32_t count) { qDebug("CarlaEngine::osc_send_set_midi_program_count(%i, %i)", plugin_id, midi_program_count); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { @@ -1080,10 +1085,12 @@ void CarlaEngine::osc_send_set_midi_program_count(int plugin_id, int midi_progra } } -void CarlaEngine::osc_send_set_midi_program_data(int plugin_id, int midi_program_id, int bank_id, int program_id, const char* midi_program_name) +void CarlaEngine::osc_send_set_midi_program_data(const int32_t plugin_id, const int32_t midi_program_id, const int32_t bank_id, const int32_t program_id, const char* const midi_program_name) { qDebug("CarlaEngine::osc_send_set_midi_program_data(%i, %i, %i, %i, %s)", plugin_id, midi_program_id, bank_id, program_id, midi_program_name); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { @@ -1094,10 +1101,44 @@ void CarlaEngine::osc_send_set_midi_program_data(int plugin_id, int midi_program } } -void CarlaEngine::osc_send_note_on(int plugin_id, int channel, int note, int velo) +void CarlaEngine::osc_send_set_input_peak_value(const int32_t plugin_id, const int32_t port_id, const double value) +{ + qDebug("CarlaEngine::osc_send_set_input_peak_value(%i, %i, %f)", plugin_id, port_id, value); + const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); + + if (oscData->target) + { + char target_path[strlen(oscData->path)+22]; + strcpy(target_path, oscData->path); + strcat(target_path, "/set_input_peak_value"); + lo_send(oscData->target, target_path, "iid", plugin_id, port_id, value); + } +} + +void CarlaEngine::osc_send_set_output_peak_value(const int32_t plugin_id, const int32_t port_id, const double value) +{ + qDebug("CarlaEngine::osc_send_set_output_peak_value(%i, %i, %f)", plugin_id, port_id, value); + const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); + + if (oscData->target) + { + char target_path[strlen(oscData->path)+23]; + strcpy(target_path, oscData->path); + strcat(target_path, "/set_output_peak_value"); + lo_send(oscData->target, target_path, "iid", plugin_id, port_id, value); + } +} + +void CarlaEngine::osc_send_note_on(const int32_t plugin_id, const int32_t channel, const int32_t note, const int32_t velo) { qDebug("CarlaEngine::osc_send_note_on(%i, %i, %i, %i)", plugin_id, channel, note, velo); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { @@ -1108,10 +1149,12 @@ void CarlaEngine::osc_send_note_on(int plugin_id, int channel, int note, int vel } } -void CarlaEngine::osc_send_note_off(int plugin_id, int channel, int note) +void CarlaEngine::osc_send_note_off(const int32_t plugin_id, const int32_t channel, const int32_t note) { qDebug("CarlaEngine::osc_send_note_off(%i, %i, %i)", plugin_id, channel, note); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); + Q_ASSERT(pluginId >= 0 && pluginId < MAX_PLUGINS); if (oscData->target) { @@ -1126,6 +1169,7 @@ void CarlaEngine::osc_send_exit() { qDebug("CarlaEngine::osc_send_exit()"); const CarlaOscData* const oscData = m_osc.getControllerData(); + Q_ASSERT(oscData); if (oscData->target) { diff --git a/c++/carla-backend/carla_engine.h b/c++/carla-backend/carla_engine.h index 9f01581..8031bc3 100644 --- a/c++/carla-backend/carla_engine.h +++ b/c++/carla-backend/carla_engine.h @@ -313,26 +313,30 @@ public: return m_osc.getServerPath(); } - void osc_send_add_plugin(int plugin_id, const char* plugin_name); - void osc_send_remove_plugin(int plugin_id); - void osc_send_set_plugin_data(int plugin_id, int type, int category, int hints, const char* real_name, const char* label, const char* maker, const char* copyright, long unique_id); - void osc_send_set_plugin_ports(int plugin_id, int ains, int aouts, int mins, int mouts, int cins, int couts, int ctotals); - void osc_send_set_parameter_value(int plugin_id, int param_id, double value); - void osc_send_set_parameter_data(int plugin_id, int param_id, int ptype, int hints, const char* name, const char* label, double current); - void osc_send_set_parameter_ranges(int plugin_id, int param_id, double x_min, double x_max, double x_def, double x_step, double x_step_small, double x_step_large); - void osc_send_set_parameter_midi_channel(int plugin_id, int parameter_id, int midi_channel); - void osc_send_set_parameter_midi_cc(int plugin_id, int parameter_id, int midi_cc); - void osc_send_set_default_value(int plugin_id, int param_id, double value); - void osc_send_set_program(int plugin_id, int program_id); - void osc_send_set_program_count(int plugin_id, int program_count); - void osc_send_set_program_name(int plugin_id, int program_id, const char* program_name); - void osc_send_set_midi_program(int plugin_id, int midi_program_id); - void osc_send_set_midi_program_count(int plugin_id, int midi_program_count); - void osc_send_set_midi_program_data(int plugin_id, int midi_program_id, int bank_id, int program_id, const char* midi_program_name); - void osc_send_set_input_peak_value(int plugin_id, int port_id, double value); - void osc_send_set_output_peak_value(int plugin_id, int port_id, double value); - void osc_send_note_on(int plugin_id, int channel, int note, int velo); - void osc_send_note_off(int plugin_id, int channel, int note); + void osc_send_add_plugin(const int32_t pluginId, const char* const pluginName); + void osc_send_remove_plugin(const int32_t pluginId); + void osc_send_set_plugin_data(const int32_t pluginId, const int32_t type, const int32_t category, const int32_t hints, + const char* const realName, const char* const label, const char* const maker, const char* const copyright, const int64_t uniqueId); + void osc_send_set_plugin_ports(const int32_t pluginId, const int32_t audioIns, const int32_t audioOuts, const int32_t midiIns, const int32_t midiOuts, + const int32_t cIns, const int32_t cOuts, const int32_t cTotals); + void osc_send_set_parameter_data(const int32_t pluginId, const int32_t index, const int32_t type, const int32_t hints, + const char* const name, const char* const label, const double current); + void osc_send_set_parameter_ranges(const int32_t pluginId, const int32_t index, const double min, const double max, const double def, + const double step, const double stepSmall, const double stepLarge); + void osc_send_set_parameter_midi_cc(const int32_t pluginId, const int32_t index, const int32_t cc); + void osc_send_set_parameter_midi_channel(const int32_t pluginId, const int32_t index, const int32_t channel); + void osc_send_set_parameter_value(const int32_t pluginId, const int32_t index, const double value); + void osc_send_set_default_value(const int32_t pluginId, const int32_t index, const double value); + void osc_send_set_program(const int32_t pluginId, const int32_t index); + void osc_send_set_program_count(int32_t pluginId, int program_count); + void osc_send_set_program_name(int32_t pluginId, int program_id, const char* program_name); + void osc_send_set_midi_program(int32_t pluginId, int midi_program_id); + void osc_send_set_midi_program_count(int32_t pluginId, int midi_program_count); + void osc_send_set_midi_program_data(int32_t pluginId, int midi_program_id, int bank_id, int program_id, const char* midi_program_name); + void osc_send_set_input_peak_value(int32_t pluginId, int port_id, double value); + void osc_send_set_output_peak_value(int32_t pluginId, int port_id, double value); + void osc_send_note_on(int32_t pluginId, int channel, int note, int velo); + void osc_send_note_off(int32_t pluginId, int channel, int note); void osc_send_exit(); #ifndef BUILD_BRIDGE diff --git a/c++/carla-includes/carla_osc_includes.h b/c++/carla-includes/carla_osc_includes.h index bf2fd8c..95e77e1 100644 --- a/c++/carla-includes/carla_osc_includes.h +++ b/c++/carla-includes/carla_osc_includes.h @@ -20,7 +20,7 @@ #include "carla_includes.h" -#include +#include #include #include @@ -33,7 +33,7 @@ struct CarlaOscData { static inline void osc_clear_data(CarlaOscData* const oscData) { - qDebug("osc_clear_data(%p, path:\"%s\")", oscData, oscData->path); + qDebug("osc_clear_data(path:\"%s\")", oscData->path); if (oscData->path) free((void*)oscData->path); @@ -44,7 +44,7 @@ void osc_clear_data(CarlaOscData* const oscData) if (oscData->target) lo_address_free(oscData->target); - oscData->path = nullptr; + oscData->path = nullptr; oscData->source = nullptr; oscData->target = nullptr; } @@ -53,8 +53,8 @@ static inline void osc_send_configure(const CarlaOscData* const oscData, const char* const key, const char* const value) { qDebug("osc_send_configure(path:\"%s\", \"%s\", \"%s\")", oscData->path, key, value); - assert(key); - assert(value); + Q_ASSERT(key); + Q_ASSERT(value); if (oscData->target) { @@ -66,7 +66,7 @@ void osc_send_configure(const CarlaOscData* const oscData, const char* const key } static inline -void osc_send_control(const CarlaOscData* const oscData, const int index, const float value) +void osc_send_control(const CarlaOscData* const oscData, const int32_t index, const float value) { qDebug("osc_send_control(path:\"%s\", %i, %f)", oscData->path, index, value); @@ -80,10 +80,10 @@ void osc_send_control(const CarlaOscData* const oscData, const int index, const } static inline -void osc_send_program(const CarlaOscData* const oscData, const int index) +void osc_send_program(const CarlaOscData* const oscData, const int32_t index) { qDebug("osc_send_program(path:\"%s\", %i)", oscData->path, index); - assert(index >= 0); + Q_ASSERT(index >= 0); if (oscData->target) { @@ -95,11 +95,11 @@ void osc_send_program(const CarlaOscData* const oscData, const int index) } static inline -void osc_send_program(const CarlaOscData* const oscData, const int bank, const int program) +void osc_send_program(const CarlaOscData* const oscData, const int32_t bank, const int32_t program) { qDebug("osc_send_program(path:\"%s\", %i, %i)", oscData->path, bank, program); - assert(program >= 0); - assert(bank >= 0); + Q_ASSERT(program >= 0); + Q_ASSERT(bank >= 0); if (oscData->target) { @@ -111,10 +111,10 @@ void osc_send_program(const CarlaOscData* const oscData, const int bank, const i } static inline -void osc_send_midi_program(const CarlaOscData* const oscData, const int index) +void osc_send_midi_program(const CarlaOscData* const oscData, const int32_t index) { qDebug("osc_send_midi_program(path:\"%s\", %i)", oscData->path, index); - assert(index >= 0); + Q_ASSERT(index >= 0); if (oscData->target) { @@ -128,9 +128,9 @@ void osc_send_midi_program(const CarlaOscData* const oscData, const int index) static inline void osc_send_midi(const CarlaOscData* const oscData, const uint8_t buf[4]) { - qDebug("osc_send_midi(path:\"%s\", 0x%X, %03i, %03i)", oscData->path, buf[1], buf[2], buf[3]); - assert(buf[0] == 0); - assert(buf[1] != 0); + qDebug("osc_send_midi(path:\"%s\", 0x%X, %03u, %03u)", oscData->path, buf[1], buf[2], buf[3]); + Q_ASSERT(buf[0] == 0); + Q_ASSERT(buf[1] != 0); if (oscData->target) { @@ -145,7 +145,7 @@ void osc_send_midi(const CarlaOscData* const oscData, const uint8_t buf[4]) static inline void osc_send_update(const CarlaOscData* const oscData, const char* const url) { - qDebug("osc_send_update(path:\"%s\", %s)", oscData->path, url); + qDebug("osc_send_update(path:\"%s\", \"%s\")", oscData->path, url); if (oscData->target) { @@ -232,9 +232,9 @@ static inline void osc_send_lv2_event_transfer(const CarlaOscData* const oscData, const char* const type, const char* const key, const char* const value) { qDebug("osc_send_lv2_event_transfer(path:\"%s\", \"%s\", \"%s\", \"%s\")", oscData->path, type, key, value); - assert(type); - assert(key); - assert(value); + Q_ASSERT(type); + Q_ASSERT(key); + Q_ASSERT(value); if (oscData->target) { diff --git a/c++/jack_utils.h b/c++/jack_utils.h index c1cef41..1b64124 100644 --- a/c++/jack_utils.h +++ b/c++/jack_utils.h @@ -1,6 +1,6 @@ /* * Common JACK code - * Copyright (C) 2011-2012 Filipe Coelho + * Copyright (C) 2012 Filipe Coelho * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/c++/jackmeter/Makefile b/c++/jackmeter/Makefile index 3946e28..62d605c 100644 --- a/c++/jackmeter/Makefile +++ b/c++/jackmeter/Makefile @@ -29,7 +29,7 @@ cadence_jackmeter: $(OBJS) $(CXX) $^ $(LINK_FLAGS) -o $@ && strip $@ cadence_jackmeter.exe: $(OBJS) - $(CXX) $^ -static $(LINK_FLAGS) -o $@ && strip $@ + $(CXX) $^ -static -mwindows $(LINK_FLAGS) -o $@ && strip $@ # -------------------------------------------------------------- @@ -37,4 +37,4 @@ cadence_jackmeter.exe: $(OBJS) $(CXX) -c $< $(BUILD_FLAGS) -o $@ clean: - rm -f $(OBJS) cadence_jackmeter cadence_jackmeter.exe + rm -f $(OBJS) cadence_jackmeter* diff --git a/c++/jackmeter/jackmeter.cpp b/c++/jackmeter/jackmeter.cpp index 57e842f..fa0e56e 100644 --- a/c++/jackmeter/jackmeter.cpp +++ b/c++/jackmeter/jackmeter.cpp @@ -137,6 +137,7 @@ public: { setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint); setWindowTitle("M"); + setChannels(2); setOrientation(VERTICAL); setSmoothRelease(1); diff --git a/src/pixmapdial.py b/src/pixmapdial.py index 633c0ab..7218245 100644 --- a/src/pixmapdial.py +++ b/src/pixmapdial.py @@ -25,6 +25,7 @@ class PixmapDial(QDial): HORIZONTAL = 0 VERTICAL = 1 + CUSTOM_PAINT_NULL = 0 CUSTOM_PAINT_CARLA_WET = 1 CUSTOM_PAINT_CARLA_VOL = 2 CUSTOM_PAINT_CARLA_L = 3 @@ -38,7 +39,7 @@ class PixmapDial(QDial): self.m_pixmap = QPixmap(":/bitmaps/dial_01d.png") self.m_pixmap_n_str = "01" - self.m_custom_paint = 0 + self.m_custom_paint = CUSTOM_PAINT_NULL self.m_hovered = False self.m_hover_step = self.HOVER_MIN @@ -124,7 +125,7 @@ class PixmapDial(QDial): return QSize(self.p_size, self.p_size) def updateSizes(self): - self.p_width = self.m_pixmap.width() + self.p_width = self.m_pixmap.width() self.p_height = self.m_pixmap.height() if self.p_width < 1: @@ -175,11 +176,9 @@ class PixmapDial(QDial): return target = QRectF(0.0, 0.0, self.p_size, self.p_size) - value = (current / divider) + value = current / divider - ## Regular knobs - #else: - per = int((self.p_count - 1) * (current / divider)) + per = int((self.p_count - 1) * value) if self.m_orientation == self.HORIZONTAL: xpos = self.p_size * per diff --git a/src/pixmapkeyboard.py b/src/pixmapkeyboard.py index f12a19f..65c0fa0 100644 --- a/src/pixmapkeyboard.py +++ b/src/pixmapkeyboard.py @@ -132,7 +132,7 @@ class PixmapKeyboard(QWidget): elif color == self.COLOR_ORANGE: self.m_colorStr = "orange" else: - qCritical("PixmapKeyboard::setMode(%i, %i) - Invalid keyboard color" % (mode, color)) + qCritical("PixmapKeyboard::setMode(%i, %i) - invalid color" % (mode, color)) return self.setMode(mode) if mode == self.HORIZONTAL: @@ -148,7 +148,7 @@ class PixmapKeyboard(QWidget): self.p_width = self.m_pixmap.width() / 2 self.p_height = self.m_pixmap.height() else: - qCritical("PixmapKeyboard::setMode(%i, %i) - Invalid keyboard mode" % (mode, color)) + qCritical("PixmapKeyboard::setMode(%i, %i) - invalid mode" % (mode, color)) return self.setMode(self.HORIZONTAL) self.setOctaves(self.m_octaves) diff --git a/src/shared_carla.py b/src/shared_carla.py index e597135..9aee78d 100644 --- a/src/shared_carla.py +++ b/src/shared_carla.py @@ -403,10 +403,11 @@ class PluginParameter(QWidget, ui_carla_parameter.Ui_PluginParameter): pType = pInfo['type'] pHints = pInfo['hints'] - self.m_midiCC = -1 + self.m_midiCC = -1 self.m_midiChannel = 1 - self.m_pluginId = pluginId + self.m_pluginId = pluginId self.m_parameterId = pInfo['index'] + self.m_tabIndex = tabIndex self.add_MIDI_CCs_to_ComboBox() diff --git a/src/xycontroller.py b/src/xycontroller.py index b9a0a51..e58447f 100755 --- a/src/xycontroller.py +++ b/src/xycontroller.py @@ -20,7 +20,6 @@ from PyQt4.QtCore import pyqtSlot, Qt, QPointF, QRectF, QSettings, QTimer from PyQt4.QtGui import QApplication, QColor, QGraphicsItem, QGraphicsScene, QMainWindow, QPainter, QPen from queue import Queue, Empty as QuequeEmpty -#from Queue import Queue, Empty as QuequeEmpty # Imports (Custom) import ui_xycontroller @@ -174,28 +173,30 @@ class XYGraphicsScene(QGraphicsScene): self.p_size.setRect(-(size.width() / 2), -(size.height() / 2), size.width(), size.height()) def updateSmooth(self): - if self.m_smooth: - if self.m_cursor.x() != self.m_smooth_x or self.m_cursor.y() != self.m_smooth_y: - if abs(self.m_cursor.x() - self.m_smooth_x) <= 0.001: - self.m_smooth_x = self.m_cursor.x() - return - elif abs(self.m_cursor.y() - self.m_smooth_y) <= 0.001: - self.m_smooth_y = self.m_cursor.y() - return + if not self.m_smooth: + return + + if self.m_cursor.x() != self.m_smooth_x or self.m_cursor.y() != self.m_smooth_y: + if abs(self.m_cursor.x() - self.m_smooth_x) <= 0.001: + self.m_smooth_x = self.m_cursor.x() + return + elif abs(self.m_cursor.y() - self.m_smooth_y) <= 0.001: + self.m_smooth_y = self.m_cursor.y() + return - new_x = (self.m_smooth_x + self.m_cursor.x() * 3) / 4 - new_y = (self.m_smooth_y + self.m_cursor.y() * 3) / 4 - pos = QPointF(new_x, new_y) + new_x = (self.m_smooth_x + self.m_cursor.x() * 3) / 4 + new_y = (self.m_smooth_y + self.m_cursor.y() * 3) / 4 + pos = QPointF(new_x, new_y) - self.m_cursor.setPos(pos) - self.m_lineH.setY(pos.y()) - self.m_lineV.setX(pos.x()) + self.m_cursor.setPos(pos) + self.m_lineH.setY(pos.y()) + self.m_lineV.setX(pos.x()) - xp = pos.x() / (self.p_size.x() + self.p_size.width()) - yp = pos.y() / (self.p_size.y() + self.p_size.height()) + xp = pos.x() / (self.p_size.x() + self.p_size.width()) + yp = pos.y() / (self.p_size.y() + self.p_size.height()) - self.sendMIDI(xp, yp) - self.emit(SIGNAL("cursorMoved(double, double)"), xp, yp) + self.sendMIDI(xp, yp) + self.emit(SIGNAL("cursorMoved(double, double)"), xp, yp) def keyPressEvent(self, event): event.accept() @@ -549,16 +550,18 @@ def jack_process_callback(nframes, arg): event_count = jacklib.midi_get_event_count(midi_in_buffer) for i in range(event_count): - if jacklib.midi_event_get(jacklib.pointer(static_event), midi_in_buffer, i) == 0: - if static_event.size == 1: - jack_midi_in_data.put_nowait((static_event.buffer[0], 0, 0)) - elif static_event.size == 2: - jack_midi_in_data.put_nowait((static_event.buffer[0], static_event.buffer[1], 0)) - elif static_event.size >= 3: - jack_midi_in_data.put_nowait((static_event.buffer[0], static_event.buffer[1], static_event.buffer[2])) - - if jack_midi_in_data.full(): - break + if jacklib.midi_event_get(jacklib.pointer(static_event), midi_in_buffer, i) != 0: + break + + if static_event.size == 1: + jack_midi_in_data.put_nowait((static_event.buffer[0], 0, 0)) + elif static_event.size == 2: + jack_midi_in_data.put_nowait((static_event.buffer[0], static_event.buffer[1], 0)) + elif static_event.size >= 3: + jack_midi_in_data.put_nowait((static_event.buffer[0], static_event.buffer[1], static_event.buffer[2])) + + if jack_midi_in_data.full(): + break # MIDI Out midi_out_buffer = jacklib.port_get_buffer(jack_midi_out_port, nframes) @@ -602,7 +605,7 @@ if __name__ == '__main__': app = QApplication(sys.argv) app.setApplicationName("XY-Controller") app.setApplicationVersion(VERSION) - app.setOrganizationName("falkTX") + app.setOrganizationName("Cadence") #app.setWindowIcon(QIcon(":/48x48/xy-controller.png")) # Start jack @@ -612,11 +615,11 @@ if __name__ == '__main__': if not jack_client: errorString = get_jack_status_error_string(jack_status) QMessageBox.critical(None, app.translate("XYControllerW", "Error"), app.translate("XYControllerW", - "Could not connect to JACK, possible errors:\n" + "Could not connect to JACK, possible reasons:\n" "%s" % errorString)) sys.exit(1) - jack_midi_in_port = jacklib.port_register(jack_client, "midi_in", jacklib.JACK_DEFAULT_MIDI_TYPE, jacklib.JackPortIsInput, 0) + jack_midi_in_port = jacklib.port_register(jack_client, "midi_in", jacklib.JACK_DEFAULT_MIDI_TYPE, jacklib.JackPortIsInput, 0) jack_midi_out_port = jacklib.port_register(jack_client, "midi_out", jacklib.JACK_DEFAULT_MIDI_TYPE, jacklib.JackPortIsOutput, 0) jacklib.set_session_callback(jack_client, jack_session_callback, None) jacklib.set_process_callback(jack_client, jack_process_callback, None)