blob: 51fdab2bcf898ce0de107394480af9f44b0fbbcb [file] [log] [blame]
Guido van Rossum4507ec72003-02-14 19:29:22 +00001from test import test_support
2test_support.requires('audio')
3
Greg Ward36dacfa2002-12-10 16:24:21 +00004from test.test_support import verbose, findfile, TestFailed, TestSkipped
5
6import errno
7import fcntl
8import ossaudiodev
9import os
10import sys
11import select
12import sunaudio
13import time
14import audioop
15
16SND_FORMAT_MULAW_8 = 1
17
Greg Ward55a87902002-12-10 16:27:35 +000018def read_sound_file(path):
Fred Drake7511bd92003-01-08 07:09:43 +000019 fp = open(path, 'rb')
Greg Ward36dacfa2002-12-10 16:24:21 +000020 size, enc, rate, nchannels, extra = sunaudio.gethdr(fp)
21 data = fp.read()
22 fp.close()
23
24 if enc != SND_FORMAT_MULAW_8:
25 print "Expect .au file with 8-bit mu-law samples"
26 return
27
Greg Ward55a87902002-12-10 16:27:35 +000028 # Convert the data to 16-bit signed.
29 data = audioop.ulaw2lin(data, 2)
30 return (data, rate, 16, nchannels)
31
32
33def play_sound_file(data, rate, ssize, nchannels):
Greg Ward36dacfa2002-12-10 16:24:21 +000034 try:
35 a = ossaudiodev.open('w')
Fred Drake7511bd92003-01-08 07:09:43 +000036 except IOError, msg:
Greg Ward36dacfa2002-12-10 16:24:21 +000037 if msg[0] in (errno.EACCES, errno.ENODEV, errno.EBUSY):
38 raise TestSkipped, msg
39 raise TestFailed, msg
40
Greg Ward36dacfa2002-12-10 16:24:21 +000041 # set the data format
42 if sys.byteorder == 'little':
43 fmt = ossaudiodev.AFMT_S16_LE
44 else:
45 fmt = ossaudiodev.AFMT_S16_BE
46
47 # at least check that these methods can be invoked
48 a.bufsize()
49 a.obufcount()
50 a.obuffree()
51 a.getptr()
52 a.fileno()
53
54 # set parameters based on .au file headers
55 a.setparameters(rate, 16, nchannels, fmt)
56 a.write(data)
57 a.flush()
58 a.close()
59
60def test_errors():
61 a = ossaudiodev.open("w")
62 size = 8
63 fmt = ossaudiodev.AFMT_U8
64 rate = 8000
65 nchannels = 1
66 try:
67 a.setparameters(-1, size, nchannels, fmt)
68 except ValueError, msg:
69 print msg
70 try:
71 a.setparameters(rate, -2, nchannels, fmt)
72 except ValueError, msg:
73 print msg
74 try:
75 a.setparameters(rate, size, 3, fmt)
76 except ValueError, msg:
77 print msg
78 try:
79 a.setparameters(rate, size, nchannels, 177)
80 except ValueError, msg:
81 print msg
82 try:
83 a.setparameters(rate, size, nchannels, ossaudiodev.AFMT_U16_LE)
84 except ValueError, msg:
85 print msg
86 try:
87 a.setparameters(rate, 16, nchannels, fmt)
88 except ValueError, msg:
89 print msg
90
91def test():
Greg Ward55a87902002-12-10 16:27:35 +000092 (data, rate, ssize, nchannels) = read_sound_file(findfile('audiotest.au'))
93 play_sound_file(data, rate, ssize, nchannels)
Greg Ward36dacfa2002-12-10 16:24:21 +000094 test_errors()
95
96test()