blob: cc44d8b50808e5cb1fc3caa297e3c339b3dea0da [file] [log] [blame]
Moshe Zadka040c17f2000-08-04 13:26:03 +00001from test_support import verbose, findfile, TestFailed, TestSkipped
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +00002
Moshe Zadka323a5082000-08-04 12:59:40 +00003import errno
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +00004import fcntl
5import linuxaudiodev
Fred Drake1f2d4642000-06-10 04:22:57 +00006import os
Guido van Rossum923ebe42000-10-08 00:20:20 +00007import sys
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +00008import select
9import sunaudio
10import time
Guido van Rossum923ebe42000-10-08 00:20:20 +000011import audioop
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000012
13SND_FORMAT_MULAW_8 = 1
Fred Drake1f2d4642000-06-10 04:22:57 +000014
15def play_sound_file(path):
16 fp = open(path, 'r')
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000017 size, enc, rate, nchannels, extra = sunaudio.gethdr(fp)
Fred Drake1f2d4642000-06-10 04:22:57 +000018 data = fp.read()
19 fp.close()
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000020
21 if enc != SND_FORMAT_MULAW_8:
22 print "Expect .au file with 8-bit mu-law samples"
23 return
24
Fred Drake1f2d4642000-06-10 04:22:57 +000025 try:
26 a = linuxaudiodev.open('w')
27 except linuxaudiodev.error, msg:
Anthony Baxter4ce6b352002-04-23 02:20:46 +000028 if msg[0] in (errno.EACCES, errno.ENODEV, errno.EBUSY):
Moshe Zadka92a69132000-08-04 15:25:58 +000029 raise TestSkipped, msg
Fred Drake1f2d4642000-06-10 04:22:57 +000030 raise TestFailed, msg
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000031
Guido van Rossum923ebe42000-10-08 00:20:20 +000032 # convert the data to 16-bit signed
33 data = audioop.ulaw2lin(data, 2)
34
35 # set the data format
36 if sys.byteorder == 'little':
37 fmt = linuxaudiodev.AFMT_S16_LE
38 else:
39 fmt = linuxaudiodev.AFMT_S16_BE
40
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000041 # at least check that these methods can be invoked
42 a.bufsize()
43 a.obufcount()
44 a.obuffree()
45 a.getptr()
46 a.fileno()
47
48 # set parameters based on .au file headers
Guido van Rossum923ebe42000-10-08 00:20:20 +000049 a.setparameters(rate, 16, nchannels, fmt)
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000050 a.write(data)
51 a.flush()
52 a.close()
53
54def test_errors():
55 a = linuxaudiodev.open("w")
56 size = 8
57 fmt = linuxaudiodev.AFMT_U8
58 rate = 8000
59 nchannels = 1
60 try:
61 a.setparameters(-1, size, nchannels, fmt)
62 except ValueError, msg:
63 print msg
64 try:
65 a.setparameters(rate, -2, nchannels, fmt)
66 except ValueError, msg:
67 print msg
68 try:
69 a.setparameters(rate, size, 3, fmt)
70 except ValueError, msg:
71 print msg
72 try:
73 a.setparameters(rate, size, nchannels, 177)
74 except ValueError, msg:
75 print msg
76 try:
77 a.setparameters(rate, size, nchannels, linuxaudiodev.AFMT_U16_LE)
78 except ValueError, msg:
79 print msg
80 try:
81 a.setparameters(rate, 16, nchannels, fmt)
82 except ValueError, msg:
83 print msg
Fred Drake1f2d4642000-06-10 04:22:57 +000084
85def test():
86 play_sound_file(findfile('audiotest.au'))
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000087 test_errors()
Fred Drake1f2d4642000-06-10 04:22:57 +000088
89test()