blob: 340dc2d5e878e361d7e929187cf6f082012c99b2 [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:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000025 print("Expect .au file with 8-bit mu-law samples")
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000026 return
27
Fred Drake1f2d4642000-06-10 04:22:57 +000028 try:
29 a = linuxaudiodev.open('w')
Guido van Rossumb940e112007-01-10 16:19:56 +000030 except linuxaudiodev.error as msg:
Collin Wintere33761d2007-03-27 04:55:27 +000031 if msg.args[0] in (errno.EACCES, errno.ENOENT, 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)
Guido van Rossumb940e112007-01-10 16:19:56 +000065 except ValueError as msg:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000066 print(msg)
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000067 try:
68 a.setparameters(rate, -2, nchannels, fmt)
Guido van Rossumb940e112007-01-10 16:19:56 +000069 except ValueError as msg:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000070 print(msg)
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000071 try:
72 a.setparameters(rate, size, 3, fmt)
Guido van Rossumb940e112007-01-10 16:19:56 +000073 except ValueError as msg:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000074 print(msg)
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000075 try:
76 a.setparameters(rate, size, nchannels, 177)
Guido van Rossumb940e112007-01-10 16:19:56 +000077 except ValueError as msg:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000078 print(msg)
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000079 try:
80 a.setparameters(rate, size, nchannels, linuxaudiodev.AFMT_U16_LE)
Guido van Rossumb940e112007-01-10 16:19:56 +000081 except ValueError as msg:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000082 print(msg)
Jeremy Hyltone2b7c4d2000-10-06 19:39:55 +000083 try:
84 a.setparameters(rate, 16, nchannels, fmt)
Guido van Rossumb940e112007-01-10 16:19:56 +000085 except ValueError as msg:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000086 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()