-
Notifications
You must be signed in to change notification settings - Fork 70
/
Copy pathjackd.py
executable file
·137 lines (109 loc) · 2.59 KB
/
jackd.py
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()