summaryrefslogtreecommitdiff
path: root/python/jackd.py
blob: 02d94135c28f77e1ea38d0bd8e523c827c624c5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/usr/bin/env python

import sys
from pyjackd.mygetopt import my_getopt
from pyjackd import jackctl
import readline
import time

import reserve_audio

argv = sys.argv[1:]



def server_parse_ags( srv, argv ):
    shortopts = ""
    longopts  = []
    shortmap  = {}
    driver = None

    for param in srv.params:
	p = srv.params[param]
	shortopts += p.id
	if p.param_type != 5:
	    shortopts += ":"
	    longopts.append (p.name + "=")
	else:
	    longopts.append (p.name)

	shortmap[p.id] = p

    while not driver:
	opts, argv = my_getopt( argv, shortopts+"d:" )
	if not opts:
	    break
	for opt,optarg in opts:
	    if opt == "-d":
		driver = srv.drivers[optarg]
	    elif opt.startswith("--"):
		pass
	    elif opt.startswith("-"):
		p = shortmap[opt[1]]
		if p.param_type == 5:
		    p.value = True
		else:
		    p.value = optarg

    return driver, argv

def driver_parse_args( drv, argv ):
    shortopts = ""
    longopts  = []
    shortmap  = {}

    for param in drv.params:
	p = drv.params[param]
	shortopts += p.id
	if p.param_type != 5:
	    shortopts += ":"
	    longopts.append (p.name + "=")
	else:
	    longopts.append (p.name)

	shortmap[p.id] = p

    while True:
	opts, argv = my_getopt( argv, shortopts+"d:" )
	if not opts:
	    break
	for opt,optarg in opts:
	    if opt.startswith("--"):
		pass
	    elif opt.startswith("-"):
		p = shortmap[opt[1]]
		if p.param_type == 5:
		    p.value = True
		else:
		    p.value = optarg

def acquire_dev(cardname):
    reserve_audio.reserve_dev(cardname,20,None)
    time.sleep(0.1)
    return True

def release_dev(cardname):
    reserve_audio.rr.unreserve()
    reserve_audio.rr = None

srv = jackctl.Server()
srv.acquire_card_cb = acquire_dev
srv.release_card_cb = release_dev

drv, argv = server_parse_ags( srv, argv )
driver_parse_args( drv, argv )

#for p in srv.params.values():
#    print p.name, "-> ", p.value
#
#print "----------------"
#print "driver ", drv.name
#
#for p in drv.params.values():
#    print p.name, "-> ", p.value

started = srv.start( drv )

if not started:
    print "failed to start with driver " + drv.name
    print "trying to start with dummy driver, switch to the right master yourself"

    started = srv.start( srv.drivers["dummy"] )

    if not started:
	sys.exit(20)

quit = False
while not quit:
    try:
	cmd  = raw_input("jack> ")
    except EOFError:
	break

    cmdv = cmd.split()

    if len(cmdv) == 0:
	continue

    if cmdv[0] == "quit":
	quit = True
    elif cmdv[0] == "switch":
	if len(cmdv) > 1:
	    drv = srv.drivers[cmdv[1]]
	    driver_parse_args( drv, cmdv[2:] )
	    srv.switch_master( drv )

print "\nshutting down"
srv.stop()