from test import test_support | |
test_support.requires('audio') | |
from test.test_support import findfile, run_unittest | |
import errno | |
import sys | |
import audioop | |
import unittest | |
linuxaudiodev = test_support.import_module('linuxaudiodev', deprecated=True) | |
sunaudio = test_support.import_module('sunaudio', deprecated=True) | |
SND_FORMAT_MULAW_8 = 1 | |
class LinuxAudioDevTests(unittest.TestCase): | |
def setUp(self): | |
self.dev = linuxaudiodev.open('w') | |
def tearDown(self): | |
self.dev.close() | |
def test_methods(self): | |
# at least check that these methods can be invoked | |
self.dev.bufsize() | |
self.dev.obufcount() | |
self.dev.obuffree() | |
self.dev.getptr() | |
self.dev.fileno() | |
def test_play_sound_file(self): | |
path = findfile("audiotest.au") | |
fp = open(path, 'r') | |
size, enc, rate, nchannels, extra = sunaudio.gethdr(fp) | |
data = fp.read() | |
fp.close() | |
if enc != SND_FORMAT_MULAW_8: | |
self.fail("Expect .au file with 8-bit mu-law samples") | |
# convert the data to 16-bit signed | |
data = audioop.ulaw2lin(data, 2) | |
# set the data format | |
if sys.byteorder == 'little': | |
fmt = linuxaudiodev.AFMT_S16_LE | |
else: | |
fmt = linuxaudiodev.AFMT_S16_BE | |
# set parameters based on .au file headers | |
self.dev.setparameters(rate, 16, nchannels, fmt) | |
self.dev.write(data) | |
self.dev.flush() | |
def test_errors(self): | |
size = 8 | |
fmt = linuxaudiodev.AFMT_U8 | |
rate = 8000 | |
nchannels = 1 | |
try: | |
self.dev.setparameters(-1, size, nchannels, fmt) | |
except ValueError, err: | |
self.assertEqual(err.args[0], "expected rate >= 0, not -1") | |
try: | |
self.dev.setparameters(rate, -2, nchannels, fmt) | |
except ValueError, err: | |
self.assertEqual(err.args[0], "expected sample size >= 0, not -2") | |
try: | |
self.dev.setparameters(rate, size, 3, fmt) | |
except ValueError, err: | |
self.assertEqual(err.args[0], "nchannels must be 1 or 2, not 3") | |
try: | |
self.dev.setparameters(rate, size, nchannels, 177) | |
except ValueError, err: | |
self.assertEqual(err.args[0], "unknown audio encoding: 177") | |
try: | |
self.dev.setparameters(rate, size, nchannels, linuxaudiodev.AFMT_U16_LE) | |
except ValueError, err: | |
self.assertEqual(err.args[0], "for linear unsigned 16-bit little-endian " | |
"audio, expected sample size 16, not 8") | |
try: | |
self.dev.setparameters(rate, 16, nchannels, fmt) | |
except ValueError, err: | |
self.assertEqual(err.args[0], "for linear unsigned 8-bit audio, expected " | |
"sample size 8, not 16") | |
def test_main(): | |
try: | |
dsp = linuxaudiodev.open('w') | |
except linuxaudiodev.error, msg: | |
if msg.args[0] in (errno.EACCES, errno.ENOENT, errno.ENODEV, errno.EBUSY): | |
raise unittest.SkipTest(msg) | |
raise | |
dsp.close() | |
run_unittest(LinuxAudioDevTests) | |
if __name__ == '__main__': | |
test_main() |