23
23
]
24
24
25
25
JACK_DESIRED_CONNECTIONS = [
26
- ("pure_data:output_1" , "system:playback_9" ),
27
- ("pure_data:output_2" , "system:playback_10" ),
26
+ # Add your JACK audio connections here.
27
+ # Examples:
28
+ # ("pure_data:output_1", "system:playback_1"),
29
+ # ("pure_data:output_2", "Built-in Audio Analog Stereo:playback_FR"),
28
30
]
29
31
32
+ # Patchrrr creates Jack and ALSA clients because these are required to implement
33
+ # our functionality
30
34
CLIENT_NAME = "patchrrr"
31
35
32
36
# ---------------------------------------------------------------------------
@@ -741,11 +745,11 @@ def reconcile_connections(self):
741
745
# Unified Manager
742
746
class PatchrrrManager :
743
747
"""Unified ALSA MIDI + JACK audio connection manager."""
744
-
748
+
745
749
def __init__ (self , alsa_connections = None , jack_connections = None ):
746
750
"""
747
751
Initialize the manager with desired connections.
748
-
752
+
749
753
Args:
750
754
alsa_connections: List of (source, dest) tuples for ALSA MIDI
751
755
jack_connections: List of (source, dest) tuples for JACK audio
@@ -755,28 +759,28 @@ def __init__(self, alsa_connections=None, jack_connections=None):
755
759
self .running = True
756
760
self .alsa_mgr = None
757
761
self .jack_mgr = None
758
-
762
+
759
763
def signal_handler (self , sig , frame ):
760
764
"""Handle shutdown signals."""
761
765
print ("\n Signal received, shutting down..." )
762
766
self .running = False
763
-
767
+
764
768
def start (self ):
765
769
"""Start all managers and begin monitoring."""
766
770
signal .signal (signal .SIGINT , self .signal_handler )
767
771
signal .signal (signal .SIGTERM , self .signal_handler )
768
-
772
+
769
773
self .alsa_mgr = AlsaManager (self .alsa_connections )
770
774
self .jack_mgr = JackManager (self .jack_connections )
771
-
775
+
772
776
# Start ALSA in its own thread because it uses blocking reads
773
777
alsa_thread = threading .Thread (target = self .alsa_mgr .run , daemon = True )
774
778
alsa_thread .start ()
775
-
779
+
776
780
# Start JACK in its own thread for symmetry
777
781
jack_thread = threading .Thread (target = self .jack_mgr .run , daemon = True )
778
782
jack_thread .start ()
779
-
783
+
780
784
# Central dispatcher loop
781
785
try :
782
786
while self .running :
@@ -791,7 +795,7 @@ def start(self):
791
795
finally :
792
796
self .stop ()
793
797
print ("\n All managers shut down. Goodbye!" )
794
-
798
+
795
799
def stop (self ):
796
800
"""Stop all managers."""
797
801
if self .alsa_mgr :
0 commit comments