test_linuxaudiodev.py 2.08 KB
Newer Older
1 2 3
from test import test_support
test_support.requires('audio')

4
from test.test_support import verbose, findfile, TestFailed, TestSkipped
Jeremy Hylton's avatar
Jeremy Hylton committed
5

6
import errno
Jeremy Hylton's avatar
Jeremy Hylton committed
7 8
import fcntl
import linuxaudiodev
9
import os
10
import sys
Jeremy Hylton's avatar
Jeremy Hylton committed
11 12 13
import select
import sunaudio
import time
14
import audioop
Jeremy Hylton's avatar
Jeremy Hylton committed
15 16

SND_FORMAT_MULAW_8 = 1
17 18 19

def play_sound_file(path):
    fp = open(path, 'r')
Jeremy Hylton's avatar
Jeremy Hylton committed
20
    size, enc, rate, nchannels, extra = sunaudio.gethdr(fp)
21 22
    data = fp.read()
    fp.close()
Jeremy Hylton's avatar
Jeremy Hylton committed
23 24 25 26 27

    if enc != SND_FORMAT_MULAW_8:
        print "Expect .au file with 8-bit mu-law samples"
        return

28 29 30
    try:
        a = linuxaudiodev.open('w')
    except linuxaudiodev.error, msg:
31
        if msg[0] in (errno.EACCES, errno.ENODEV, errno.EBUSY):
32
            raise TestSkipped, msg
33
        raise TestFailed, msg
Jeremy Hylton's avatar
Jeremy Hylton committed
34

35 36 37 38 39 40 41 42 43
    # 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

Jeremy Hylton's avatar
Jeremy Hylton committed
44 45 46 47 48 49 50 51
    # 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
52
    a.setparameters(rate, 16, nchannels, fmt)
Jeremy Hylton's avatar
Jeremy Hylton committed
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
    a.write(data)
    a.flush()
    a.close()

def test_errors():
    a = linuxaudiodev.open("w")
    size = 8
    fmt = linuxaudiodev.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, linuxaudiodev.AFMT_U16_LE)
    except ValueError, msg:
        print msg
    try:
        a.setparameters(rate, 16, nchannels, fmt)
    except ValueError, msg:
        print msg
87 88 89

def test():
    play_sound_file(findfile('audiotest.au'))
Jeremy Hylton's avatar
Jeremy Hylton committed
90
    test_errors()
91 92

test()