| @@ -411,6 +411,10 @@ if __name__ == '__main__': | |||||
| # App initialization | # App initialization | ||||
| app = QApplication(sys.argv) | app = QApplication(sys.argv) | ||||
| app.setApplicationName("Cadence-Logs") | |||||
| app.setApplicationVersion(VERSION) | |||||
| app.setOrganizationName("Cadence") | |||||
| app.setWindowIcon(QIcon(":/scalable/cadence.svg")) | |||||
| # Show GUI | # Show GUI | ||||
| gui = LogsW(None) | gui = LogsW(None) | ||||
| @@ -16,20 +16,29 @@ | |||||
| # | # | ||||
| # For a full copy of the GNU General Public License see the COPYING file | # For a full copy of the GNU General Public License see the COPYING file | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Imports (Global) | # Imports (Global) | ||||
| from PyQt4.QtCore import pyqtSlot, QProcess, QTime, QTimer | from PyQt4.QtCore import pyqtSlot, QProcess, QTime, QTimer | ||||
| from PyQt4.QtGui import QDialog | from PyQt4.QtGui import QDialog | ||||
| from time import sleep | from time import sleep | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Imports (Custom Stuff) | # Imports (Custom Stuff) | ||||
| import ui_render | import ui_render | ||||
| from shared import * | from shared import * | ||||
| from jacklib_helpers import * | from jacklib_helpers import * | ||||
| global jack_client | |||||
| jack_client = None | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Global JACK client (used in standalone mode) | |||||
| global jackClient | |||||
| jackClient = None | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Render Window | # Render Window | ||||
| class RenderW(QDialog, ui_render.Ui_RenderW): | class RenderW(QDialog, ui_render.Ui_RenderW): | ||||
| def __init__(self, parent): | def __init__(self, parent): | ||||
| QDialog.__init__(self, parent) | QDialog.__init__(self, parent) | ||||
| @@ -38,30 +47,28 @@ class RenderW(QDialog, ui_render.Ui_RenderW): | |||||
| # ------------------------------------------------------------- | # ------------------------------------------------------------- | ||||
| # Get JACK client and base information | # Get JACK client and base information | ||||
| global jack_client | |||||
| if jack_client: | |||||
| self.m_jack_client = jack_client | |||||
| self.m_closeClient = False | |||||
| global jackClient | |||||
| if jackClient: | |||||
| self.m_jackClient = jackClient | |||||
| else: | else: | ||||
| self.m_jack_client = jacklib.client_open("Render-Dialog", jacklib.JackNoStartServer, None) | |||||
| self.m_closeClient = True | |||||
| self.m_jackClient = jacklib.client_open("Render-Dialog", jacklib.JackNoStartServer, None) | |||||
| self.m_buffer_size = int(jacklib.get_buffer_size(self.m_jack_client)) | |||||
| self.m_sample_rate = int(jacklib.get_sample_rate(self.m_jack_client)) | |||||
| self.m_bufferSize = int(jacklib.get_buffer_size(self.m_jackClient)) | |||||
| self.m_sampleRate = int(jacklib.get_sample_rate(self.m_jackClient)) | |||||
| for i in range(self.cb_buffer_size.count()): | for i in range(self.cb_buffer_size.count()): | ||||
| if int(self.cb_buffer_size.itemText(i)) == self.m_buffer_size: | |||||
| if int(self.cb_buffer_size.itemText(i)) == self.m_bufferSize: | |||||
| self.cb_buffer_size.setCurrentIndex(i) | self.cb_buffer_size.setCurrentIndex(i) | ||||
| break | break | ||||
| else: | else: | ||||
| self.cb_buffer_size.addItem(str(self.m_buffer_size)) | |||||
| self.cb_buffer_size.addItem(str(self.m_bufferSize)) | |||||
| self.cb_buffer_size.setCurrentIndex(self.cb_buffer_size.count() - 1) | self.cb_buffer_size.setCurrentIndex(self.cb_buffer_size.count() - 1) | ||||
| # ------------------------------------------------------------- | # ------------------------------------------------------------- | ||||
| # Internal stuff | # Internal stuff | ||||
| self.m_max_time = 180 | |||||
| self.m_last_time = 0 | |||||
| self.m_lastTime = 0 | |||||
| self.m_maxTime = 180 | |||||
| self.m_freewheel = False | self.m_freewheel = False | ||||
| self.m_timer = QTimer(self) | self.m_timer = QTimer(self) | ||||
| @@ -74,14 +81,17 @@ class RenderW(QDialog, ui_render.Ui_RenderW): | |||||
| self.m_process.start("jack_capture", ["-pf"]) | self.m_process.start("jack_capture", ["-pf"]) | ||||
| self.m_process.waitForFinished() | self.m_process.waitForFinished() | ||||
| formats = str(self.m_process.readAllStandardOutput(), encoding="utf-8").split(" ") | |||||
| formats = str(self.m_process.readAllStandardOutput(), encoding="utf-8").split(" ") | |||||
| formatsList = [] | formatsList = [] | ||||
| for i in range(len(formats) - 1): | for i in range(len(formats) - 1): | ||||
| formatsList.append(formats[i]) | |||||
| iFormat = formats[i].strip() | |||||
| if iFormat: | |||||
| formatsList.append(iFormat) | |||||
| formatsList.sort() | formatsList.sort() | ||||
| # Put all formats in combo-box, select 'wav' option | |||||
| for i in range(len(formatsList)): | for i in range(len(formatsList)): | ||||
| self.cb_format.addItem(formatsList[i]) | self.cb_format.addItem(formatsList[i]) | ||||
| if formatsList[i] == "wav": | if formatsList[i] == "wav": | ||||
| @@ -127,18 +137,19 @@ class RenderW(QDialog, ui_render.Ui_RenderW): | |||||
| self.b_stop.setVisible(True) | self.b_stop.setVisible(True) | ||||
| self.b_close.setEnabled(False) | self.b_close.setEnabled(False) | ||||
| self.m_freewheel = bool(self.cb_render_mode.currentIndex() == 1) | |||||
| new_buffer_size = int(self.cb_buffer_size.currentText()) | |||||
| timeStart = self.te_start.time() | |||||
| timeEnd = self.te_end.time() | |||||
| minTime = (timeStart.hour() * 3600) + (timeStart.minute() * 60) + (timeStart.second()) | |||||
| maxTime = (timeEnd.hour() * 3600) + (timeEnd.minute() * 60) + (timeEnd.second()) | |||||
| time_start = self.te_start.time() | |||||
| time_end = self.te_end.time() | |||||
| min_time = (time_start.hour() * 3600) + (time_start.minute() * 60) + (time_start.second()) | |||||
| max_time = (time_end.hour() * 3600) + (time_end.minute() * 60) + (time_end.second()) | |||||
| self.m_max_time = max_time | |||||
| newBufferSize = int(self.cb_buffer_size.currentText()) | |||||
| self.progressBar.setMinimum(min_time) | |||||
| self.progressBar.setMaximum(max_time) | |||||
| self.progressBar.setValue(min_time) | |||||
| self.m_maxTime = maxTime | |||||
| self.m_freewheel = bool(self.cb_render_mode.currentIndex() == 1) | |||||
| self.progressBar.setMinimum(minTime) | |||||
| self.progressBar.setMaximum(maxTime) | |||||
| self.progressBar.setValue(minTime) | |||||
| self.progressBar.update() | self.progressBar.update() | ||||
| if self.m_freewheel: | if self.m_freewheel: | ||||
| @@ -175,14 +186,14 @@ class RenderW(QDialog, ui_render.Ui_RenderW): | |||||
| # Change current directory | # Change current directory | ||||
| os.chdir(self.le_folder.text()) | os.chdir(self.le_folder.text()) | ||||
| if new_buffer_size != int(jacklib.get_buffer_size(self.m_jack_client)): | |||||
| if newBufferSize != int(jacklib.get_buffer_size(self.m_jackClient)): | |||||
| print("NOTICE: buffer size changed before render") | print("NOTICE: buffer size changed before render") | ||||
| jacklib.set_buffer_size(self.m_jack_client, new_buffer_size) | |||||
| jacklib.set_buffer_size(self.m_jackClient, newBufferSize) | |||||
| if jacklib.transport_query(self.m_jack_client, None) > jacklib.JackTransportStopped: # > JackTransportStopped is rolling|starting | |||||
| jacklib.transport_stop(self.m_jack_client) | |||||
| if jacklib.transport_query(self.m_jackClient, None) > jacklib.JackTransportStopped: # > JackTransportStopped is rolling|starting | |||||
| jacklib.transport_stop(self.m_jackClient) | |||||
| jacklib.transport_locate(self.m_jack_client, min_time * self.m_sample_rate) | |||||
| jacklib.transport_locate(self.m_jackClient, minTime * self.m_sampleRate) | |||||
| self.m_last_time = -1 | self.m_last_time = -1 | ||||
| self.m_process.start("jack_capture", arguments) | self.m_process.start("jack_capture", arguments) | ||||
| @@ -191,17 +202,17 @@ class RenderW(QDialog, ui_render.Ui_RenderW): | |||||
| if self.m_freewheel: | if self.m_freewheel: | ||||
| print("NOTICE: rendering in freewheel mode") | print("NOTICE: rendering in freewheel mode") | ||||
| sleep(1) | sleep(1) | ||||
| jacklib.set_freewheel(self.m_jack_client, 1) | |||||
| jacklib.set_freewheel(self.m_jackClient, 1) | |||||
| self.m_timer.start() | self.m_timer.start() | ||||
| jacklib.transport_start(self.m_jack_client) | |||||
| jacklib.transport_start(self.m_jackClient) | |||||
| @pyqtSlot() | @pyqtSlot() | ||||
| def slot_renderStop(self): | def slot_renderStop(self): | ||||
| jacklib.transport_stop(self.m_jack_client) | |||||
| jacklib.transport_stop(self.m_jackClient) | |||||
| if self.m_freewheel: | if self.m_freewheel: | ||||
| jacklib.set_freewheel(self.m_jack_client, 0) | |||||
| jacklib.set_freewheel(self.m_jackClient, 0) | |||||
| sleep(1) | sleep(1) | ||||
| @@ -221,9 +232,9 @@ class RenderW(QDialog, ui_render.Ui_RenderW): | |||||
| self.progressBar.update() | self.progressBar.update() | ||||
| # Restore buffer size | # Restore buffer size | ||||
| new_buffer_size = int(jacklib.get_buffer_size(self.m_jack_client)) | |||||
| if new_buffer_size != self.m_buffer_size: | |||||
| jacklib.set_buffer_size(self.m_jack_client, new_buffer_size) | |||||
| newBufferSize = int(jacklib.get_buffer_size(self.m_jackClient)) | |||||
| if newBufferSize != self.m_bufferSize: | |||||
| jacklib.set_buffer_size(self.m_jackClient, newBufferSize) | |||||
| @pyqtSlot() | @pyqtSlot() | ||||
| def slot_getAndSetPath(self): | def slot_getAndSetPath(self): | ||||
| @@ -231,7 +242,7 @@ class RenderW(QDialog, ui_render.Ui_RenderW): | |||||
| @pyqtSlot() | @pyqtSlot() | ||||
| def slot_setStartNow(self): | def slot_setStartNow(self): | ||||
| time = int(jacklib.get_current_transport_frame(self.m_jack_client) / self.m_sample_rate) | |||||
| time = int(jacklib.get_current_transport_frame(self.m_jackClient) / self.m_sampleRate) | |||||
| secs = time % 60 | secs = time % 60 | ||||
| mins = int(time / 60) % 60 | mins = int(time / 60) % 60 | ||||
| hrs = int(time / 3600) % 60 | hrs = int(time / 3600) % 60 | ||||
| @@ -239,7 +250,7 @@ class RenderW(QDialog, ui_render.Ui_RenderW): | |||||
| @pyqtSlot() | @pyqtSlot() | ||||
| def slot_setEndNow(self): | def slot_setEndNow(self): | ||||
| time = int(jacklib.get_current_transport_frame(self.m_jack_client) / self.m_sample_rate) | |||||
| time = int(jacklib.get_current_transport_frame(self.m_jackClient) / self.m_sampleRate) | |||||
| secs = time % 60 | secs = time % 60 | ||||
| mins = int(time / 60) % 60 | mins = int(time / 60) % 60 | ||||
| hrs = int(time / 3600) % 60 | hrs = int(time / 3600) % 60 | ||||
| @@ -263,31 +274,36 @@ class RenderW(QDialog, ui_render.Ui_RenderW): | |||||
| @pyqtSlot() | @pyqtSlot() | ||||
| def slot_updateProgressbar(self): | def slot_updateProgressbar(self): | ||||
| time = int(jacklib.get_current_transport_frame(self.m_jack_client)) / self.m_sample_rate | |||||
| time = int(jacklib.get_current_transport_frame(self.m_jackClient)) / self.m_sampleRate | |||||
| self.progressBar.setValue(time) | self.progressBar.setValue(time) | ||||
| if time > self.m_max_time or (self.m_last_time > time and not self.m_freewheel): | |||||
| if time > self.m_maxTime or (self.m_lastTime > time and not self.m_freewheel): | |||||
| self.slot_renderStop() | self.slot_renderStop() | ||||
| self.m_last_time = time | self.m_last_time = time | ||||
| def closeEvent(self, event): | def closeEvent(self, event): | ||||
| if self.m_closeClient: | |||||
| jacklib.client_close(self.m_jack_client) | |||||
| if self.m_jackClient: | |||||
| jacklib.client_close(self.m_jackClient) | |||||
| QDialog.closeEvent(self, event) | QDialog.closeEvent(self, event) | ||||
| def done(self, r): | def done(self, r): | ||||
| QDialog.done(self, r) | QDialog.done(self, r) | ||||
| self.close() | self.close() | ||||
| # ------------------------------------------------------------- | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Allow to use this as a standalone app | # Allow to use this as a standalone app | ||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||
| # Additional imports | # Additional imports | ||||
| from PyQt4.QtGui import QApplication | from PyQt4.QtGui import QApplication | ||||
| # App initialization | # App initialization | ||||
| app = QApplication(sys.argv) | app = QApplication(sys.argv) | ||||
| app.setApplicationName("Cadence-Render") | |||||
| app.setApplicationVersion(VERSION) | |||||
| app.setOrganizationName("Cadence") | |||||
| app.setWindowIcon(QIcon(":/scalable/cadence.svg")) | |||||
| for iPATH in PATH: | for iPATH in PATH: | ||||
| if os.path.exists(os.path.join(iPATH, "jack_capture")): | if os.path.exists(os.path.join(iPATH, "jack_capture")): | ||||
| @@ -298,11 +314,11 @@ if __name__ == '__main__': | |||||
| "Is not possible to render without it!")) | "Is not possible to render without it!")) | ||||
| sys.exit(1) | sys.exit(1) | ||||
| jack_status = jacklib.jack_status_t(0) | |||||
| jack_client = jacklib.client_open("Render", jacklib.JackNoStartServer, jacklib.pointer(jack_status)) | |||||
| jackStatus = jacklib.jack_status_t(0) | |||||
| jackClient = jacklib.client_open("Render", jacklib.JackNoStartServer, jacklib.pointer(jackStatus)) | |||||
| if not jack_client: | |||||
| errorString = get_jack_status_error_string(jack_status) | |||||
| if not jackClient: | |||||
| errorString = get_jack_status_error_string(jackStatus) | |||||
| QMessageBox.critical(None, app.translate("RenderW", "Error"), app.translate("RenderW", | QMessageBox.critical(None, app.translate("RenderW", "Error"), app.translate("RenderW", | ||||
| "Could not connect to JACK, possible reasons:\n" | "Could not connect to JACK, possible reasons:\n" | ||||
| "%s" % errorString)) | "%s" % errorString)) | ||||
| @@ -314,10 +330,4 @@ if __name__ == '__main__': | |||||
| gui.show() | gui.show() | ||||
| # App-Loop | # App-Loop | ||||
| ret = app.exec_() | |||||
| if jack_client: | |||||
| jacklib.client_close(jack_client) | |||||
| # Exit properly | |||||
| sys.exit(ret) | |||||
| sys.exit(app.exec_()) | |||||
| @@ -58,7 +58,7 @@ else: | |||||
| WINDOWS = False | WINDOWS = False | ||||
| # ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||
| # Try import Signal | |||||
| # Try Import Signal | |||||
| try: | try: | ||||
| from signal import signal, SIGINT, SIGTERM, SIGUSR1, SIGUSR2 | from signal import signal, SIGINT, SIGTERM, SIGUSR1, SIGUSR2 | ||||
| @@ -1,15 +1,35 @@ | |||||
| #!/usr/bin/env python3 | #!/usr/bin/env python3 | ||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||
| # Common/Shared code for Cadence | |||||
| # Copyright (C) 2012 Filipe Coelho <falktx@falktx.com> | |||||
| # | |||||
| # 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 | |||||
| # the Free Software Foundation; either version 2 of the License, or | |||||
| # any later version. | |||||
| # | |||||
| # This program is distributed in the hope that it will be useful, | |||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| # GNU General Public License for more details. | |||||
| # | |||||
| # For a full copy of the GNU General Public License see the COPYING file | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Imports (Global) | # Imports (Global) | ||||
| import os | |||||
| from PyQt4.QtCore import QProcess, QSettings | from PyQt4.QtCore import QProcess, QSettings | ||||
| from time import sleep | from time import sleep | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Imports (Custom Stuff) | # Imports (Custom Stuff) | ||||
| from shared import * | from shared import * | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Default Plugin PATHs | # Default Plugin PATHs | ||||
| DEFAULT_LADSPA_PATH = [ | DEFAULT_LADSPA_PATH = [ | ||||
| os.path.join(HOME, ".ladspa"), | os.path.join(HOME, ".ladspa"), | ||||
| os.path.join("/", "usr", "lib", "ladspa"), | os.path.join("/", "usr", "lib", "ladspa"), | ||||
| @@ -34,36 +54,52 @@ DEFAULT_VST_PATH = [ | |||||
| os.path.join("/", "usr", "local", "lib", "vst") | os.path.join("/", "usr", "local", "lib", "vst") | ||||
| ] | ] | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # ALSA file-type indexes | # ALSA file-type indexes | ||||
| iAlsaFileNone = 0 | iAlsaFileNone = 0 | ||||
| iAlsaFileLoop = 1 | iAlsaFileLoop = 1 | ||||
| iAlsaFileJACK = 2 | iAlsaFileJACK = 2 | ||||
| iAlsaFilePulse = 3 | iAlsaFilePulse = 3 | ||||
| iAlsaFileMax = 4 | iAlsaFileMax = 4 | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Global Settings | # Global Settings | ||||
| GlobalSettings = QSettings("Cadence", "GlobalSettings") | GlobalSettings = QSettings("Cadence", "GlobalSettings") | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Get Process list | # Get Process list | ||||
| # TODO - Windows support, others | |||||
| def getProcList(): | def getProcList(): | ||||
| retProcs = [] | retProcs = [] | ||||
| process = QProcess() | |||||
| process.start("ps", ["-e"]) | |||||
| process.waitForFinished() | |||||
| if HAIKU or LINUX or MACOS: | |||||
| process = QProcess() | |||||
| process.start("ps", ["-e"]) | |||||
| process.waitForFinished() | |||||
| processDump = process.readAllStandardOutput().split("\n") | |||||
| processDump = process.readAllStandardOutput().split("\n") | |||||
| for i in range(len(processDump)): | |||||
| if (i == 0): continue | |||||
| dumpTest = str(processDump[i], encoding="utf-8").rsplit(":", 1)[-1].split(" ") | |||||
| if len(dumpTest) > 1 and dumpTest[1]: | |||||
| retProcs.append(dumpTest[1]) | |||||
| for i in range(len(processDump)): | |||||
| if (i == 0): continue | |||||
| dumpTest = str(processDump[i], encoding="utf-8").rsplit(":", 1)[-1].split(" ") | |||||
| if len(dumpTest) > 1 and dumpTest[1]: | |||||
| retProcs.append(dumpTest[1]) | |||||
| else: | |||||
| print("getProcList() - Not supported in this system") | |||||
| return retProcs | return retProcs | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Stop all audio processes, used for force-restart | |||||
| def stopAllAudioProcesses(): | def stopAllAudioProcesses(): | ||||
| if not (HAIKU or LINUX or MACOS): | |||||
| print("stopAllAudioProcesses() - Not supported in this system") | |||||
| return | |||||
| process = QProcess() | process = QProcess() | ||||
| procsTerm = ["a2j", "a2jmidid", "artsd", "jackd", "jackdmp", "knotify4", "lash", "ladishd", "ladiappd", "ladiconfd", "jmcore"] | procsTerm = ["a2j", "a2jmidid", "artsd", "jackd", "jackdmp", "knotify4", "lash", "ladishd", "ladiappd", "ladiconfd", "jmcore"] | ||||
| @@ -16,8 +16,10 @@ | |||||
| # | # | ||||
| # For a full copy of the GNU General Public License see the COPYING file | # For a full copy of the GNU General Public License see the COPYING file | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Imports (Global) | # Imports (Global) | ||||
| import platform, sys | |||||
| import platform | |||||
| from copy import deepcopy | from copy import deepcopy | ||||
| from decimal import Decimal | from decimal import Decimal | ||||
| from sip import unwrapinstance | from sip import unwrapinstance | ||||
| @@ -31,25 +33,12 @@ try: | |||||
| except: | except: | ||||
| GuiContainer = QWidget | GuiContainer = QWidget | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Imports (Custom) | # Imports (Custom) | ||||
| import ui_carla_about, ui_carla_edit, ui_carla_parameter, ui_carla_plugin | import ui_carla_about, ui_carla_edit, ui_carla_parameter, ui_carla_plugin | ||||
| from shared import * | from shared import * | ||||
| # Carla Host object | |||||
| class CarlaHostObject(object): | |||||
| __slots__ = [ | |||||
| 'host', | |||||
| 'gui', | |||||
| 'isControl', | |||||
| 'processMode', | |||||
| 'maxParameters' | |||||
| ] | |||||
| Carla = CarlaHostObject() | |||||
| Carla.host = None | |||||
| Carla.gui = None | |||||
| Carla.isControl = False | |||||
| is64bit = bool(platform.architecture()[0] == "64bit" and sys.maxsize > 2**32) | is64bit = bool(platform.architecture()[0] == "64bit" and sys.maxsize > 2**32) | ||||
| # ------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------ | ||||
| @@ -59,7 +48,7 @@ is64bit = bool(platform.architecture()[0] == "64bit" and sys.maxsize > 2**32) | |||||
| MAX_PLUGINS = 99 | MAX_PLUGINS = 99 | ||||
| MAX_PARAMETERS = 200 | MAX_PARAMETERS = 200 | ||||
| # plugin hints | |||||
| # group plugin hints | |||||
| PLUGIN_IS_BRIDGE = 0x001 | PLUGIN_IS_BRIDGE = 0x001 | ||||
| PLUGIN_IS_SYNTH = 0x002 | PLUGIN_IS_SYNTH = 0x002 | ||||
| PLUGIN_HAS_GUI = 0x004 | PLUGIN_HAS_GUI = 0x004 | ||||
| @@ -70,7 +59,7 @@ PLUGIN_CAN_VOLUME = 0x040 | |||||
| PLUGIN_CAN_BALANCE = 0x080 | PLUGIN_CAN_BALANCE = 0x080 | ||||
| PLUGIN_CAN_FORCE_STEREO = 0x100 | PLUGIN_CAN_FORCE_STEREO = 0x100 | ||||
| # parameter hints | |||||
| # group parameter hints | |||||
| PARAMETER_IS_BOOLEAN = 0x01 | PARAMETER_IS_BOOLEAN = 0x01 | ||||
| PARAMETER_IS_INTEGER = 0x02 | PARAMETER_IS_INTEGER = 0x02 | ||||
| PARAMETER_IS_LOGARITHMIC = 0x04 | PARAMETER_IS_LOGARITHMIC = 0x04 | ||||
| @@ -200,13 +189,7 @@ PROCESS_MODE_MULTIPLE_CLIENTS = 1 | |||||
| PROCESS_MODE_CONTINUOUS_RACK = 2 | PROCESS_MODE_CONTINUOUS_RACK = 2 | ||||
| PROCESS_MODE_PATCHBAY = 3 | PROCESS_MODE_PATCHBAY = 3 | ||||
| # ------------------------------------------------------------------------------------------------ | |||||
| # Carla GUI stuff | |||||
| Carla.processMode = PROCESS_MODE_CONTINUOUS_RACK | |||||
| Carla.maxParameters = MAX_PARAMETERS | |||||
| # set native binary type | |||||
| # TODO ... | |||||
| if HAIKU or LINUX or MACOS: | if HAIKU or LINUX or MACOS: | ||||
| BINARY_NATIVE = BINARY_POSIX64 if is64bit else BINARY_POSIX32 | BINARY_NATIVE = BINARY_POSIX64 if is64bit else BINARY_POSIX32 | ||||
| elif WINDOWS: | elif WINDOWS: | ||||
| @@ -214,6 +197,28 @@ elif WINDOWS: | |||||
| else: | else: | ||||
| BINARY_NATIVE = BINARY_OTHER | BINARY_NATIVE = BINARY_OTHER | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Carla Host object | |||||
| class CarlaHostObject(object): | |||||
| __slots__ = [ | |||||
| 'host', | |||||
| 'gui', | |||||
| 'isControl', | |||||
| 'processMode', | |||||
| 'maxParameters' | |||||
| ] | |||||
| Carla = CarlaHostObject() | |||||
| Carla.host = None | |||||
| Carla.gui = None | |||||
| Carla.isControl = False | |||||
| Carla.processMode = PROCESS_MODE_CONTINUOUS_RACK | |||||
| Carla.maxParameters = MAX_PARAMETERS | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Carla GUI stuff | |||||
| ICON_STATE_NULL = 0 | ICON_STATE_NULL = 0 | ||||
| ICON_STATE_WAIT = 1 | ICON_STATE_WAIT = 1 | ||||
| ICON_STATE_OFF = 2 | ICON_STATE_OFF = 2 | ||||
| @@ -429,8 +434,8 @@ def xmlSafeString(string, toXml): | |||||
| else: | else: | ||||
| return string.replace("&", "&").replace("<","<").replace(">",">").replace("'","'").replace(""","\"") | return string.replace("&", "&").replace("<","<").replace(">",">").replace("'","'").replace(""","\"") | ||||
| # ------------------------------------------------------------------------------------------------ | |||||
| # carla_about.cpp | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # CarlaAbout.cpp | |||||
| class CarlaAboutW(QDialog, ui_carla_about.Ui_CarlaAboutW): | class CarlaAboutW(QDialog, ui_carla_about.Ui_CarlaAboutW): | ||||
| def __init__(self, parent): | def __init__(self, parent): | ||||
| @@ -508,7 +513,7 @@ class CarlaAboutW(QDialog, ui_carla_about.Ui_CarlaAboutW): | |||||
| QDialog.done(self, r) | QDialog.done(self, r) | ||||
| self.close() | self.close() | ||||
| # ------------------------------------------------------------------------------------------------ | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # PluginParameter.cpp | # PluginParameter.cpp | ||||
| # Plugin Parameter | # Plugin Parameter | ||||
| @@ -16,20 +16,28 @@ | |||||
| # | # | ||||
| # For a full copy of the GNU General Public License see the COPYING file | # For a full copy of the GNU General Public License see the COPYING file | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Imports (Global) | # Imports (Global) | ||||
| from PyQt4.QtCore import pyqtSlot, QTimer | from PyQt4.QtCore import pyqtSlot, QTimer | ||||
| from PyQt4.QtGui import QCursor, QFontMetrics, QMenu | from PyQt4.QtGui import QCursor, QFontMetrics, QMenu | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Imports (Custom Stuff) | # Imports (Custom Stuff) | ||||
| import jacksettings, logs, render | import jacksettings, logs, render | ||||
| from shared import * | from shared import * | ||||
| from jacklib_helpers import * | from jacklib_helpers import * | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Have JACK2 ? | # Have JACK2 ? | ||||
| if jacklib.JACK2 and DEBUG: | if jacklib.JACK2 and DEBUG: | ||||
| print("Using JACK2, version %s" % cString(jacklib.get_version_string())) | print("Using JACK2, version %s" % cString(jacklib.get_version_string())) | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Can Render ? | # Can Render ? | ||||
| for iPATH in PATH: | for iPATH in PATH: | ||||
| if os.path.exists(os.path.join(iPATH, "jack_capture")): | if os.path.exists(os.path.join(iPATH, "jack_capture")): | ||||
| canRender = True | canRender = True | ||||
| @@ -37,7 +45,9 @@ for iPATH in PATH: | |||||
| else: | else: | ||||
| canRender = False | canRender = False | ||||
| # Variables | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Global Variables | |||||
| TRANSPORT_VIEW_HMS = 0 | TRANSPORT_VIEW_HMS = 0 | ||||
| TRANSPORT_VIEW_BBT = 1 | TRANSPORT_VIEW_BBT = 1 | ||||
| TRANSPORT_VIEW_FRAMES = 2 | TRANSPORT_VIEW_FRAMES = 2 | ||||
| @@ -45,7 +55,9 @@ TRANSPORT_VIEW_FRAMES = 2 | |||||
| buffer_sizes = (16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192) | buffer_sizes = (16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192) | ||||
| sample_rates = (22050, 32000, 44100, 48000, 88200, 96000, 192000) | sample_rates = (22050, 32000, 44100, 48000, 88200, 96000, 192000) | ||||
| # DBus object | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Global DBus object | |||||
| class DBusObject(object): | class DBusObject(object): | ||||
| __slots__ = [ | __slots__ = [ | ||||
| 'loop', | 'loop', | ||||
| @@ -63,16 +75,6 @@ class DBusObject(object): | |||||
| ] | ] | ||||
| DBus = DBusObject() | DBus = DBusObject() | ||||
| # Jack object | |||||
| class JackObject(object): | |||||
| __slots__ = [ | |||||
| 'client' | |||||
| ] | |||||
| jack = JackObject() | |||||
| # Init objects | |||||
| DBus.loop = None | DBus.loop = None | ||||
| DBus.bus = None | DBus.bus = None | ||||
| DBus.a2j = None | DBus.a2j = None | ||||
| @@ -85,9 +87,18 @@ DBus.ladish_app_iface = None | |||||
| DBus.ladish_app_daemon = None | DBus.ladish_app_daemon = None | ||||
| DBus.patchbay = None | DBus.patchbay = None | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Global JACK object | |||||
| class JackObject(object): | |||||
| __slots__ = [ | |||||
| 'client' | |||||
| ] | |||||
| jack = JackObject() | |||||
| jack.client = None | jack.client = None | ||||
| # ------------------------------------------------------------- | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Property change calls | # Property change calls | ||||
| def jack_buffer_size(self_, buffer_size): | def jack_buffer_size(self_, buffer_size): | ||||
| @@ -121,7 +132,7 @@ def slot_jackSampleRate_ComboBox(self_, text): | |||||
| if text and text.isdigit(): | if text and text.isdigit(): | ||||
| jack_sample_rate(self_, int(text)) | jack_sample_rate(self_, int(text)) | ||||
| # ------------------------------------------------------------- | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Transport calls | # Transport calls | ||||
| def setTransportView(self_, view): | def setTransportView(self_, view): | ||||
| @@ -194,7 +205,7 @@ def slot_transportViewMenu(self_): | |||||
| elif act_selected == act_t_fr: | elif act_selected == act_t_fr: | ||||
| setTransportView(self_, TRANSPORT_VIEW_FRAMES) | setTransportView(self_, TRANSPORT_VIEW_FRAMES) | ||||
| # ------------------------------------------------------------- | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Refresh GUI stuff | # Refresh GUI stuff | ||||
| def refreshDSPLoad(self_): | def refreshDSPLoad(self_): | ||||
| @@ -262,7 +273,7 @@ def refreshTransport(self_): | |||||
| self_.m_last_transport_state = state | self_.m_last_transport_state = state | ||||
| # ------------------------------------------------------------- | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Set GUI stuff | # Set GUI stuff | ||||
| def setBufferSize(self_, buffer_size, forced=False): | def setBufferSize(self_, buffer_size, forced=False): | ||||
| @@ -349,7 +360,7 @@ def setDSPLoad(self_, dsp_load): | |||||
| def setXruns(self_, xruns): | def setXruns(self_, xruns): | ||||
| self_.b_xruns.setText("%s Xrun%s" % (str(xruns) if (xruns >= 0) else "--", "" if (xruns == 1) else "s")) | self_.b_xruns.setText("%s Xrun%s" % (str(xruns) if (xruns >= 0) else "--", "" if (xruns == 1) else "s")) | ||||
| # ------------------------------------------------------------- | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # External Dialogs | # External Dialogs | ||||
| global logsW | global logsW | ||||
| @@ -378,7 +389,7 @@ def slot_showRender(self_): | |||||
| renderW.exec_() | renderW.exec_() | ||||
| del renderW | del renderW | ||||
| # ------------------------------------------------------------- | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Shared Connections | # Shared Connections | ||||
| def setJackConnections(self_, modes): | def setJackConnections(self_, modes): | ||||