#!/usr/bin/python from subprocess import * import os, sys print "Welcome to jackctl. 'h' at the prompt gives help...." def jackctl_help(): print """jackctl help....hello!!! commands: a - enter audio select mode (default) m - enter midi select mode l - list (audio or MIDI, depends on mode) ports d - disconnect numbered ports - connect numbered ports q - quit f - grow fruit out of your computer""" listp = [] mode = 'a' #### start out in audio mode def pager(string): out = string.splitlines() for x in range(len(out)): sys.stdout.write("%s\n" % out[x]) if x % 22 == 21: sys.stdout.write("hit return for more") raw_input() def get_list(): global listp, mode output = '' nr_lines = 0 if mode == 'a': listp = Popen(['jack_lsp',''],stdout=PIPE).communicate()[0].split('\n')[:-1] listp_conn = Popen(['jack_lsp','-c'], stdout=PIPE).communicate()[0].split('\n')[:-1] for i in listp_conn: if (' ' in i) or ('\t' in i): output = output + " %s) %s\n" % (listp.index(i.lstrip()), i.lstrip()) else: output = output + "%s) %s\n" % (listp.index(i), i) nr_lines += 1 elif mode == 'm': listp = Popen(['aconnect', '-li'], stdout=PIPE).communicate()[0].split('\n')[:-1] output = output + "READABLE PORTS:\n" for i in listp: output = output + i + "\n" nr_lines += 1 listq = Popen(['aconnect', '-lo'], stdout=PIPE).communicate()[0].split('\n')[:-1] output = output + "WRITEABLE PORTS:\n" for i in listq: output = output + i + "\n" nr_lines += 1 nr_lines += 2 pager(output) def outtahere(): print "Goodbye!" exit() while 1: try: if mode == 'a': prompt = raw_input('jackctl(audio)--> ') elif mode == 'm': prompt = raw_input('jackctl(midi)--> ') if prompt == 'h': jackctl_help() elif prompt == 'l': get_list() elif prompt == 'a': mode = 'a' elif prompt == 'm': mode = 'm' elif prompt == 'q': break else: ports = prompt.split() if ports[0] == 'd': print "disconnecting specified ports" if mode == 'a': Popen(['jack_disconnect','%s' % listp[int(ports[1])], '%s' % listp[int(ports[2])]]).communicate() elif mode == 'm': Popen(['aconnect', '-d', '%s' % ports[1], '%s' % ports[2]]).communicate() else: if mode == 'a' and (int(ports[0]) < 4) and (int(ports[1]) < 4): print """you shouldn't try connect either connections that give either feedback or connections that are nonsensical""" else: print "connecting specified ports" if mode == 'a': Popen(['jack_connect','%s' % listp[int(ports[0])], '%s' % listp[int(ports[1])]]).communicate() elif mode == 'm': Popen(['aconnect', '%s' % ports[0], '%s' % ports[1]]).communicate() except EOFError: print "\nGoodbye!" exit() except: print "nonsense!!!" pass outtahere()