diff --git a/resources/ui/cadence.ui b/resources/ui/cadence.ui
index b0e1c63..007806f 100644
--- a/resources/ui/cadence.ui
+++ b/resources/ui/cadence.ui
@@ -7,7 +7,7 @@
0
0
740
- 564
+ 680
@@ -544,7 +544,16 @@
JACK Bridges
-
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
2
-
@@ -572,8 +581,8 @@
0
0
- 360
- 100
+ 435
+ 130
@@ -720,8 +729,8 @@
0
0
- 360
- 97
+ 310
+ 110
@@ -861,8 +870,8 @@
0
0
- 360
- 97
+ 435
+ 130
@@ -909,6 +918,13 @@
+ -
+
+
+ Update Channels
+
+
+
-
@@ -1579,7 +1595,7 @@
Audio Plugins PATH
- AlignHCenter|AlignVCenter|AlignCenter
+ AlignCenter
ItemIsSelectable|ItemIsEnabled
@@ -1590,7 +1606,7 @@
Default Applications
- AlignHCenter|AlignVCenter|AlignCenter
+ AlignCenter
ItemIsSelectable|ItemIsEnabled
@@ -1601,7 +1617,7 @@
WineASIO
- AlignHCenter|AlignVCenter|AlignCenter
+ AlignCenter
ItemIsSelectable|ItemIsEnabled
@@ -1620,7 +1636,16 @@
-
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
0
-
@@ -1688,8 +1713,8 @@
0
0
- 416
- 334
+ 96
+ 86
@@ -1718,8 +1743,8 @@
0
0
- 94
- 66
+ 96
+ 86
@@ -1748,8 +1773,8 @@
0
0
- 94
- 66
+ 96
+ 86
@@ -1778,8 +1803,8 @@
0
0
- 94
- 66
+ 96
+ 86
@@ -1839,12 +1864,21 @@
-
- 20
+
+ 0
+
+
+ 0
+
+
+ 0
-
+
0
+
+ 20
+
-
@@ -2070,7 +2104,16 @@
-
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
0
-
diff --git a/resources/ui/cadence_tb_pa.ui b/resources/ui/cadence_tb_pa.ui
index ed31ef4..b2d76c1 100644
--- a/resources/ui/cadence_tb_pa.ui
+++ b/resources/ui/cadence_tb_pa.ui
@@ -6,8 +6,8 @@
0
0
- 317
- 72
+ 218
+ 124
@@ -15,11 +15,60 @@
-
-
-
- Playback Mode only
-
-
+
+
-
+
+
+ Input Channels :
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ Output Channels :
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ Default
+
+
+ -1
+
+
+ 10
+
+
+ -1
+
+
+
+ -
+
+
+ Default
+
+
+ -1
+
+
+ 10
+
+
+ -1
+
+
+
+
-
diff --git a/src/cadence.py b/src/cadence.py
index 88816d9..81160db 100755
--- a/src/cadence.py
+++ b/src/cadence.py
@@ -126,9 +126,10 @@ WINEASIO_PREFIX = "HKEY_CURRENT_USER\Software\Wine\WineASIO"
# ---------------------------------------------------------------------
-global jackClientIdALSA, jackClientIdPulse
-jackClientIdALSA = -1
-jackClientIdPulse = -1
+global jackClientIdALSA, jackClientIdPulseCapture, jackClientIdPulsePlayback
+jackClientIdALSA = -1
+jackClientIdPulseCapture = -1
+jackClientIdPulsePlayback = -1
# jackdbus indexes
iGraphVersion = 0
@@ -342,8 +343,8 @@ def isPulseAudioStarted():
return bool("pulseaudio" in getProcList())
def isPulseAudioBridged():
- global jackClientIdPulse
- return bool(jackClientIdPulse != -1)
+ global jackClientIdPulseCapture, jackClientIdPulsePlayback
+ return bool(jackClientIdPulseCapture != -1 or jackClientIdPulsePlayback != -1)
def isDesktopFileInstalled(desktop):
for X_PATH in XDG_APPLICATIONS_PATH:
@@ -591,10 +592,10 @@ class ForceRestartThread(QThread):
# PulseAudio
if GlobalSettings.value("Pulse2JACK/AutoStart", True, type=bool) and not isPulseAudioBridged():
- if GlobalSettings.value("Pulse2JACK/PlaybackModeOnly", False, type=bool):
- os.system("cadence-pulse2jack -p")
- else:
- os.system("cadence-pulse2jack")
+ inputs = GlobalSettings.value("Pulse2JACK/CaptureChannels", -1, type=int)
+ outputs = GlobalSettings.value("Pulse2JACK/PlaybackChannels", -1, type=int)
+
+ os.system("cadence-pulse2jack -c %s -p %s" % (str(inputs), str(outputs)))
self.progressChanged.emit(100)
@@ -750,14 +751,16 @@ class ToolBarPADialog(QDialog, ui_cadence_tb_pa.Ui_Dialog):
def __init__(self, parent):
QDialog.__init__(self, parent)
self.setupUi(self)
-
- self.cb_playback_only.setChecked(GlobalSettings.value("Pulse2JACK/PlaybackModeOnly", False, type=bool))
+
+ self.spinBoxPulseInputs.setValue(GlobalSettings.value("Pulse2JACK/CaptureChannels", 2, type=int))
+ self.spinBoxPulseOutputs.setValue(GlobalSettings.value("Pulse2JACK/PlaybackChannels", 2, type=int))
self.accepted.connect(self.slot_setOptions)
@pyqtSlot()
def slot_setOptions(self):
- GlobalSettings.setValue("Pulse2JACK/PlaybackModeOnly", self.cb_playback_only.isChecked())
+ GlobalSettings.setValue("Pulse2JACK/CaptureChannels", self.spinBoxPulseInputs.value())
+ GlobalSettings.setValue("Pulse2JACK/PlaybackChannels", self.spinBoxPulseOutputs.value())
def done(self, r):
QDialog.done(self, r)
@@ -1161,6 +1164,7 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):
self.b_a2j_export_hw.clicked.connect(self.slot_A2JBridgeExportHW)
self.tb_a2j_options.clicked.connect(self.slot_A2JBridgeOptions)
+ self.b_pulse_update.clicked.connect(self.slot_PulseAudioBridgeStart)
self.b_pulse_start.clicked.connect(self.slot_PulseAudioBridgeStart)
self.b_pulse_stop.clicked.connect(self.slot_PulseAudioBridgeStop)
self.tb_pulse_options.clicked.connect(self.slot_PulseAudioBridgeOptions)
@@ -1262,9 +1266,12 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):
if group_name == "alsa2jack":
global jackClientIdALSA
jackClientIdALSA = group_id
+ elif group_name == "PulseAudio JACK Source":
+ global jackClientIdPulseCapture
+ jackClientIdPulseCapture = group_id
elif group_name == "PulseAudio JACK Sink":
- global jackClientIdPulse
- jackClientIdPulse = group_id
+ global jackClientIdPulsePlayback
+ jackClientIdPulsePlayback = group_id
self.jackStarted()
@@ -1403,9 +1410,10 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):
self.b_a2j_start.setEnabled(False)
self.systray.setActionEnabled("a2j_start", False)
- global jackClientIdALSA, jackClientIdPulse
- jackClientIdALSA = -1
- jackClientIdPulse = -1
+ global jackClientIdALSA, jackClientIdPulseCapture, jackClientIdPulsePlayback
+ jackClientIdALSA = -1
+ jackClientIdPulseCapture = -1
+ jackClientIdPulsePlayback = -1
if haveDBus:
self.checkAlsaAudio()
@@ -1505,6 +1513,7 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):
if isPulseAudioStarted():
if isPulseAudioBridged():
+ self.b_pulse_update.setEnabled(True)
self.b_pulse_start.setEnabled(False)
self.b_pulse_stop.setEnabled(True)
self.systray.setActionEnabled("pulse_start", False)
@@ -1512,6 +1521,7 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):
self.label_bridge_pulse.setText(self.tr("PulseAudio is started and bridged to JACK"))
else:
jackRunning = bool(gDBus.jack and gDBus.jack.IsStarted())
+ self.b_pulse_update.setEnabled(jackRunning)
self.b_pulse_start.setEnabled(jackRunning)
self.b_pulse_stop.setEnabled(False)
self.systray.setActionEnabled("pulse_start", jackRunning)
@@ -1519,6 +1529,7 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):
self.label_bridge_pulse.setText(self.tr("PulseAudio is started but not bridged"))
else:
jackRunning = bool(gDBus.jack and gDBus.jack.IsStarted())
+ self.b_pulse_update.setEnabled(False)
self.b_pulse_start.setEnabled(jackRunning)
self.b_pulse_stop.setEnabled(False)
self.systray.setActionEnabled("pulse_start", jackRunning)
@@ -1645,19 +1656,26 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):
global jackClientIdALSA
jackClientIdALSA = group_id
self.checkAlsaAudio()
+ elif group_name == "PulseAudio JACK Source":
+ global jackClientIdPulseCapture
+ jackClientIdPulseCapture = group_id
+ self.checkPulseAudio()
elif group_name == "PulseAudio JACK Sink":
- global jackClientIdPulse
- jackClientIdPulse = group_id
+ global jackClientIdPulsePlayback
+ jackClientIdPulsePlayback = group_id
self.checkPulseAudio()
@pyqtSlot(int)
def slot_DBusJackClientDisappearedCallback(self, group_id):
- global jackClientIdALSA, jackClientIdPulse
+ global jackClientIdALSA, jackClientIdPulseCapture, jackClientIdPulsePlayback
if group_id == jackClientIdALSA:
jackClientIdALSA = -1
self.checkAlsaAudio()
- elif group_id == jackClientIdPulse:
- jackClientIdPulse = -1
+ elif group_id == jackClientIdPulseCapture:
+ jackClientIdPulseCapture = -1
+ self.checkPulseAudio()
+ elif group_id == jackClientIdPulsePlayback:
+ jackClientIdPulsePlayback = -1
self.checkPulseAudio()
@pyqtSlot()
@@ -1812,10 +1830,10 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):
@pyqtSlot()
def slot_PulseAudioBridgeStart(self):
- if GlobalSettings.value("Pulse2JACK/PlaybackModeOnly", False, type=bool):
- os.system("cadence-pulse2jack -p")
- else:
- os.system("cadence-pulse2jack")
+ inputs = GlobalSettings.value("Pulse2JACK/CaptureChannels", 2, type=int)
+ outputs = GlobalSettings.value("Pulse2JACK/PlaybackChannels", 2, type=int)
+
+ os.system("cadence-pulse2jack -c %s -p %s" % (str(inputs), str(outputs)))
@pyqtSlot()
def slot_PulseAudioBridgeStop(self):