cpython/Lib/test/test_ossaudiodev.py

96 lines
2.2 KiB
Python
Raw Normal View History

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:
dsp = 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
dsp.bufsize()
dsp.obufcount()
dsp.obuffree()
dsp.getptr()
dsp.fileno()
# set parameters based on .au file headers
dsp.setparameters(fmt, nchannels, rate)
dsp.write(data)
dsp.flush()
dsp.close()
def test_errors():
dsp = ossaudiodev.open("w")
fmt = ossaudiodev.AFMT_U8
rate = 8000
nchannels = 1
try:
dsp.setparameters(fmt, nchannels, -1)
except ossaudiodev.error, msg:
print msg
try:
dsp.setparameters(fmt, nchannels, rate)
except ossaudiodev.error, msg:
print msg
try:
dsp.setparameters(fmt, 3, rate)
except ossaudiodev.error, msg:
print msg
try:
dsp.setparameters(177, nchannels, rate)
except ossaudiodev.error, msg:
print msg
try:
dsp.setparameters(ossaudiodev.AFMT_U16_LE, nchannels, rate)
except ossaudiodev.error, msg:
print msg
try:
dsp.setparameters(rate, nchannels, fmt)
except ossaudiodev.error, 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()