Update version number and release date.
[python/dscho.git] / Lib / test / test_ossaudiodev.py
blob51fdab2bcf898ce0de107394480af9f44b0fbbcb
1 from test import test_support
2 test_support.requires('audio')
4 from test.test_support import verbose, findfile, TestFailed, TestSkipped
6 import errno
7 import fcntl
8 import ossaudiodev
9 import os
10 import sys
11 import select
12 import sunaudio
13 import time
14 import audioop
16 SND_FORMAT_MULAW_8 = 1
18 def read_sound_file(path):
19 fp = open(path, 'rb')
20 size, enc, rate, nchannels, extra = sunaudio.gethdr(fp)
21 data = fp.read()
22 fp.close()
24 if enc != SND_FORMAT_MULAW_8:
25 print "Expect .au file with 8-bit mu-law samples"
26 return
28 # Convert the data to 16-bit signed.
29 data = audioop.ulaw2lin(data, 2)
30 return (data, rate, 16, nchannels)
33 def play_sound_file(data, rate, ssize, nchannels):
34 try:
35 a = ossaudiodev.open('w')
36 except IOError, msg:
37 if msg[0] in (errno.EACCES, errno.ENODEV, errno.EBUSY):
38 raise TestSkipped, msg
39 raise TestFailed, msg
41 # set the data format
42 if sys.byteorder == 'little':
43 fmt = ossaudiodev.AFMT_S16_LE
44 else:
45 fmt = ossaudiodev.AFMT_S16_BE
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()
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()
60 def 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
91 def test():
92 (data, rate, ssize, nchannels) = read_sound_file(findfile('audiotest.au'))
93 play_sound_file(data, rate, ssize, nchannels)
94 test_errors()
96 test()