blob: 6bc5923aa596fd0d6a151f153ad233e276d203d3 [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:
Greg Ward080c1102003-05-29 00:23:17 +000035 dsp = 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
Greg Ward080c1102003-05-29 00:23:17 +000048 dsp.bufsize()
49 dsp.obufcount()
50 dsp.obuffree()
51 dsp.getptr()
52 dsp.fileno()
Greg Ward36dacfa2002-12-10 16:24:21 +000053
54 # set parameters based on .au file headers
Greg Ward080c1102003-05-29 00:23:17 +000055 dsp.setparameters(fmt, nchannels, rate)
56 dsp.write(data)
57 dsp.flush()
58 dsp.close()
Greg Ward36dacfa2002-12-10 16:24:21 +000059
60def test_errors():
Greg Ward080c1102003-05-29 00:23:17 +000061 dsp = ossaudiodev.open("w")
Greg Ward36dacfa2002-12-10 16:24:21 +000062 fmt = ossaudiodev.AFMT_U8
63 rate = 8000
64 nchannels = 1
65 try:
Greg Ward080c1102003-05-29 00:23:17 +000066 dsp.setparameters(fmt, nchannels, -1)
67 except ossaudiodev.error, msg:
Greg Ward36dacfa2002-12-10 16:24:21 +000068 print msg
69 try:
Greg Ward080c1102003-05-29 00:23:17 +000070 dsp.setparameters(fmt, nchannels, rate)
71 except ossaudiodev.error, msg:
Greg Ward36dacfa2002-12-10 16:24:21 +000072 print msg
73 try:
Greg Ward080c1102003-05-29 00:23:17 +000074 dsp.setparameters(fmt, 3, rate)
75 except ossaudiodev.error, msg:
Greg Ward36dacfa2002-12-10 16:24:21 +000076 print msg
77 try:
Greg Ward080c1102003-05-29 00:23:17 +000078 dsp.setparameters(177, nchannels, rate)
79 except ossaudiodev.error, msg:
Greg Ward36dacfa2002-12-10 16:24:21 +000080 print msg
81 try:
Greg Ward080c1102003-05-29 00:23:17 +000082 dsp.setparameters(ossaudiodev.AFMT_U16_LE, nchannels, rate)
83 except ossaudiodev.error, msg:
Greg Ward36dacfa2002-12-10 16:24:21 +000084 print msg
85 try:
Greg Ward080c1102003-05-29 00:23:17 +000086 dsp.setparameters(rate, nchannels, fmt)
87 except ossaudiodev.error, msg:
Greg Ward36dacfa2002-12-10 16:24:21 +000088 print msg
89
90def test():
Greg Ward55a87902002-12-10 16:27:35 +000091 (data, rate, ssize, nchannels) = read_sound_file(findfile('audiotest.au'))
92 play_sound_file(data, rate, ssize, nchannels)
Greg Ward36dacfa2002-12-10 16:24:21 +000093 test_errors()
94
95test()