Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e77ec17

Browse files
committed
Rewrite, simplification of command line option parsing. Many GUI
fixes. Input sources are mutually exclusive.
1 parent 4a1cdd7 commit e77ec17

1 file changed

Lines changed: 50 additions & 124 deletions

File tree

Tools/audiopy/audiopy

Lines changed: 50 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,14 @@ class MainWindow:
6161
#
6262
# where does input come from?
6363
frame = Frame(root, bd=1, relief=RAISED)
64-
frame.grid(row=0, column=0)
64+
frame.grid(row=0, column=0, sticky='NSEW')
6565
label = Label(frame, text='Input From:')
6666
label.grid(row=0, column=0, sticky=E)
67-
self.__micvar = IntVar()
68-
btn = Checkbutton(frame,
67+
self.__inputvar = IntVar()
68+
btn = Radiobutton(frame,
6969
text='Microphone',
70-
variable=self.__micvar,
71-
onvalue=MICROPHONE,
70+
variable=self.__inputvar,
71+
value=MICROPHONE,
7272
command=self.__pushtodev,
7373
underline=0)
7474
btn.grid(row=0, column=1, sticky=W)
@@ -78,11 +78,10 @@ class MainWindow:
7878
btn.configure(state=DISABLED)
7979
buttons.append(btn)
8080
##
81-
self.__lineinvar = IntVar()
82-
btn = Checkbutton(frame,
81+
btn = Radiobutton(frame,
8382
text='Line In',
84-
variable=self.__lineinvar,
85-
onvalue=LINE_IN,
83+
variable=self.__inputvar,
84+
value=LINE_IN,
8685
command=self.__pushtodev,
8786
underline=5)
8887
btn.grid(row=1, column=1, sticky=W)
@@ -92,11 +91,10 @@ class MainWindow:
9291
btn.configure(state=DISABLED)
9392
buttons.append(btn)
9493
##
95-
self.__cdvar = IntVar()
96-
btn = Checkbutton(frame,
94+
btn = Radiobutton(frame,
9795
text='CD',
98-
variable=self.__cdvar,
99-
onvalue=CD,
96+
variable=self.__inputvar,
97+
value=CD,
10098
command=self.__pushtodev,
10199
underline=0)
102100
btn.grid(row=2, column=1, sticky=W)
@@ -108,7 +106,7 @@ class MainWindow:
108106
#
109107
# where does output go to?
110108
frame = Frame(root, bd=1, relief=RAISED)
111-
frame.grid(row=1, column=0)
109+
frame.grid(row=1, column=0, sticky='NSEW')
112110
label = Label(frame, text='Output To:')
113111
label.grid(row=0, column=0, sticky=E)
114112
self.__spkvar = IntVar()
@@ -181,10 +179,8 @@ class MainWindow:
181179
except AttributeError:
182180
pass
183181
else:
184-
import struct
185182
import fcntl
186183
import signal
187-
import FCNTL
188184
import STROPTS
189185
# set up the signal handler
190186
signal.signal(signal.SIGPOLL, self.__update)
@@ -207,21 +203,19 @@ class MainWindow:
207203
# underlying module does not support the SIGPOLL notification
208204
# interface.
209205
info = self.__devctl.getinfo()
206+
# input
207+
self.__inputvar.set(info.i_port)
208+
# output
210209
self.__spkvar.set(info.o_port & SPEAKER)
211210
self.__headvar.set(info.o_port & HEADPHONE)
212211
self.__linevar.set(info.o_port & LINE_OUT)
213-
self.__micvar.set(info.i_port & MICROPHONE)
214-
self.__lineinvar.set(info.i_port & LINE_IN)
215-
self.__cdvar.set(info.i_port & CD)
216212

217213
def __pushtodev(self, event=None):
218214
info = self.__devctl.getinfo()
219215
info.o_port = self.__spkvar.get() + \
220216
self.__headvar.get() + \
221217
self.__linevar.get()
222-
info.i_port = self.__micvar.get() + \
223-
self.__lineinvar.get() + \
224-
self.__cdvar.get()
218+
info.i_port = self.__inputvar.get()
225219
self.__devctl.setinfo(info)
226220

227221
def __getset(self, var, onvalue):
@@ -232,15 +226,13 @@ class MainWindow:
232226
self.__pushtodev()
233227

234228
def __mic(self, event=None):
235-
self.__getset(self.__micvar, MICROPHONE)
229+
self.__getset(self.__inputvar, MICROPHONE)
236230

237231
def __linein(self, event=None):
238-
self.__getset(self.__lineinvar, LINE_IN)
232+
self.__getset(self.__inputvar, LINE_IN)
239233

240234
def __cd(self, event=None):
241-
print 'pre:', self.__cdvar.get()
242-
self.__getset(self.__cdvar, CD)
243-
print 'post:', self.__cdvar.get()
235+
self.__getset(self.__inputvar, CD)
244236

245237
def __speaker(self, event=None):
246238
self.__getset(self.__spkvar, SPEAKER)
@@ -286,113 +278,47 @@ def main():
286278
('--speaker', '-s', 1, SPEAKER),
287279
('--lineout', '-o', 1, LINE_OUT),
288280
)
289-
values = []
290281
info = device.getinfo()
291282
# first get the existing values
292-
for long, short, io, mask in options:
293-
if io == 0:
294-
flags = info.i_port
295-
else:
296-
flags = info.o_port
297-
values.append(flags & mask)
298-
299-
sval = None
300-
hval = None
301-
lval = None
302283
for arg in sys.argv[1:]:
303284
if arg in ('-h', '--help'):
304285
usage(code=0)
305-
# SPEAKER
306-
elif arg in ('-s', '--speaker'):
307-
sval = -1
308-
elif arg[:3] == '-s=':
309-
try:
310-
sval = int(arg[3:])
311-
except ValueError:
312-
pass
313-
if sval <> 0 and sval <> 1:
314-
usage('Invalid option: ' + arg)
315-
elif arg[:10] == '--speaker=':
316-
try:
317-
sval = int(arg[10:])
318-
except ValueError:
319-
pass
320-
if sval <> 0 and sval <> 1:
321-
usage('Invalid option: ' + arg)
322-
# HEADPHONES
323-
elif arg in ('-p', '--headphones'):
324-
hval = -1
325-
elif arg[:3] == '-p=':
326-
try:
327-
hval = int(arg[3:])
328-
except ValueError:
329-
pass
330-
if hval <> 0 and hval <> 1:
331-
usage('Invalid option: ' + arg)
332-
elif arg[:13] == '--headphones=':
333-
try:
334-
hval = int(arg[130:])
335-
except ValueError:
336-
pass
337-
if hval <> 0 and hval <> 1:
338-
usage('Invalid option: ' + arg)
339-
# LINEOUT
340-
elif arg in ('-l', '--lineout'):
341-
lval = -1
342-
elif arg[:3] == '-l=':
343-
try:
344-
lval = int(arg[3:])
345-
except ValueError:
346-
pass
347-
if lval <> 0 and lval <> 1:
348-
usage('Invalid option: ' + arg)
349-
elif arg[:10] == '--lineout=':
286+
# does not return
287+
for long, short, io, mask in options:
288+
if arg in (long, short):
289+
# toggle the option
290+
if io == 0:
291+
info.i_port = info.i_port ^ mask
292+
else:
293+
info.o_port = info.o_port ^ mask
294+
break
295+
val = None
350296
try:
351-
lval = int(arg[10:])
297+
if arg[:len(long)+1] == long+'=':
298+
val = int(arg[len(long)+1:])
299+
elif arg[:len(short)+1] == short+'=':
300+
val = int(arg[len(short)+1:])
352301
except ValueError:
353-
pass
354-
if lval <> 0 and lval <> 1:
355-
usage('Invalid option: ' + arg)
356-
else:
357-
usage('Invalid option: ' + arg)
358-
# now set the values
359-
try:
360-
devctl = sunaudiodev.open('control')
361-
info = devctl.getinfo()
362-
if sval is not None:
363-
if sval == -1:
364-
if info.o_port & SPEAKER:
365-
sval = 0
302+
usage(msg='Invalid option: ' + arg)
303+
# does not return
304+
if val == 0:
305+
if io == 0:
306+
info.i_port = info.i_port & ~mask
366307
else:
367-
sval = SPEAKER
368-
else:
369-
sval = sval * SPEAKER
370-
else:
371-
sval = info.o_port & SPEAKER
372-
if hval is not None:
373-
if hval == -1:
374-
if info.o_port & HEADPHONE:
375-
hval = 0
308+
info.o_port = info.o_port & ~mask
309+
break
310+
elif val == 1:
311+
if io == 0:
312+
info.i_port = info.i_port | mask
376313
else:
377-
hval = HEADPHONE
378-
else:
379-
hval = hval * HEADPHONE
314+
info.o_port = info.o_port | mask
315+
break
316+
# else keep trying next option
380317
else:
381-
hval = info.o_port & HEADPHONE
382-
if lval is not None:
383-
if lval == -1:
384-
if info.o_port & LINE_OUT:
385-
lval = 0
386-
else:
387-
lval = LINE_OUT
388-
else:
389-
lval = lval * LINE_OUT
390-
else:
391-
lval = info.o_port & LINE_OUT
392-
info.o_port = sval + hval + lval
393-
devctl.setinfo(info)
394-
finally:
395-
devctl.close()
318+
usage(msg='Invalid option: ' + arg)
319+
# now set the values
320+
device.setinfo(info)
321+
device.close()
396322

397323

398324

0 commit comments

Comments
 (0)