Browse Source

Cadence audio-plugins settings done; other fixes

tags/v0.9.0
falkTX 13 years ago
parent
commit
cf9c263f4b
9 changed files with 881 additions and 78 deletions
  1. +348
    -30
      src/cadence.py
  2. +60
    -17
      src/carla-backend/ladspa.cpp
  3. +1
    -0
      src/carla-bridge/carla_bridge_ui-qt4.cpp
  4. +1
    -1
      src/carla-discovery/carla-discovery.cpp
  5. +9
    -11
      src/carla.py
  6. +2
    -0
      src/carla_backend.py
  7. +7
    -8
      src/shared_jack.py
  8. +0
    -4
      src/systray.py
  9. +453
    -7
      src/ui/cadence.ui

+ 348
- 30
src/cadence.py View File

@@ -34,17 +34,88 @@ try:
except:
haveDBus = False

havePulseAudio = os.path.exists("/usr/bin/pulseaudio")

# ---------------------------------------------------------------------

def get_architecture():
# FIXME - more checks
if sys.int_info[1] == 4:
return "64-bit"
return "32-bit"
DEFAULT_LADSPA_PATH = [
os.path.join(HOME, ".ladspa"),
os.path.join("/", "usr", "lib", "ladspa"),
os.path.join("/", "usr", "local", "lib", "ladspa")
]

DEFAULT_DSSI_PATH = [
os.path.join(HOME, ".dssi"),
os.path.join("/", "usr", "lib", "dssi"),
os.path.join("/", "usr", "local", "lib", "dssi")
]

DEFAULT_LV2_PATH = [
os.path.join(HOME, ".lv2"),
os.path.join("/", "usr", "lib", "lv2"),
os.path.join("/", "usr", "local", "lib", "lv2")
]

DEFAULT_VST_PATH = [
os.path.join(HOME, ".vst"),
os.path.join("/", "usr", "lib", "vst"),
os.path.join("/", "usr", "local", "lib", "vst")
]

DESKTOP_X_IMAGE = [
"eog.desktop",
"kde4/digikam.desktop",
"kde4/gwenview.desktop"
]

DESKTOP_X_MUSIC = [
"audacious.desktop",
"clementine.desktop",
"smplayer.desktop",
"vlc.desktop",
"kde4/amarok.desktop"
]

DESKTOP_X_VIDEO = [
"smplayer.desktop",
"vlc.desktop"
]

DESKTOP_X_TEXT = [
"gedit.desktop",
"kde4/kate.desktop",
"kde4/kwrite.desktop"
]

DESKTOP_X_BROWSER = [
"chrome.desktop",
"firefox.desktop",
"kde4/konqbrowser.desktop"
]

XDG_APPLICATIONS_PATH = [
"/usr/share/applications",
"/usr/local/share/applications"
]

WINEASIO_PREFIX = "HKEY_CURRENT_USER\Software\Wine\WineASIO"

# Global Settings
GlobalSettings = QSettings("Cadence", "GlobalSettings")

def get_linux_distro():
distro = ""
# ---------------------------------------------------------------------

def get_architecture():
if LINUX:
return os.uname()[4]
elif WINDOWS:
if sys.platform == "win32":
return "32-bit"
if sys.platform == "win64":
return "64-bit"
return "Unknown"

def get_linux_information():
if os.path.exists("/etc/lsb-release"):
distro = getoutput(". /etc/lsb-release && echo $DISTRIB_DESCRIPTION")
elif os.path.exists("/etc/arch-release"):
@@ -52,10 +123,13 @@ def get_linux_distro():
else:
distro = os.uname()[0]

return distro
kernel = os.uname()[2]

def get_linux_kernel():
return os.uname()[2]
return (distro, kernel)

def get_mac_information():
# TODO
return ("Mac OS", "Unknown")

def get_windows_information():
major = sys.getwindowsversion()[0]
@@ -100,25 +174,6 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):
# TODO
self.b_jack_restart.setEnabled(False)

# -------------------------------------------------------------
# System Information

if WINDOWS:
info = get_windows_information()
self.label_info_os.setText(info[0])
self.label_info_version.setText(info[1])
elif MACOS:
self.label_info_os.setText("Mac OS")
self.label_info_version.setText("Unknown")
elif LINUX:
self.label_info_os.setText(get_linux_distro())
self.label_info_version.setText(get_linux_kernel())
else:
self.label_info_os.setText("Unknown")
self.label_info_version.setText("Unknown")

self.label_info_arch.setText(get_architecture())

# -------------------------------------------------------------
# Set-up icons

@@ -132,6 +187,85 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):
#self.act_pulse_start.setIcon(getIcon("media-playback-start"))
#self.act_pulse_stop.setIcon(getIcon("media-playback-stop"))

# -------------------------------------------------------------
# Set-up GUI (System Information)

if LINUX:
info = get_linux_information()
elif MACOS:
info = get_mac_information()
elif WINDOWS:
info = get_windows_information()
else:
info = ("Unknown", "Unknown")

self.label_info_os.setText(info[0])
self.label_info_version.setText(info[1])
self.label_info_arch.setText(get_architecture())

# -------------------------------------------------------------
# Set-up GUI (Tweaks)

self.settings_changed_types = []
self.frame_tweaks_settings.setVisible(False)

for i in range(self.tw_tweaks.rowCount()):
self.tw_tweaks.item(0, i).setTextAlignment(Qt.AlignCenter)

self.tw_tweaks.setCurrentCell(0, 0)

# Audio Plugins PATH

self.b_tweak_plugins_change.setEnabled(False)
self.b_tweak_plugins_remove.setEnabled(False)

for iPath in DEFAULT_LADSPA_PATH:
self.list_LADSPA.addItem(iPath)

for iPath in DEFAULT_DSSI_PATH:
self.list_DSSI.addItem(iPath)

for iPath in DEFAULT_LV2_PATH:
self.list_LV2.addItem(iPath)

for iPath in DEFAULT_VST_PATH:
self.list_VST.addItem(iPath)

EXTRA_LADSPA_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_LADSPA_PATH", "", type=str)
EXTRA_DSSI_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_DSSI_PATH", "", type=str)
EXTRA_LV2_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_LV2_PATH", "", type=str)
EXTRA_VST_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_VST_PATH", "", type=str)

for iPath in EXTRA_LADSPA_DIRS.split(":"):
if os.path.exists(iPath):
self.list_LADSPA.addItem(iPath)

for iPath in EXTRA_DSSI_DIRS.split(":"):
if os.path.exists(iPath):
self.list_DSSI.addItem(iPath)

for iPath in EXTRA_LV2_DIRS.split(":"):
if os.path.exists(iPath):
self.list_LV2.addItem(iPath)

for iPath in EXTRA_VST_DIRS.split(":"):
if os.path.exists(iPath):
self.list_VST.addItem(iPath)

self.list_LADSPA.sortItems(Qt.AscendingOrder)
self.list_DSSI.sortItems(Qt.AscendingOrder)
self.list_LV2.sortItems(Qt.AscendingOrder)
self.list_VST.sortItems(Qt.AscendingOrder)

self.list_LADSPA.setCurrentRow(0)
self.list_DSSI.setCurrentRow(0)
self.list_LV2.setCurrentRow(0)
self.list_VST.setCurrentRow(0)

# Default Applications

# WineASIO

# -------------------------------------------------------------
# Set-up systray

@@ -162,6 +296,20 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):
self.connect(self.pic_render, SIGNAL("clicked()"), lambda tool="cadence_render": self.func_start_tool(tool))
self.connect(self.pic_xycontroller, SIGNAL("clicked()"), lambda tool="cadence_xycontroller": self.func_start_tool(tool))

self.connect(self.b_tweaks_apply_now, SIGNAL("clicked()"), SLOT("slot_tweaksApply()"))

self.connect(self.b_tweak_plugins_add, SIGNAL("clicked()"), SLOT("slot_tweakPluginAdd()"))
self.connect(self.b_tweak_plugins_change, SIGNAL("clicked()"), SLOT("slot_tweakPluginChange()"))
self.connect(self.b_tweak_plugins_remove, SIGNAL("clicked()"), SLOT("slot_tweakPluginRemove()"))
self.connect(self.b_tweak_plugins_reset, SIGNAL("clicked()"), SLOT("slot_tweakPluginReset()"))
self.connect(self.tb_tweak_plugins, SIGNAL("currentChanged(int)"), SLOT("slot_tweakPluginTypeChanged(int)"))
self.connect(self.list_LADSPA, SIGNAL("currentRowChanged(int)"), SLOT("slot_tweakPluginsLadspaRowChanged(int)"))
self.connect(self.list_DSSI, SIGNAL("currentRowChanged(int)"), SLOT("slot_tweakPluginsDssiRowChanged(int)"))
self.connect(self.list_LV2, SIGNAL("currentRowChanged(int)"), SLOT("slot_tweakPluginsLv2RowChanged(int)"))
self.connect(self.list_VST, SIGNAL("currentRowChanged(int)"), SLOT("slot_tweakPluginsVstRowChanged(int)"))

# -------------------------------------------------------------

self.m_last_dsp_load = None
self.m_last_xruns = None
self.m_last_buffer_size = None
@@ -276,6 +424,11 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):
def func_start_tool(self, tool):
os.system("%s &" % tool)

def func_settings_changed(self, stype):
if stype not in self.settings_changed_types:
self.settings_changed_types.append(stype)
self.frame_tweaks_settings.setVisible(True)

@pyqtSlot()
def slot_JackServerStart(self):
try:
@@ -296,7 +449,9 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):

@pyqtSlot()
def slot_JackServerConfigure(self):
jacksettings.JackSettingsW(self).exec_()
jacksettingsW = jacksettings.JackSettingsW(self)
jacksettingsW.exec_()
del jacksettingsW

@pyqtSlot()
def slot_JackClearXruns(self):
@@ -311,6 +466,169 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):
def slot_handleCrash_jack(self):
self.DBusReconnect()

@pyqtSlot()
def slot_tweaksApply(self):
if "plugins" in self.settings_changed_types:
EXTRA_LADSPA_DIRS = []
EXTRA_DSSI_DIRS = []
EXTRA_LV2_DIRS = []
EXTRA_VST_DIRS = []

for i in range(self.list_LADSPA.count()):
iPath = self.list_LADSPA.item(i).text()
if iPath not in DEFAULT_LADSPA_PATH and iPath not in EXTRA_LADSPA_DIRS:
EXTRA_LADSPA_DIRS.append(iPath)

for i in range(self.list_DSSI.count()):
iPath = self.list_DSSI.item(i).text()
if iPath not in DEFAULT_DSSI_PATH and iPath not in EXTRA_DSSI_DIRS:
EXTRA_DSSI_DIRS.append(iPath)

for i in range(self.list_LV2.count()):
iPath = self.list_LV2.item(i).text()
if iPath not in DEFAULT_LV2_PATH and iPath not in EXTRA_LV2_DIRS:
EXTRA_LV2_DIRS.append(iPath)

for i in range(self.list_VST.count()):
iPath = self.list_VST.item(i).text()
if iPath not in DEFAULT_VST_PATH and iPath not in EXTRA_VST_DIRS:
EXTRA_VST_DIRS.append(iPath)

GlobalSettings.setValue("AudioPlugins/EXTRA_LADSPA_PATH", ":".join(EXTRA_LADSPA_DIRS))
GlobalSettings.setValue("AudioPlugins/EXTRA_DSSI_PATH", ":".join(EXTRA_DSSI_DIRS))
GlobalSettings.setValue("AudioPlugins/EXTRA_LV2_PATH", ":".join(EXTRA_LV2_DIRS))
GlobalSettings.setValue("AudioPlugins/EXTRA_VST_PATH", ":".join(EXTRA_VST_DIRS))

self.settings_changed_types = []
self.frame_tweaks_settings.setVisible(False)

@pyqtSlot()
def slot_tweakPluginAdd(self):
newPath = QFileDialog.getExistingDirectory(self, self.tr("Add Path"), "", QFileDialog.ShowDirsOnly)

if not newPath:
return

if self.tb_tweak_plugins.currentIndex() == 0:
self.list_LADSPA.addItem(newPath)
elif self.tb_tweak_plugins.currentIndex() == 1:
self.list_DSSI.addItem(newPath)
elif self.tb_tweak_plugins.currentIndex() == 2:
self.list_LV2.addItem(newPath)
elif self.tb_tweak_plugins.currentIndex() == 3:
self.list_VST.addItem(newPath)

self.func_settings_changed("plugins")

@pyqtSlot()
def slot_tweakPluginChange(self):
if self.tb_tweak_plugins.currentIndex() == 0:
curPath = self.list_LADSPA.item(self.list_LADSPA.currentRow()).text()
elif self.tb_tweak_plugins.currentIndex() == 1:
curPath = self.list_DSSI.item(self.list_DSSI.currentRow()).text()
elif self.tb_tweak_plugins.currentIndex() == 2:
curPath = self.list_LV2.item(self.list_LV2.currentRow()).text()
elif self.tb_tweak_plugins.currentIndex() == 3:
curPath = self.list_VST.item(self.list_VST.currentRow()).text()
else:
curPath = ""

newPath = QFileDialog.getExistingDirectory(self, self.tr("Change Path"), curPath, QFileDialog.ShowDirsOnly)

if not newPath:
return

if self.tb_tweak_plugins.currentIndex() == 0:
self.list_LADSPA.item(self.list_LADSPA.currentRow()).setText(newPath)
elif self.tb_tweak_plugins.currentIndex() == 1:
self.list_DSSI.item(self.list_DSSI.currentRow()).setText(newPath)
elif self.tb_tweak_plugins.currentIndex() == 2:
self.list_LV2.item(self.list_LV2.currentRow()).setText(newPath)
elif self.tb_tweak_plugins.currentIndex() == 3:
self.list_VST.item(self.list_VST.currentRow()).setText(newPath)

self.func_settings_changed("plugins")

@pyqtSlot()
def slot_tweakPluginRemove(self):
if self.tb_tweak_plugins.currentIndex() == 0:
self.list_LADSPA.takeItem(self.list_LADSPA.currentRow())
elif self.tb_tweak_plugins.currentIndex() == 1:
self.list_DSSI.takeItem(self.list_DSSI.currentRow())
elif self.tb_tweak_plugins.currentIndex() == 2:
self.list_LV2.takeItem(self.list_LV2.currentRow())
elif self.tb_tweak_plugins.currentIndex() == 3:
self.list_VST.takeItem(self.list_VST.currentRow())

self.func_settings_changed("plugins")

@pyqtSlot()
def slot_tweakPluginReset(self):
if self.tb_tweak_plugins.currentIndex() == 0:
self.list_LADSPA.clear()

for iPath in DEFAULT_LADSPA_PATH:
self.list_LADSPA.addItem(iPath)

elif self.tb_tweak_plugins.currentIndex() == 1:
self.list_DSSI.clear()

for iPath in DEFAULT_DSSI_PATH:
self.list_DSSI.addItem(iPath)

elif self.tb_tweak_plugins.currentIndex() == 2:
self.list_LV2.clear()

for iPath in DEFAULT_LV2_PATH:
self.list_LV2.addItem(iPath)

elif self.tb_tweak_plugins.currentIndex() == 3:
self.list_VST.clear()

for iPath in DEFAULT_VST_PATH:
self.list_VST.addItem(iPath)

self.func_settings_changed("plugins")

@pyqtSlot(int)
def slot_tweakPluginTypeChanged(self, index):
if index == 0:
self.list_LADSPA.setCurrentRow(-1)
self.list_LADSPA.setCurrentRow(0)
elif index == 1:
self.list_DSSI.setCurrentRow(-1)
self.list_DSSI.setCurrentRow(0)
elif index == 2:
self.list_LV2.setCurrentRow(-1)
self.list_LV2.setCurrentRow(0)
elif index == 3:
self.list_VST.setCurrentRow(-1)
self.list_VST.setCurrentRow(0)

@pyqtSlot(int)
def slot_tweakPluginsLadspaRowChanged(self, index):
nonRemovable = (index >= 0 and self.list_LADSPA.item(index).text() not in DEFAULT_LADSPA_PATH)
self.b_tweak_plugins_change.setEnabled(nonRemovable)
self.b_tweak_plugins_remove.setEnabled(nonRemovable)

@pyqtSlot(int)
def slot_tweakPluginsDssiRowChanged(self, index):
nonRemovable = (index >= 0 and self.list_DSSI.item(index).text() not in DEFAULT_DSSI_PATH)
self.b_tweak_plugins_change.setEnabled(nonRemovable)
self.b_tweak_plugins_remove.setEnabled(nonRemovable)

@pyqtSlot(int)
def slot_tweakPluginsLv2RowChanged(self, index):
nonRemovable = (index >= 0 and self.list_LV2.item(index).text() not in DEFAULT_LV2_PATH)
self.b_tweak_plugins_change.setEnabled(nonRemovable)
self.b_tweak_plugins_remove.setEnabled(nonRemovable)

@pyqtSlot(int)
def slot_tweakPluginsVstRowChanged(self, index):
nonRemovable = (index >= 0 and self.list_VST.item(index).text() not in DEFAULT_VST_PATH)
self.b_tweak_plugins_change.setEnabled(nonRemovable)
self.b_tweak_plugins_remove.setEnabled(nonRemovable)

def saveSettings(self):
self.settings.setValue("Geometry", self.saveGeometry())



+ 60
- 17
src/carla-backend/ladspa.cpp View File

@@ -79,7 +79,7 @@ public:

m_type = PLUGIN_LADSPA;

handle = nullptr;
handle = h2 = nullptr;
descriptor = nullptr;
rdf_descriptor = nullptr;

@@ -90,11 +90,24 @@ public:
{
qDebug("LadspaPlugin::~LadspaPlugin()");

if (handle && descriptor && descriptor->deactivate && m_activeBefore)
descriptor->deactivate(handle);
if (descriptor)
{
if (descriptor->deactivate && m_activeBefore)
{
if (handle)
descriptor->deactivate(handle);
if (h2)
descriptor->deactivate(h2);
}

if (handle && descriptor && descriptor->cleanup)
descriptor->cleanup(handle);
if (descriptor->cleanup)
{
if (handle)
descriptor->cleanup(handle);
if (h2)
descriptor->cleanup(h2);
}
}

if (rdf_descriptor)
ladspa_rdf_free(rdf_descriptor);
@@ -341,7 +354,7 @@ public:

const unsigned long PortCount = descriptor->PortCount;

for (unsigned long i=0; i<PortCount; i++)
for (unsigned long i=0; i < PortCount; i++)
{
const LADSPA_PortDescriptor PortType = descriptor->PortDescriptors[i];
if (LADSPA_IS_PORT_AUDIO(PortType))
@@ -355,6 +368,9 @@ public:
params += 1;
}

if (carla_options.process_mode == PROCESS_MODE_CONTINUOUS_RACK && (ains == 1 || aouts == 1) && ! h2)
h2 = descriptor->instantiate(descriptor, get_sample_rate());

if (ains > 0)
{
ain.ports = new CarlaEngineAudioPort*[ains];
@@ -599,12 +615,14 @@ public:
param_buffers[j] = def;

descriptor->connect_port(handle, i, &param_buffers[j]);
if (h2) descriptor->connect_port(h2, i, &param_buffers[j]);
}
else
{
// Not Audio or Control
qCritical("ERROR - Got a broken Port (neither Audio or Control)");
descriptor->connect_port(handle, i, nullptr);
if (h2) descriptor->connect_port(h2, i, nullptr);
}
}

@@ -651,7 +669,7 @@ public:
if (aouts > 0)
m_hints |= PLUGIN_CAN_VOLUME;

if (aouts >= 2 && aouts%2 == 0)
if (carla_options.process_mode == PROCESS_MODE_CONTINUOUS_RACK || (aouts >= 2 && aouts%2 == 0))
m_hints |= PLUGIN_CAN_BALANCE;

x_client->activate();
@@ -676,7 +694,9 @@ public:

if (ain.count > 0)
{
if (ain.count == 1)
uint32_t count = h2 ? 2 : ain.count;

if (count == 1)
{
for (k=0; k < frames; k++)
{
@@ -684,7 +704,7 @@ public:
ains_peak_tmp[0] = abs(inBuffer[0][k]);
}
}
else if (ain.count >= 1)
else if (count > 1)
{
for (k=0; k < frames; k++)
{
@@ -810,10 +830,16 @@ public:
if (cinEvent->channel == cin_channel)
{
if (descriptor->deactivate)
{
descriptor->deactivate(handle);
if (h2) descriptor->deactivate(h2);
}

if (descriptor->activate)
{
descriptor->activate(handle);
if (h2) descriptor->activate(h2);
}
}
break;

@@ -848,24 +874,36 @@ public:
if (! m_activeBefore)
{
if (descriptor->activate)
{
descriptor->activate(handle);
if (h2) descriptor->activate(h2);
}
}

for (i=0; i < ain.count; i++)
{
descriptor->connect_port(handle, ain.rindexes[i], inBuffer[i]);
if (h2 && i == 0) descriptor->connect_port(h2, ain.rindexes[i], inBuffer[1]);
}

for (i=0; i < aout.count; i++)
{
descriptor->connect_port(handle, aout.rindexes[i], outBuffer[i]);
if (h2 && i == 0) descriptor->connect_port(h2, aout.rindexes[i], outBuffer[1]);
}

if (descriptor->run)
descriptor->run(handle, frames);
descriptor->run(handle, frames);
if (h2) descriptor->run(h2, frames);
}
else
{
if (m_activeBefore)
{
if (descriptor->deactivate)
{
descriptor->deactivate(handle);
if (h2) descriptor->deactivate(h2);
}
}
}

@@ -883,7 +921,9 @@ public:
double bal_rangeL, bal_rangeR;
float oldBufLeft[do_balance ? frames : 0];

for (i=0; i < aout.count; i++)
uint32_t count = h2 ? 2 : aout.count;

for (i=0; i < count; i++)
{
// Dry/Wet and Volume
if (do_drywet || do_volume)
@@ -892,7 +932,7 @@ public:
{
if (do_drywet)
{
if (aout.count == 1)
if (aout.count == 1 && ! h2)
outBuffer[i][k] = (outBuffer[i][k]*x_drywet)+(inBuffer[0][k]*(1.0-x_drywet));
else
outBuffer[i][k] = (outBuffer[i][k]*x_drywet)+(inBuffer[i][k]*(1.0-x_drywet));
@@ -1081,7 +1121,7 @@ public:
}

private:
LADSPA_Handle handle;
LADSPA_Handle handle, h2;
const LADSPA_Descriptor* descriptor;
const LADSPA_RDF_Descriptor* rdf_descriptor;

@@ -1113,13 +1153,16 @@ short add_plugin_ladspa(const char* const filename, const char* const name, cons
#ifndef BUILD_BRIDGE
if (carla_options.process_mode == PROCESS_MODE_CONTINUOUS_RACK)
{
if (/* inputs */ ((plugin->audioInCount() != 0 && plugin->audioInCount() != 2)) || /* outputs */ ((plugin->audioOutCount() != 0 && plugin->audioOutCount() != 2)))
uint32_t ins = plugin->audioInCount();
uint32_t outs = plugin->audioOutCount();

if (ins > 2 || outs > 2 || (ins != outs && ins != 0 && outs != 0))
{
set_last_error("Carla Rack Mode can only work with Stereo plugins, sorry!");
set_last_error("Carla Rack Mode can only work with Mono or Stereo plugins, sorry!");
qWarning("data: %i %i | %i %i %i", ins > 2, outs > 2, ins != outs, ins != 0, outs != 0);
delete plugin;
return -1;
}

}
#endif



+ 1
- 0
src/carla-bridge/carla_bridge_ui-qt4.cpp View File

@@ -67,6 +67,7 @@ void toolkit_loop()
}
else
{
// TODO - window->setCentralWidget(widget); or other simpler method
window = new QDialog();
window->resize(10, 10);
window->setLayout(new QVBoxLayout(window));


+ 1
- 1
src/carla-discovery/carla-discovery.cpp View File

@@ -1230,7 +1230,7 @@ int main(int argc, char* argv[])
}
}

bool doInit = QString(filename).endsWith("dssi-vst.so", Qt::CaseInsensitive);
bool doInit = ! QString(filename).endsWith("dssi-vst.so", Qt::CaseInsensitive);

switch (type)
{


+ 9
- 11
src/carla.py View File

@@ -1169,8 +1169,8 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW):

# About Carla Dialog
class CarlaAboutW(QDialog, ui_carla_about.Ui_CarlaAboutW):
def __init__(self, parent=None):
super(CarlaAboutW, self).__init__(parent)
def __init__(self, parent):
QDialog.__init__(self, parent)
self.setupUi(self)

self.l_about.setText(self.tr(""
@@ -2031,10 +2031,10 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget):
self.peaks_in = int(audio_count['ins'])
self.peaks_out = int(audio_count['outs'])

if self.peaks_in > 2:
if self.peaks_in > 2 or PROCESS_MODE == PROCESS_MODE_CONTINUOUS_RACK:
self.peaks_in = 2

if self.peaks_out > 2:
if self.peaks_out > 2 or PROCESS_MODE == PROCESS_MODE_CONTINUOUS_RACK:
self.peaks_out = 2

self.peak_in.setChannels(self.peaks_in)
@@ -3048,7 +3048,7 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW):
pwidget.peak_in.setRefreshRate(self.m_savedSettings["Main/RefreshInterval"])
pwidget.peak_out.setRefreshRate(self.m_savedSettings["Main/RefreshInterval"])

if (activate):
if activate:
pwidget.set_active(True, True, True)

return new_plugin_id
@@ -3515,20 +3515,18 @@ if __name__ == '__main__':
gui = CarlaMainW()

# Init backend
process_mode = gui.settings.value("Engine/ProcessMode", PROCESS_MODE_MULTIPLE_CLIENTS, type=int)
PROCESS_MODE = gui.settings.value("Engine/ProcessMode", PROCESS_MODE_MULTIPLE_CLIENTS, type=int)
MAX_PARAMETERS = gui.settings.value("Engine/MaxParameters", MAX_PARAMETERS, type=int)
prefer_ui_bridges = gui.settings.value("Engine/PreferUIBridges", True, type=bool)
proccess_hq = gui.settings.value("Engine/ProcessHQ", False, type=bool)
osc_gui_timeout = gui.settings.value("Engine/OscGuiTimeout", 40, type=int)
use_dssi_chunks = gui.settings.value("Engine/UseDSSIChunks", False, type=bool)

if os.getenv("LADISH_APP_NAME") and process_mode == PROCESS_MODE_MULTIPLE_CLIENTS:
if os.getenv("LADISH_APP_NAME") and PROCESS_MODE == PROCESS_MODE_MULTIPLE_CLIENTS:
print("LADISH detected but using multiple clients (not allowed), forcing single client now")
process_mode = PROCESS_MODE_SINGLE_CLIENT

#process_mode = PROCESS_MODE_CONTINUOUS_RACK
PROCESS_MODE = PROCESS_MODE_SINGLE_CLIENT

CarlaHost.set_option(OPTION_PROCESS_MODE, process_mode, "")
CarlaHost.set_option(OPTION_PROCESS_MODE, PROCESS_MODE, "")
CarlaHost.set_option(OPTION_MAX_PARAMETERS, MAX_PARAMETERS, "")
CarlaHost.set_option(OPTION_PROCESS_HQ, proccess_hq, "")
CarlaHost.set_option(OPTION_PREFER_UI_BRIDGES, prefer_ui_bridges, "")


+ 2
- 0
src/carla_backend.py View File

@@ -678,6 +678,8 @@ PROCESS_MODE_SINGLE_CLIENT = 0
PROCESS_MODE_MULTIPLE_CLIENTS = 1
PROCESS_MODE_CONTINUOUS_RACK = 2

PROCESS_MODE = PROCESS_MODE_MULTIPLE_CLIENTS

class ParameterData(Structure):
_fields_ = [
("type", c_enum),


+ 7
- 8
src/shared_jack.py View File

@@ -352,28 +352,27 @@ def setXruns(self_, xruns):
# -------------------------------------------------------------
# External Dialogs

global jacksettingsW, logsW
jacksettingsW = logsW = None
global logsW
logsW = None

@pyqtSlot()
#@pyqtSlot()
def slot_showJackSettings(self_):
global jacksettingsW
if not jacksettingsW:
jacksettingsW = jacksettings.JackSettingsW(self_)
jacksettingsW = jacksettings.JackSettingsW(self_)
jacksettingsW.exec_()
del jacksettingsW

# Force update of gui widgets
if not jack.client:
self_.jackStopped()

@pyqtSlot()
#@pyqtSlot()
def slot_showLogs(self_):
global logsW
if not logsW:
logsW = logs.LogsW(self_)
logsW.show()

@pyqtSlot()
#@pyqtSlot()
def slot_showRender(self_):
renderW = render.RenderW(self_)
renderW.exec_()


+ 0
- 4
src/systray.py View File

@@ -16,10 +16,6 @@
#
# For a full copy of the GNU General Public License see the COPYING file

# TESTING - remove if python3
from sip import setapi
setapi("QString", 2)

# Imports (Global)
from os import getenv
from PyQt4.QtCore import SIGNAL


+ 453
- 7
src/ui/cadence.ui View File

@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>778</width>
<width>732</width>
<height>527</height>
</rect>
</property>
@@ -18,7 +18,7 @@
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
<number>2</number>
</property>
<widget class="QWidget" name="tab_system">
<attribute name="title">
@@ -795,7 +795,7 @@
<attribute name="title">
<string>Tweaks</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="verticalLayout_15">
<item>
<widget class="QLabel" name="label_tweaks">
<property name="font">
@@ -866,7 +866,7 @@
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<widget class="QPushButton" name="b_tweaks_apply_now">
<property name="text">
<string>Apply Now</string>
</property>
@@ -889,7 +889,7 @@
</widget>
</item>
<item>
<widget class="QSplitter" name="splitter_tweaks">
<widget class="QSplitter" name="splitter">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
@@ -906,6 +906,74 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>200</width>
<height>16777215</height>
</size>
</property>
<attribute name="horizontalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<row>
<property name="text">
<string>audio-plugins</string>
</property>
</row>
<row>
<property name="text">
<string>default-apps</string>
</property>
</row>
<row>
<property name="text">
<string>wineasio</string>
</property>
</row>
<column>
<property name="text">
<string>name</string>
</property>
</column>
<item row="0" column="0">
<property name="text">
<string>Audio Plugins PATH</string>
</property>
<property name="textAlignment">
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
</property>
<property name="flags">
<set>ItemIsSelectable|ItemIsEnabled</set>
</property>
</item>
<item row="1" column="0">
<property name="text">
<string>Default Applications</string>
</property>
<property name="textAlignment">
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
</property>
<property name="flags">
<set>ItemIsSelectable|ItemIsEnabled</set>
</property>
</item>
<item row="2" column="0">
<property name="text">
<string>WineASIO</string>
</property>
<property name="textAlignment">
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
</property>
<property name="flags">
<set>ItemIsSelectable|ItemIsEnabled</set>
</property>
</item>
</widget>
<widget class="QStackedWidget" name="sw_tweaks">
<property name="sizePolicy">
@@ -915,12 +983,374 @@
</sizepolicy>
</property>
<property name="currentIndex">
<number>-1</number>
<number>0</number>
</property>
<widget class="QWidget" name="page">
<layout class="QGridLayout" name="gridLayout_6">
<property name="margin">
<number>0</number>
</property>
<item row="3" column="1">
<widget class="QPushButton" name="b_tweak_plugins_remove">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item row="4" column="1">
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item row="7" column="1">
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>220</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="b_tweak_plugins_add">
<property name="text">
<string>Add...</string>
</property>
</widget>
</item>
<item row="0" column="0" rowspan="8">
<widget class="QToolBox" name="tb_tweak_plugins">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="page_ladspa">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>412</width>
<height>276</height>
</rect>
</property>
<attribute name="label">
<string>LADSPA</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QListWidget" name="list_LADSPA"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_dssi">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>94</width>
<height>76</height>
</rect>
</property>
<attribute name="label">
<string>DSSI</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_11">
<item>
<widget class="QListWidget" name="list_DSSI"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_lv2">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>94</width>
<height>76</height>
</rect>
</property>
<attribute name="label">
<string>LV2</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_13">
<item>
<widget class="QListWidget" name="list_LV2"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_vst">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>94</width>
<height>76</height>
</rect>
</property>
<attribute name="label">
<string>VST</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_14">
<item>
<widget class="QListWidget" name="list_VST"/>
</item>
</layout>
</widget>
</widget>
</item>
<item row="0" column="1">
<spacer name="verticalSpacer_7">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="6" column="1">
<widget class="QPushButton" name="b_tweak_plugins_reset">
<property name="text">
<string>Reset</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="b_tweak_plugins_change">
<property name="text">
<string>Change...</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_2">
<layout class="QGridLayout" name="gridLayout_7">
<property name="verticalSpacing">
<number>20</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item row="1" column="0">
<widget class="QCheckBox" name="checkBox_2">
<property name="text">
<string>Image Viewer</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="comboBox_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="checkBox_5">
<property name="text">
<string>Text Editor</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="comboBox_4">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="checkBox_4">
<property name="text">
<string>Video Player</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="comboBox_5">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="checkBox_3">
<property name="text">
<string>Music Player</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboBox_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="checkBox_6">
<property name="text">
<string>Web Browser</string>
</property>
</widget>
</item>
<item row="6" column="1">
<spacer name="verticalSpacer_8">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>114</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="comboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="0" column="1">
<spacer name="verticalSpacer_9">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="2" rowspan="7">
<widget class="QFrame" name="frame">
<property name="minimumSize">
<size>
<width>156</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>156</width>
<height>16777215</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_16">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>ICO</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>AppName</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>Desc</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_10">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>287</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_3"/>
</widget>
</widget>
</item>
</layout>
<zorder>splitter</zorder>
<zorder>label_tweaks</zorder>
<zorder>line_tweaks</zorder>
<zorder>frame_tweaks_settings</zorder>
</widget>
</widget>
</item>
@@ -931,7 +1361,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>778</width>
<width>732</width>
<height>20</height>
</rect>
</property>
@@ -1031,5 +1461,21 @@
</hint>
</hints>
</connection>
<connection>
<sender>tw_tweaks</sender>
<signal>currentCellChanged(int,int,int,int)</signal>
<receiver>sw_tweaks</receiver>
<slot>setCurrentIndex(int)</slot>
<hints>
<hint type="sourcelabel">
<x>121</x>
<y>359</y>
</hint>
<hint type="destinationlabel">
<x>707</x>
<y>136</y>
</hint>
</hints>
</connection>
</connections>
</ui>

Loading…
Cancel
Save