blob: 1a11e8f03862cb7085f7656ea0ae2bbe6484cfe8 [file] [log] [blame]
Guido van Rossum4507ec72003-02-14 19:29:22 +00001from test import test_support
2test_support.requires('audio')
3
Barry Warsaw04f357c2002-07-23 19:04:11 +00004from test.test_support import verbose, findfile, TestFailed, TestSkipped
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +00005
Moshe Zadka323a5082000-08-04 12:59:40 +00006import errno
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +00007import fcntl
8import linuxaudiodev
Fred Drake1f2d4642000-06-10 04:22:57 +00009import os
Guido van Rossum923ebe42000-10-08 00:20:20 +000010import sys
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000011import select
12import sunaudio
13import time
Guido van Rossum923ebe42000-10-08 00:20:20 +000014import audioop
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000015
16SND_FORMAT_MULAW_8 = 1
Fred Drake1f2d4642000-06-10 04:22:57 +000017
18def play_sound_file(path):
19 fp = open(path, 'r')
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000020 size, enc, rate, nchannels, extra = sunaudio.gethdr(fp)
Fred Drake1f2d4642000-06-10 04:22:57 +000021 data = fp.read()
22 fp.close()
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000023
24 if enc != SND_FORMAT_MULAW_8:
25 print "Expect .au file with 8-bit mu-law samples"
26 return
27
Fred Drake1f2d4642000-06-10 04:22:57 +000028 try:
29 a = linuxaudiodev.open('w')
30 except linuxaudiodev.error, msg:
Anthony Baxter4ce6b352002-04-23 02:20:46 +000031 if msg[0] in (errno.EACCES, errno.ENODEV, errno.EBUSY):
Moshe Zadka92a69132000-08-04 15:25:58 +000032 raise TestSkipped, msg
Fred Drake1f2d4642000-06-10 04:22:57 +000033 raise TestFailed, msg
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000034
Guido van Rossum923ebe42000-10-08 00:20:20 +000035 # convert the data to 16-bit signed
36 data = audioop.ulaw2lin(data, 2)
37
38 # set the data format
39 if sys.byteorder == 'little':
40 fmt = linuxaudiodev.AFMT_S16_LE
41 else:
42 fmt = linuxaudiodev.AFMT_S16_BE
43
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000044 # 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
Guido van Rossum923ebe42000-10-08 00:20:20 +000052 a.setparameters(rate, 16, nchannels, fmt)
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000053 a.write(data)
54 a.flush()
55 a.close()
56
57def test_errors():
58 a = linuxaudiodev.open("w")
59 size = 8
60 fmt = linuxaudiodev.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, linuxaudiodev.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
Fred Drake1f2d4642000-06-10 04:22:57 +000087
88def test():
89 play_sound_file(findfile('audiotest.au'))
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000090 test_errors()
Fred Drake1f2d4642000-06-10 04:22:57 +000091
92test()