blob: 371d1a752fb4e750fe7487cccdc00b34edb46110 [file] [log] [blame]
Greg Ward36dacfa2002-12-10 16:24:21 +00001from test.test_support import verbose, findfile, TestFailed, TestSkipped
2
3import errno
4import fcntl
5import ossaudiodev
6import os
7import sys
8import select
9import sunaudio
10import time
11import audioop
12
13SND_FORMAT_MULAW_8 = 1
14
Greg Ward55a87902002-12-10 16:27:35 +000015def read_sound_file(path):
Greg Ward36dacfa2002-12-10 16:24:21 +000016 fp = open(path, 'r')
17 size, enc, rate, nchannels, extra = sunaudio.gethdr(fp)
18 data = fp.read()
19 fp.close()
20
21 if enc != SND_FORMAT_MULAW_8:
22 print "Expect .au file with 8-bit mu-law samples"
23 return
24
Greg Ward55a87902002-12-10 16:27:35 +000025 # Convert the data to 16-bit signed.
26 data = audioop.ulaw2lin(data, 2)
27 return (data, rate, 16, nchannels)
28
29
30def play_sound_file(data, rate, ssize, nchannels):
Greg Ward36dacfa2002-12-10 16:24:21 +000031 try:
32 a = ossaudiodev.open('w')
33 except ossaudiodev.error, msg:
34 if msg[0] in (errno.EACCES, errno.ENODEV, errno.EBUSY):
35 raise TestSkipped, msg
36 raise TestFailed, msg
37
Greg Ward36dacfa2002-12-10 16:24:21 +000038 # set the data format
39 if sys.byteorder == 'little':
40 fmt = ossaudiodev.AFMT_S16_LE
41 else:
42 fmt = ossaudiodev.AFMT_S16_BE
43
44 # at least check that these methods can be invoked
45 a.bufsize()
46 a.obufcount()
47 a.obuffree()
48 a.getptr()
49 a.fileno()
50
51 # set parameters based on .au file headers
52 a.setparameters(rate, 16, nchannels, fmt)
53 a.write(data)
54 a.flush()
55 a.close()
56
57def test_errors():
58 a = ossaudiodev.open("w")
59 size = 8
60 fmt = ossaudiodev.AFMT_U8
61 rate = 8000
62 nchannels = 1
63 try:
64 a.setparameters(-1, size, nchannels, fmt)
65 except ValueError, msg:
66 print msg
67 try:
68 a.setparameters(rate, -2, nchannels, fmt)
69 except ValueError, msg:
70 print msg
71 try:
72 a.setparameters(rate, size, 3, fmt)
73 except ValueError, msg:
74 print msg
75 try:
76 a.setparameters(rate, size, nchannels, 177)
77 except ValueError, msg:
78 print msg
79 try:
80 a.setparameters(rate, size, nchannels, ossaudiodev.AFMT_U16_LE)
81 except ValueError, msg:
82 print msg
83 try:
84 a.setparameters(rate, 16, nchannels, fmt)
85 except ValueError, msg:
86 print msg
87
88def test():
Greg Ward55a87902002-12-10 16:27:35 +000089 (data, rate, ssize, nchannels) = read_sound_file(findfile('audiotest.au'))
90 play_sound_file(data, rate, ssize, nchannels)
Greg Ward36dacfa2002-12-10 16:24:21 +000091 test_errors()
92
93test()