From 18f9b101af8f47f5b8654f875ef4a849ab855a75 Mon Sep 17 00:00:00 2001 From: Riccardo Cagnasso Date: Tue, 7 Aug 2018 16:16:48 +0200 Subject: [PATCH 1/8] client-name in Net misc parameters --- src/jacksettings.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/jacksettings.py b/src/jacksettings.py index 69e9f759..46337f97 100755 --- a/src/jacksettings.py +++ b/src/jacksettings.py @@ -608,6 +608,10 @@ def saveDriverSettings(self, resetIfNeeded): value = dbus.Int32(self.ui.obj_driver_channels.value()) setDriverParameter("channels", value, True) + if self.ui.obj_driver_client_name.isEnabled(): + value = dbus.String(self.ui.obj_driver_client_name.text()) + setDriverParameter("client-name", value, True) + def loadDriverSettings(self, reset=False, forceReset=False): global gJackctl @@ -694,6 +698,8 @@ def loadDriverSettings(self, reset=False, forceReset=False): self.ui.obj_driver_snoop.setChecked(bool(value)) elif attribute == "channels": self.ui.obj_driver_channels.setValue(int(value)) + elif attribute == 'client-name': + self.ui.obj_driver_client_name.setText(value) else: print("JackSettingsW::loadDriverSettings() - Unimplemented driver attribute '%s', value: '%s'" % (attribute, str(value))) @@ -852,6 +858,7 @@ def slot_checkDriverSelection(self, row): self.ui.obj_driver_snoop.setEnabled(driverHasFeature("snoop")) self.ui.obj_driver_channels.setEnabled(driverHasFeature("channels")) self.ui.obj_driver_channels_label.setEnabled(driverHasFeature("channels")) + self.ui.obj_driver_client_name.setEnabled(driverHasFeature("client-name")) # Misc stuff if self.ui.obj_server_driver.item(row, 0).text() == "ALSA": @@ -872,6 +879,9 @@ def slot_checkDriverSelection(self, row): elif self.ui.obj_server_driver.item(row, 0).text() == "Loopback": self.ui.toolbox_driver_misc.setCurrentIndex(4) + elif self.ui.obj_server_driver.item(row, 0).text() == "Net": + self.ui.toolbox_driver_misc.setCurrentIndex(5) + else: self.ui.toolbox_driver_misc.setCurrentIndex(0) From 21b56bfd255edb00a24fc6df261b28617284bedb Mon Sep 17 00:00:00 2001 From: Riccardo Cagnasso Date: Tue, 7 Aug 2018 16:53:57 +0200 Subject: [PATCH 2/8] client-name for Net driver (UI) --- resources/ui/settings_jack.ui | 57 +++++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/resources/ui/settings_jack.ui b/resources/ui/settings_jack.ui index d86bfcb5..80930e0a 100644 --- a/resources/ui/settings_jack.ui +++ b/resources/ui/settings_jack.ui @@ -6,8 +6,8 @@ 0 0 - 680 - 449 + 802 + 610 @@ -17,7 +17,7 @@ - 0 + 1 @@ -448,7 +448,7 @@ ALSA - AlignHCenter|AlignVCenter|AlignCenter + AlignCenter ItemIsSelectable|ItemIsEnabled @@ -459,7 +459,7 @@ Dummy - AlignHCenter|AlignVCenter|AlignCenter + AlignCenter ItemIsSelectable|ItemIsEnabled @@ -470,7 +470,7 @@ FireWire - AlignHCenter|AlignVCenter|AlignCenter + AlignCenter ItemIsSelectable|ItemIsEnabled @@ -481,7 +481,7 @@ Loopback - AlignHCenter|AlignVCenter|AlignCenter + AlignCenter ItemIsSelectable|ItemIsEnabled @@ -492,7 +492,7 @@ Net - AlignHCenter|AlignVCenter|AlignCenter + AlignCenter ItemIsSelectable|ItemIsEnabled @@ -503,7 +503,7 @@ NetOne - AlignHCenter|AlignVCenter|AlignCenter + AlignCenter ItemIsSelectable|ItemIsEnabled @@ -1112,7 +1112,7 @@ Also known as buffer size - 0 + 5 @@ -1335,6 +1335,43 @@ Also known as buffer size + + + + + + false + + + Client name + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Vertical + + + + 20 + 200 + + + + + + + + false + + + + + From ccfb666c1ad715721820716c613f803abab8ec74 Mon Sep 17 00:00:00 2001 From: Riccardo Cagnasso Date: Tue, 7 Aug 2018 16:58:24 +0200 Subject: [PATCH 3/8] fixed unwanted modifications --- resources/ui/settings_jack.ui | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/resources/ui/settings_jack.ui b/resources/ui/settings_jack.ui index 80930e0a..9bd000dc 100644 --- a/resources/ui/settings_jack.ui +++ b/resources/ui/settings_jack.ui @@ -6,8 +6,8 @@ 0 0 - 802 - 610 + 680 + 449 @@ -17,7 +17,7 @@ - 1 + 0 @@ -448,7 +448,7 @@ ALSA - AlignCenter + AlignHCenter|AlignVCenter|AlignCenter ItemIsSelectable|ItemIsEnabled @@ -459,7 +459,7 @@ Dummy - AlignCenter + AlignHCenter|AlignVCenter|AlignCenter ItemIsSelectable|ItemIsEnabled @@ -470,7 +470,7 @@ FireWire - AlignCenter + AlignHCenter|AlignVCenter|AlignCenter ItemIsSelectable|ItemIsEnabled @@ -481,7 +481,7 @@ Loopback - AlignCenter + AlignHCenter|AlignVCenter|AlignCenter ItemIsSelectable|ItemIsEnabled @@ -492,7 +492,7 @@ Net - AlignCenter + AlignHCenter|AlignVCenter|AlignCenter ItemIsSelectable|ItemIsEnabled @@ -503,7 +503,7 @@ NetOne - AlignCenter + AlignHCenter|AlignVCenter|AlignCenter ItemIsSelectable|ItemIsEnabled @@ -1112,7 +1112,7 @@ Also known as buffer size - 5 + 0 From e4e6399ef6990f616e3e73c96235e68225ab921d Mon Sep 17 00:00:00 2001 From: Riccardo Cagnasso Date: Wed, 8 Aug 2018 15:06:43 +0200 Subject: [PATCH 4/8] net gui initial --- resources/ui/settings_jack.ui | 102 ++++++++++++++++++++++++++++------ 1 file changed, 86 insertions(+), 16 deletions(-) diff --git a/resources/ui/settings_jack.ui b/resources/ui/settings_jack.ui index 9bd000dc..21db6e1d 100644 --- a/resources/ui/settings_jack.ui +++ b/resources/ui/settings_jack.ui @@ -6,8 +6,8 @@ 0 0 - 680 - 449 + 749 + 569 @@ -17,7 +17,7 @@ - 0 + 2 @@ -1385,19 +1385,89 @@ Also known as buffer size - - - - 16 - - - - Not Implemented Yet - - - Qt::AlignCenter - - + + + + + + + + + + Auto Connect + + + + + + + Multicast Ip + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Udp Net Port + + + + + + + Auto Save + + + + + + + + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + From 21a636c6ef52f887e718f422ba1acf935dcacc59 Mon Sep 17 00:00:00 2001 From: Riccardo Cagnasso Date: Wed, 8 Aug 2018 17:09:44 +0200 Subject: [PATCH 5/8] channels number for jack net --- src/jacksettings.py | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/jacksettings.py b/src/jacksettings.py index 46337f97..1332ab9f 100755 --- a/src/jacksettings.py +++ b/src/jacksettings.py @@ -557,11 +557,20 @@ def saveDriverSettings(self, resetIfNeeded): if self.ui.obj_driver_inchannels.isEnabled(): value = dbus.UInt32(self.ui.obj_driver_inchannels.value()) - setDriverParameter("inchannels", value, True) + if self.fDriverName == 'net': + value = dbus.Int32(self.ui.obj_driver_outchannels.value()) + setDriverParameter("input-ports", value, True) + else: + value = dbus.UInt32(self.ui.obj_driver_outchannels.value()) + setDriverParameter("inchannels", value, True) if self.ui.obj_driver_outchannels.isEnabled(): - value = dbus.UInt32(self.ui.obj_driver_outchannels.value()) - setDriverParameter("outchannels", value, True) + if self.fDriverName == 'net': + value = dbus.Int32(self.ui.obj_driver_outchannels.value()) + setDriverParameter("output-ports", value, True) + else: + value = dbus.UInt32(self.ui.obj_driver_outchannels.value()) + setDriverParameter("outchannels", value, True) if self.ui.obj_driver_shorts.isEnabled(): value = dbus.Boolean(self.ui.obj_driver_shorts.isChecked()) @@ -700,6 +709,10 @@ def loadDriverSettings(self, reset=False, forceReset=False): self.ui.obj_driver_channels.setValue(int(value)) elif attribute == 'client-name': self.ui.obj_driver_client_name.setText(value) + elif attribute == 'input-ports': + self.ui.obj_driver_inchannels.setValue(int(value)) + elif attribute == 'output-ports': + self.ui.obj_driver_outchannels.setValue(int(value)) else: print("JackSettingsW::loadDriverSettings() - Unimplemented driver attribute '%s', value: '%s'" % (attribute, str(value))) @@ -840,10 +853,10 @@ def slot_checkDriverSelection(self, row): self.ui.obj_driver_monitor.setEnabled(driverHasFeature("monitor")) self.ui.obj_driver_dither.setEnabled(driverHasFeature("dither")) self.ui.obj_driver_dither_label.setEnabled(driverHasFeature("dither")) - self.ui.obj_driver_inchannels.setEnabled(driverHasFeature("inchannels")) - self.ui.obj_driver_inchannels_label.setEnabled(driverHasFeature("inchannels")) - self.ui.obj_driver_outchannels.setEnabled(driverHasFeature("outchannels")) - self.ui.obj_driver_outchannels_label.setEnabled(driverHasFeature("outchannels")) + self.ui.obj_driver_inchannels.setEnabled(driverHasFeature("inchannels") or driverHasFeature("input-ports")) + self.ui.obj_driver_inchannels_label.setEnabled(driverHasFeature("inchannels") or driverHasFeature("input-ports")) + self.ui.obj_driver_outchannels.setEnabled(driverHasFeature("outchannels") or driverHasFeature("output-ports")) + self.ui.obj_driver_outchannels_label.setEnabled(driverHasFeature("outchannels") or driverHasFeature("output-ports")) self.ui.obj_driver_shorts.setEnabled(driverHasFeature("shorts")) self.ui.obj_driver_input_latency.setEnabled(driverHasFeature("input-latency")) self.ui.obj_driver_input_latency_label.setEnabled(driverHasFeature("input-latency")) From 21ffee6d2a07cc094f3122dfc60472678299fc1f Mon Sep 17 00:00:00 2001 From: Riccardo Cagnasso Date: Sat, 11 Aug 2018 17:29:21 +0200 Subject: [PATCH 6/8] netmanager support --- resources/ui/settings_jack.ui | 199 +++++++++++++++++++++------------- src/cadence.py | 6 +- src/jacksettings.py | 107 +++++++++++++++++- src/shared_cadence.py | 45 ++++++++ 4 files changed, 279 insertions(+), 78 deletions(-) diff --git a/resources/ui/settings_jack.ui b/resources/ui/settings_jack.ui index 21db6e1d..90c89a75 100644 --- a/resources/ui/settings_jack.ui +++ b/resources/ui/settings_jack.ui @@ -1387,85 +1387,132 @@ Also known as buffer size - - - - - - - - Auto Connect - - - - - - - Multicast Ip - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - Udp Net Port - - - - - - - Auto Save - - - - - - - - - - - - - - - - - - - - - + + + Settings + + + + + + 65536 + + + + + + + Auto Connect Ports + + + + + + + Multicast Ip + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Udp Net Port + + + + + + + Auto Save + + + + + + + + + + + + + + + + + + + - - - Qt::Horizontal + + + Controls - - - 40 - 20 - - - + + + + + Start at Boot + + + + + + + Reset Network Settings + + + + + + + + + Start + + + + + + + Stop + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + diff --git a/src/cadence.py b/src/cadence.py index 88816d93..815e821a 100755 --- a/src/cadence.py +++ b/src/cadence.py @@ -1373,6 +1373,10 @@ def jackStarted(self): self.checkAlsaAudio() self.checkPulseAudio() + if GlobalSettings.value("JACKNETMANAGER/AutoStart"): + print("loadinternal") + gDBus.jack.LoadInternal("netmanager") + def jackStopped(self): if self.m_timer500: self.killTimer(self.m_timer500) @@ -2386,7 +2390,7 @@ def taskInMainThread(): if haveDBus: gDBus.loop = DBusQtMainLoop(set_as_default=True) - gDBus.bus = dbus.SessionBus(mainloop=gDBus.loop) + gDBus.bus = dbus.SessionBus(mainloop=gDBus.loop) initSystemChecks() diff --git a/src/jacksettings.py b/src/jacksettings.py index 1332ab9f..e0fd46ce 100755 --- a/src/jacksettings.py +++ b/src/jacksettings.py @@ -30,6 +30,7 @@ from PyQt4.QtGui import QFontMetrics from PyQt4.QtGui import QDialog, QDialogButtonBox, QMessageBox +from shared_cadence import * # ------------------------------------------------------------------------------------------------------------ # Imports (Custom Stuff) @@ -75,13 +76,17 @@ def initBus(bus): global gJackctl + global jack_control_iface if not bus: gJackctl = None return 1 try: - gJackctl = dbus.Interface(bus.get_object("org.jackaudio.service", "/org/jackaudio/Controller"), "org.jackaudio.Configure") + controller = bus.get_object("org.jackaudio.service", "/org/jackaudio/Controller") + gJackctl = dbus.Interface(controller, "org.jackaudio.Configure") + jack_control_iface = dbus.Interface( + controller, "org.jackaudio.JackControl") return 0 except: gJackctl = None @@ -234,6 +239,10 @@ def __init__(self, parent): self.ui.obj_driver_capture.currentIndexChanged[int].connect(self.slot_checkALSASelection) self.ui.obj_driver_playback.currentIndexChanged[int].connect(self.slot_checkALSASelection) + self.ui.obj_net_manager_start.clicked.connect(self.net_manager_start) + self.ui.obj_net_manager_stop.clicked.connect(self.net_manager_stop) + self.ui.obj_net_reset.clicked.connect(self.net_manager_reset) + # ------------------------------------------------------------- # Load initial settings @@ -243,6 +252,7 @@ def __init__(self, parent): self.checkEngine() self.loadServerSettings() self.loadDriverSettings(True) # reset because we'll change it below + self.loadNetSettings() # ------------------------------------------------------------- # Load selected JACK driver @@ -716,6 +726,83 @@ def loadDriverSettings(self, reset=False, forceReset=False): else: print("JackSettingsW::loadDriverSettings() - Unimplemented driver attribute '%s', value: '%s'" % (attribute, str(value))) + def saveNetSettings(self): + path = ['internals', 'netmanager'] + + isset, default, value = map( + dbus_type_to_python_type, + gJackctl.GetParameterValue(path + ['multicast-ip'])) + + curvalue = self.ui.obj_net_multicast_ip.text() + + if curvalue != value: + gJackctl.SetParameterValue( + path + ['multicast-ip'], + python_type_to_jackdbus_type(curvalue, 's')) + + isset, default, value = map( + dbus_type_to_python_type, + gJackctl.GetParameterValue(path + ['udp-net-port'])) + + curvalue = self.ui.obj_net_multicast_port.value() + + if curvalue != value: + gJackctl.SetParameterValue( + path + ['udp-net-port'], + python_type_to_jackdbus_type(curvalue, 'u')) + + isset, default, value = map( + dbus_type_to_python_type, + gJackctl.GetParameterValue(path + ['auto-connect'])) + + curvalue = self.ui.obj_net_auto_connect.isChecked() + + if curvalue != value: + gJackctl.SetParameterValue(path + ['auto-connect'], curvalue) + + isset, default, value = map( + dbus_type_to_python_type, + gJackctl.GetParameterValue(path + ['auto-save'])) + + curvalue = self.ui.obj_net_auto_save.isChecked() + + if curvalue != value: + gJackctl.SetParameterValue(path + ['auto-save'], curvalue) + + GlobalSettings = QSettings("Cadence", "GlobalSettings") + GlobalSettings.setValue('JACKNETMANAGER/AutoStart', + self.ui.obj_net_manager_at_boot.isChecked()) + + def loadNetSettings(self): + path = ['internals', 'netmanager'] + + _, _, value = map( + dbus_type_to_python_type, + gJackctl.GetParameterValue(path + ['multicast-ip'])) + + self.ui.obj_net_multicast_ip.setText(value) + + _, _, value = map( + dbus_type_to_python_type, + gJackctl.GetParameterValue(path + ['udp-net-port'])) + + self.ui.obj_net_multicast_port.setValue(value) + + _, _, value = map( + dbus_type_to_python_type, + gJackctl.GetParameterValue(path + ['auto-connect'])) + + self.ui.obj_net_auto_connect.setChecked(value) + + _, _, value = map( + dbus_type_to_python_type, + gJackctl.GetParameterValue(path + ['auto-save'])) + + self.ui.obj_net_auto_save.setChecked(value) + + GlobalSettings = QSettings("Cadence", "GlobalSettings") + self.ui.obj_net_manager_at_boot.setChecked( + GlobalSettings.value('JACKNETMANAGER/AutoStart') == "true") # ----------------------------------------------------------------- # Helper functions @@ -779,6 +866,7 @@ def slot_checkDriverSelection(self, row): # Save previous settings self.saveDriverSettings(False) + self.saveNetSettings() # Set new Jack driver self.fDriverName = dbus.String(self.ui.obj_server_driver.item(row, 0).text().lower()) @@ -900,10 +988,27 @@ def slot_checkDriverSelection(self, row): self.slot_checkDuplexSelection(self.ui.obj_driver_duplex.isChecked()) + def net_manager_start(self): + jack_control_iface.LoadInternal("netmanager") + + def net_manager_stop(self): + jack_control_iface.UnloadInternal("netmanager") + + def net_manager_reset(self): + path = ['internals', 'netmanager'] + for _, name, _, _ in gJackctl.GetParametersInfo(path): + gJackctl.ResetParameterValue(path + [name]) + + GlobalSettings = QSettings("Cadence", "GlobalSettings") + GlobalSettings.setValue('JACKNETMANAGER/AutoStart', False) + + self.loadNetSettings() + @pyqtSlot() def slot_saveJackSettings(self): self.saveServerSettings() self.saveDriverSettings(True) + self.saveNetSettings() @pyqtSlot() def slot_resetJackSettings(self): diff --git a/src/shared_cadence.py b/src/shared_cadence.py index 2a819f39..9f709f6f 100644 --- a/src/shared_cadence.py +++ b/src/shared_cadence.py @@ -20,6 +20,7 @@ # Imports (Global) from time import sleep +import dbus if True: from PyQt5.QtCore import QProcess, QSettings @@ -164,3 +165,47 @@ def stopAllAudioProcesses(tryCloseJack = True): process.start("killall", ["-KILL"] + procsKill) process.waitForFinished() waitProcsEnd(procsKill, tries) + + +def bool_convert(str_value): + if str_value.lower() == "false": + return False + + if str_value.lower() == "off": + return False + + if str_value.lower() == "no": + return False + + if str_value == "0": + return False + + if str_value.lower() == "(null)": + return False + + return bool(str_value) + + +def dbus_type_to_python_type(dbus_value): + if type(dbus_value) == dbus.Boolean: + return bool(dbus_value) + if type(dbus_value) == dbus.Int32 or type(dbus_value) == dbus.UInt32: + return int(dbus_value) + return dbus_value + + +def python_type_to_jackdbus_type(value, type_char): + type_char = str(type_char) + + if type_char == "b": + return bool_convert(value) + elif type_char == "y": + return dbus.Byte(value) + elif type_char == "i": + return dbus.Int32(value) + elif type_char == "u": + return dbus.UInt32(value) + elif type_char == "s": + return dbus.String(value) + + return value From ee159a88ef5577f3df6ed3e3f3a4bb31db5402e4 Mon Sep 17 00:00:00 2001 From: Riccardo Cagnasso Date: Mon, 13 Aug 2018 16:13:04 +0200 Subject: [PATCH 7/8] removed annoying message boxes --- src/cadence.py | 3 ++- src/catia.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cadence.py b/src/cadence.py index 815e821a..9255bdf8 100755 --- a/src/cadence.py +++ b/src/cadence.py @@ -1678,7 +1678,8 @@ def slot_JackServerStart(self): try: gDBus.jack.StartServer() except: - QMessageBox.warning(self, self.tr("Warning"), self.tr("Failed to start JACK, please check the logs for more information.")) + pass + #QMessageBox.warning(self, self.tr("Warning"), self.tr("Failed to start JACK, please check the logs for more information.")) @pyqtSlot() def slot_JackServerStop(self): diff --git a/src/catia.py b/src/catia.py index 8101d601..3792df30 100755 --- a/src/catia.py +++ b/src/catia.py @@ -1132,7 +1132,8 @@ def slot_JackServerStart(self): try: ret = bool(gDBus.jack.StartServer()) except: - QMessageBox.warning(self, self.tr("Warning"), self.tr("Failed to start JACK, please check the logs for more information.")) + pass + #QMessageBox.warning(self, self.tr("Warning"), self.tr("Failed to start JACK, please check the logs for more information.")) #self.jackStopped() return ret From 771125cf3f0e67d53bebb0c3c066084b887ee59e Mon Sep 17 00:00:00 2001 From: Riccardo Cagnasso Date: Fri, 31 Aug 2018 16:10:29 +0200 Subject: [PATCH 8/8] channels fix --- src/jacksettings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/jacksettings.py b/src/jacksettings.py index e0fd46ce..5eb488c6 100755 --- a/src/jacksettings.py +++ b/src/jacksettings.py @@ -568,10 +568,10 @@ def saveDriverSettings(self, resetIfNeeded): if self.ui.obj_driver_inchannels.isEnabled(): value = dbus.UInt32(self.ui.obj_driver_inchannels.value()) if self.fDriverName == 'net': - value = dbus.Int32(self.ui.obj_driver_outchannels.value()) + value = dbus.Int32(self.ui.obj_driver_inchannels.value()) setDriverParameter("input-ports", value, True) else: - value = dbus.UInt32(self.ui.obj_driver_outchannels.value()) + value = dbus.UInt32(self.ui.obj_driver_inchannels.value()) setDriverParameter("inchannels", value, True) if self.ui.obj_driver_outchannels.isEnabled():