| from test import test_support | 
 | test_support.requires('audio') | 
 |  | 
 | from test.test_support import verbose, findfile, TestFailed, TestSkipped | 
 |  | 
 | import errno | 
 | import fcntl | 
 | import ossaudiodev | 
 | import os | 
 | import sys | 
 | import select | 
 | import sunaudio | 
 | import time | 
 | import audioop | 
 |  | 
 | SND_FORMAT_MULAW_8 = 1 | 
 |  | 
 | def read_sound_file(path): | 
 |     fp = open(path, 'rb') | 
 |     size, enc, rate, nchannels, extra = sunaudio.gethdr(fp) | 
 |     data = fp.read() | 
 |     fp.close() | 
 |  | 
 |     if enc != SND_FORMAT_MULAW_8: | 
 |         print "Expect .au file with 8-bit mu-law samples" | 
 |         return | 
 |  | 
 |     # Convert the data to 16-bit signed. | 
 |     data = audioop.ulaw2lin(data, 2) | 
 |     return (data, rate, 16, nchannels) | 
 |  | 
 |  | 
 | def play_sound_file(data, rate, ssize, nchannels): | 
 |     try: | 
 |         a = ossaudiodev.open('w') | 
 |     except IOError, msg: | 
 |         if msg[0] in (errno.EACCES, errno.ENODEV, errno.EBUSY): | 
 |             raise TestSkipped, msg | 
 |         raise TestFailed, msg | 
 |  | 
 |     # set the data format | 
 |     if sys.byteorder == 'little': | 
 |         fmt = ossaudiodev.AFMT_S16_LE | 
 |     else: | 
 |         fmt = ossaudiodev.AFMT_S16_BE | 
 |  | 
 |     # at least check that these methods can be invoked | 
 |     a.bufsize() | 
 |     a.obufcount() | 
 |     a.obuffree() | 
 |     a.getptr() | 
 |     a.fileno() | 
 |  | 
 |     # set parameters based on .au file headers | 
 |     a.setparameters(rate, 16, nchannels, fmt) | 
 |     a.write(data) | 
 |     a.flush() | 
 |     a.close() | 
 |  | 
 | def test_errors(): | 
 |     a = ossaudiodev.open("w") | 
 |     size = 8 | 
 |     fmt = ossaudiodev.AFMT_U8 | 
 |     rate = 8000 | 
 |     nchannels = 1 | 
 |     try: | 
 |         a.setparameters(-1, size, nchannels, fmt) | 
 |     except ValueError, msg: | 
 |         print msg | 
 |     try: | 
 |         a.setparameters(rate, -2, nchannels, fmt) | 
 |     except ValueError, msg: | 
 |         print msg | 
 |     try: | 
 |         a.setparameters(rate, size, 3, fmt) | 
 |     except ValueError, msg: | 
 |         print msg | 
 |     try: | 
 |         a.setparameters(rate, size, nchannels, 177) | 
 |     except ValueError, msg: | 
 |         print msg | 
 |     try: | 
 |         a.setparameters(rate, size, nchannels, ossaudiodev.AFMT_U16_LE) | 
 |     except ValueError, msg: | 
 |         print msg | 
 |     try: | 
 |         a.setparameters(rate, 16, nchannels, fmt) | 
 |     except ValueError, msg: | 
 |         print msg | 
 |  | 
 | def test(): | 
 |     (data, rate, ssize, nchannels) = read_sound_file(findfile('audiotest.au')) | 
 |     play_sound_file(data, rate, ssize, nchannels) | 
 |     test_errors() | 
 |  | 
 | test() |