#!/usr/bin/python import sys import string import jack jack.attach("jc") def help(all_ports): print print "jc is a script to control jack connections" print "Choose (c)onnect (d)isconnect (s)ever (r)efresh. Anything else quits." print print "Connect and disconnect take the format:" print " " print print "where is an output port number and is an" print "input port number(the spaces count). For example:" print "c 0 2" print "will (probably) connect alsa_pcm:capture_1 to alsa_pcm:playback_1" print print "Sever disconnects all ports from a single output or input port" print print "The numbering is dynamic and can change, so hit (r)efresh" print "to get the current state of jack" print choose(all_ports) def ports(all_ports): out_ports=[] in_ports=[] for x in all_ports: if (jack.get_port_flags(x) & jack.IsOutput) == 2: o=str(all_ports.index(x))+' '+x out_ports.append(o) for y in (jack.get_connections(x)): z=' '+str(all_ports.index(y))+' '+y out_ports.append(z) elif (jack.get_port_flags(x) & jack.IsInput) == 1: i=str(all_ports.index(x))+' '+x in_ports.append(i) for u in (jack.get_connections(x)): v=' '+str(all_ports.index(u))+' '+u in_ports.append(v) lout=len(out_ports) lin=len(in_ports) extra=abs(lout-lin) print string.expandtabs('OUTPUTS\tINPUTS', 40) if lout >= lin: for m in range(lout-extra): p=out_ports[m]+'\t'+in_ports[m] print string.expandtabs(p, 40) for n in range((lout-extra), lout): print out_ports[n] elif lin > lout: for m in range (lin-extra): p=out_ports[m]+'\t'+in_ports[m] print string.expandtabs(p, 40) for n in range((lin-extra), lin): q='\t'+in_ports[n] print string.expandtabs(q, 40) return(all_ports) def connect(all_ports,a,b): jack.connect(all_ports[a], all_ports[b]) print "Connected", all_ports[a], "to", all_ports[b] start() def disconnect(all_ports,a,b): jack.disconnect(all_ports[a], all_ports[b]) print "Disconnected", all_ports[a], "from", all_ports[b] start() def sever(all_ports,a): if (jack.get_port_flags(all_ports[a]) & jack.IsOutput) == 2: for x in jack.get_connections(all_ports[a]): jack.disconnect(all_ports[a], x) elif (jack.get_port_flags(all_ports[a]) & jack.IsInput) == 1: for x in jack.get_connections(all_ports[a]): jack.disconnect(x, all_ports[a]) print "Severed all ties to", all_ports[a] start() def quit(): jack.detach("jc") print "Closed this jack connection. Buh-bye!" sys.exit(0) def start(): all_ports=jack.get_ports() ports(all_ports) choose(all_ports) def choose(all_ports): print choice=string.split(raw_input("Your wish? (h for help) ")) print if choice[0] == "c": if jack.get_ports() != all_ports: print "!!!Something Changed!!! Choose again." start() a,b=int(choice[1]),int(choice[2]) connect(all_ports,a,b) elif choice[0] == "d": if jack.get_ports() != all_ports: print "!!!Something Changed!!! Choose again." start() a,b=int(choice[1]),int(choice[2]) disconnect(all_ports,a,b) elif choice[0] == "s": if jack.get_ports() != all_ports: print "!!!Something Changed!!! Choose again." start() a=int(choice[1]) sever(all_ports,a) elif choice[0] == "r": start() elif choice[0] == "h": help(all_ports) quit() start()