]>
Commit | Line | Data |
---|---|---|
4710c53d | 1 | from test import test_support\r |
2 | test_support.requires('audio')\r | |
3 | \r | |
4 | from test.test_support import findfile, run_unittest\r | |
5 | \r | |
6 | import errno\r | |
7 | import sys\r | |
8 | import audioop\r | |
9 | import unittest\r | |
10 | \r | |
11 | linuxaudiodev = test_support.import_module('linuxaudiodev', deprecated=True)\r | |
12 | sunaudio = test_support.import_module('sunaudio', deprecated=True)\r | |
13 | \r | |
14 | SND_FORMAT_MULAW_8 = 1\r | |
15 | \r | |
16 | class LinuxAudioDevTests(unittest.TestCase):\r | |
17 | \r | |
18 | def setUp(self):\r | |
19 | self.dev = linuxaudiodev.open('w')\r | |
20 | \r | |
21 | def tearDown(self):\r | |
22 | self.dev.close()\r | |
23 | \r | |
24 | def test_methods(self):\r | |
25 | # at least check that these methods can be invoked\r | |
26 | self.dev.bufsize()\r | |
27 | self.dev.obufcount()\r | |
28 | self.dev.obuffree()\r | |
29 | self.dev.getptr()\r | |
30 | self.dev.fileno()\r | |
31 | \r | |
32 | def test_play_sound_file(self):\r | |
33 | path = findfile("audiotest.au")\r | |
34 | fp = open(path, 'r')\r | |
35 | size, enc, rate, nchannels, extra = sunaudio.gethdr(fp)\r | |
36 | data = fp.read()\r | |
37 | fp.close()\r | |
38 | \r | |
39 | if enc != SND_FORMAT_MULAW_8:\r | |
40 | self.fail("Expect .au file with 8-bit mu-law samples")\r | |
41 | \r | |
42 | # convert the data to 16-bit signed\r | |
43 | data = audioop.ulaw2lin(data, 2)\r | |
44 | \r | |
45 | # set the data format\r | |
46 | if sys.byteorder == 'little':\r | |
47 | fmt = linuxaudiodev.AFMT_S16_LE\r | |
48 | else:\r | |
49 | fmt = linuxaudiodev.AFMT_S16_BE\r | |
50 | \r | |
51 | # set parameters based on .au file headers\r | |
52 | self.dev.setparameters(rate, 16, nchannels, fmt)\r | |
53 | self.dev.write(data)\r | |
54 | self.dev.flush()\r | |
55 | \r | |
56 | def test_errors(self):\r | |
57 | size = 8\r | |
58 | fmt = linuxaudiodev.AFMT_U8\r | |
59 | rate = 8000\r | |
60 | nchannels = 1\r | |
61 | try:\r | |
62 | self.dev.setparameters(-1, size, nchannels, fmt)\r | |
63 | except ValueError, err:\r | |
64 | self.assertEqual(err.args[0], "expected rate >= 0, not -1")\r | |
65 | try:\r | |
66 | self.dev.setparameters(rate, -2, nchannels, fmt)\r | |
67 | except ValueError, err:\r | |
68 | self.assertEqual(err.args[0], "expected sample size >= 0, not -2")\r | |
69 | try:\r | |
70 | self.dev.setparameters(rate, size, 3, fmt)\r | |
71 | except ValueError, err:\r | |
72 | self.assertEqual(err.args[0], "nchannels must be 1 or 2, not 3")\r | |
73 | try:\r | |
74 | self.dev.setparameters(rate, size, nchannels, 177)\r | |
75 | except ValueError, err:\r | |
76 | self.assertEqual(err.args[0], "unknown audio encoding: 177")\r | |
77 | try:\r | |
78 | self.dev.setparameters(rate, size, nchannels, linuxaudiodev.AFMT_U16_LE)\r | |
79 | except ValueError, err:\r | |
80 | self.assertEqual(err.args[0], "for linear unsigned 16-bit little-endian "\r | |
81 | "audio, expected sample size 16, not 8")\r | |
82 | try:\r | |
83 | self.dev.setparameters(rate, 16, nchannels, fmt)\r | |
84 | except ValueError, err:\r | |
85 | self.assertEqual(err.args[0], "for linear unsigned 8-bit audio, expected "\r | |
86 | "sample size 8, not 16")\r | |
87 | \r | |
88 | def test_main():\r | |
89 | try:\r | |
90 | dsp = linuxaudiodev.open('w')\r | |
91 | except linuxaudiodev.error, msg:\r | |
92 | if msg.args[0] in (errno.EACCES, errno.ENOENT, errno.ENODEV, errno.EBUSY):\r | |
93 | raise unittest.SkipTest(msg)\r | |
94 | raise\r | |
95 | dsp.close()\r | |
96 | run_unittest(LinuxAudioDevTests)\r | |
97 | \r | |
98 | if __name__ == '__main__':\r | |
99 | test_main()\r |