amine@164
|
1 """
|
amine@164
|
2 @author: Amine Sehili <amine.sehili@gmail.com>
|
amine@164
|
3 """
|
amine@164
|
4 from array import array
|
amine@164
|
5 import unittest
|
amine@164
|
6 from genty import genty, genty_dataset
|
amine@164
|
7 from auditok.io import (
|
amine@164
|
8 AudioParameterError,
|
amine@164
|
9 BufferAudioSource,
|
amine@164
|
10 RawAudioSource,
|
amine@164
|
11 WaveAudioSource,
|
amine@164
|
12 )
|
amine@321
|
13 from auditok.signal import FORMAT
|
amine@240
|
14 from test_util import PURE_TONE_DICT, _sample_generator
|
amine@164
|
15
|
amine@164
|
16
|
amine@164
|
17 def audio_source_read_all_gen(audio_source, size=None):
|
amine@164
|
18 if size is None:
|
amine@164
|
19 size = int(audio_source.sr * 0.1) # 100ms
|
amine@164
|
20 while True:
|
amine@164
|
21 data = audio_source.read(size)
|
amine@164
|
22 if data is None:
|
amine@164
|
23 break
|
amine@164
|
24 yield data
|
amine@164
|
25
|
amine@164
|
26
|
amine@164
|
27 @genty
|
amine@164
|
28 class TestAudioSource(unittest.TestCase):
|
amine@164
|
29
|
amine@164
|
30 # TODO when use_channel is None, return samples from all channels
|
amine@164
|
31
|
amine@164
|
32 @genty_dataset(
|
amine@240
|
33 mono=("mono_400Hz", (400,)),
|
amine@240
|
34 multichannel=("3channel_400-800-1600Hz", (400, 800, 1600)),
|
amine@164
|
35 )
|
amine@240
|
36 def test_BufferAudioSource_read_all(self, file_suffix, frequencies):
|
amine@238
|
37 file = "tests/data/test_16KHZ_{}.raw".format(file_suffix)
|
amine@238
|
38 with open(file, "rb") as fp:
|
amine@238
|
39 expected = fp.read()
|
amine@240
|
40 channels = len(frequencies)
|
amine@240
|
41 audio_source = BufferAudioSource(expected, 16000, 2, channels)
|
amine@240
|
42 audio_source.open()
|
amine@240
|
43 data = audio_source.read(None)
|
amine@240
|
44 self.assertEqual(data, expected)
|
amine@240
|
45 audio_source.rewind()
|
amine@240
|
46 data = audio_source.read(-10)
|
amine@240
|
47 self.assertEqual(data, expected)
|
amine@240
|
48 audio_source.close()
|
amine@238
|
49
|
amine@238
|
50 @genty_dataset(
|
amine@240
|
51 mono=("mono_400Hz", (400,)),
|
amine@240
|
52 multichannel=("3channel_400-800-1600Hz", (400, 800, 1600)),
|
amine@238
|
53 )
|
amine@240
|
54 def test_RawAudioSource(self, file_suffix, frequencies):
|
amine@164
|
55 file = "tests/data/test_16KHZ_{}.raw".format(file_suffix)
|
amine@240
|
56 channels = len(frequencies)
|
amine@240
|
57 audio_source = RawAudioSource(file, 16000, 2, channels)
|
amine@164
|
58 audio_source.open()
|
amine@240
|
59 data_read_all = b"".join(audio_source_read_all_gen(audio_source))
|
amine@164
|
60 audio_source.close()
|
amine@240
|
61 mono_channels = [PURE_TONE_DICT[freq] for freq in frequencies]
|
amine@321
|
62 fmt = FORMAT[audio_source.sample_width]
|
amine@313
|
63 expected = array(fmt, _sample_generator(*mono_channels)).tobytes()
|
amine@240
|
64
|
amine@240
|
65 self.assertEqual(data_read_all, expected)
|
amine@164
|
66
|
amine@238
|
67 # assert read all data with None
|
amine@240
|
68 audio_source = RawAudioSource(file, 16000, 2, channels)
|
amine@238
|
69 audio_source.open()
|
amine@238
|
70 data_read_all = audio_source.read(None)
|
amine@238
|
71 audio_source.close()
|
amine@238
|
72 self.assertEqual(data_read_all, expected)
|
amine@238
|
73
|
amine@238
|
74 # assert read all data with a negative size
|
amine@240
|
75 audio_source = RawAudioSource(file, 16000, 2, channels)
|
amine@238
|
76 audio_source.open()
|
amine@238
|
77 data_read_all = audio_source.read(-10)
|
amine@238
|
78 audio_source.close()
|
amine@238
|
79 self.assertEqual(data_read_all, expected)
|
amine@238
|
80
|
amine@240
|
81 @genty_dataset(
|
amine@240
|
82 mono=("mono_400Hz", (400,)),
|
amine@240
|
83 multichannel=("3channel_400-800-1600Hz", (400, 800, 1600)),
|
amine@240
|
84 )
|
amine@240
|
85 def test_WaveAudioSource(self, file_suffix, frequencies):
|
amine@240
|
86 file = "tests/data/test_16KHZ_{}.wav".format(file_suffix)
|
amine@240
|
87 audio_source = WaveAudioSource(file)
|
amine@164
|
88 audio_source.open()
|
amine@164
|
89 data = b"".join(audio_source_read_all_gen(audio_source))
|
amine@164
|
90 audio_source.close()
|
amine@240
|
91 mono_channels = [PURE_TONE_DICT[freq] for freq in frequencies]
|
amine@321
|
92 fmt = FORMAT[audio_source.sample_width]
|
amine@313
|
93 expected = array(fmt, _sample_generator(*mono_channels)).tobytes()
|
amine@164
|
94
|
amine@164
|
95 self.assertEqual(data, expected)
|
amine@164
|
96
|
amine@238
|
97 # assert read all data with None
|
amine@240
|
98 audio_source = WaveAudioSource(file)
|
amine@238
|
99 audio_source.open()
|
amine@238
|
100 data_read_all = audio_source.read(None)
|
amine@238
|
101 audio_source.close()
|
amine@238
|
102 self.assertEqual(data_read_all, expected)
|
amine@238
|
103
|
amine@238
|
104 # assert read all data with a negative size
|
amine@240
|
105 audio_source = WaveAudioSource(file)
|
amine@238
|
106 audio_source.open()
|
amine@238
|
107 data_read_all = audio_source.read(-10)
|
amine@238
|
108 audio_source.close()
|
amine@238
|
109 self.assertEqual(data_read_all, expected)
|
amine@238
|
110
|
amine@164
|
111
|
amine@166
|
112 @genty
|
amine@164
|
113 class TestBufferAudioSource_SR10_SW1_CH1(unittest.TestCase):
|
amine@164
|
114 def setUp(self):
|
amine@164
|
115 self.data = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"
|
amine@164
|
116 self.audio_source = BufferAudioSource(
|
amine@321
|
117 data=self.data, sampling_rate=10, sample_width=1, channels=1
|
amine@164
|
118 )
|
amine@164
|
119 self.audio_source.open()
|
amine@164
|
120
|
amine@164
|
121 def tearDown(self):
|
amine@164
|
122 self.audio_source.close()
|
amine@164
|
123
|
amine@164
|
124 def test_sr10_sw1_ch1_read_1(self):
|
amine@164
|
125 block = self.audio_source.read(1)
|
amine@164
|
126 exp = b"A"
|
amine@164
|
127 self.assertEqual(
|
amine@164
|
128 block,
|
amine@164
|
129 exp,
|
amine@164
|
130 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
131 )
|
amine@164
|
132
|
amine@164
|
133 def test_sr10_sw1_ch1_read_6(self):
|
amine@164
|
134 block = self.audio_source.read(6)
|
amine@164
|
135 exp = b"ABCDEF"
|
amine@164
|
136 self.assertEqual(
|
amine@164
|
137 block,
|
amine@164
|
138 exp,
|
amine@164
|
139 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
140 )
|
amine@164
|
141
|
amine@164
|
142 def test_sr10_sw1_ch1_read_multiple(self):
|
amine@164
|
143 block = self.audio_source.read(1)
|
amine@164
|
144 exp = b"A"
|
amine@164
|
145 self.assertEqual(
|
amine@164
|
146 block,
|
amine@164
|
147 exp,
|
amine@164
|
148 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
149 )
|
amine@164
|
150
|
amine@164
|
151 block = self.audio_source.read(6)
|
amine@164
|
152 exp = b"BCDEFG"
|
amine@164
|
153 self.assertEqual(
|
amine@164
|
154 block,
|
amine@164
|
155 exp,
|
amine@164
|
156 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
157 )
|
amine@164
|
158
|
amine@164
|
159 block = self.audio_source.read(13)
|
amine@164
|
160 exp = b"HIJKLMNOPQRST"
|
amine@164
|
161 self.assertEqual(
|
amine@164
|
162 block,
|
amine@164
|
163 exp,
|
amine@164
|
164 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
165 )
|
amine@164
|
166
|
amine@164
|
167 block = self.audio_source.read(9999)
|
amine@164
|
168 exp = b"UVWXYZ012345"
|
amine@164
|
169 self.assertEqual(
|
amine@164
|
170 block,
|
amine@164
|
171 exp,
|
amine@164
|
172 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
173 )
|
amine@164
|
174
|
amine@164
|
175 def test_sr10_sw1_ch1_read_all(self):
|
amine@164
|
176 block = self.audio_source.read(9999)
|
amine@164
|
177 self.assertEqual(
|
amine@164
|
178 block,
|
amine@164
|
179 self.data,
|
amine@164
|
180 msg="wrong block, expected: {}, found: {} ".format(
|
amine@164
|
181 self.data, block
|
amine@164
|
182 ),
|
amine@164
|
183 )
|
amine@164
|
184
|
amine@164
|
185 block = self.audio_source.read(1)
|
amine@164
|
186 self.assertEqual(
|
amine@164
|
187 block,
|
amine@164
|
188 None,
|
amine@164
|
189 msg="wrong block, expected: {}, found: {} ".format(None, block),
|
amine@164
|
190 )
|
amine@164
|
191
|
amine@335
|
192 def test_sr10_sw1_ch1_sampling_rate(self):
|
amine@335
|
193 srate = self.audio_source.sampling_rate
|
amine@164
|
194 self.assertEqual(
|
amine@164
|
195 srate,
|
amine@164
|
196 10,
|
amine@164
|
197 msg="wrong sampling rate, expected: 10, found: {0} ".format(srate),
|
amine@164
|
198 )
|
amine@164
|
199
|
amine@335
|
200 def test_sr10_sw1_ch1_sample_width(self):
|
amine@335
|
201 swidth = self.audio_source.sample_width
|
amine@164
|
202 self.assertEqual(
|
amine@164
|
203 swidth,
|
amine@164
|
204 1,
|
amine@164
|
205 msg="wrong sample width, expected: 1, found: {0} ".format(swidth),
|
amine@164
|
206 )
|
amine@164
|
207
|
amine@335
|
208 def test_sr10_sw1_ch1_channels(self):
|
amine@335
|
209 channels = self.audio_source.channels
|
amine@164
|
210 self.assertEqual(
|
amine@164
|
211 channels,
|
amine@164
|
212 1,
|
amine@164
|
213 msg="wrong number of channels, expected: 1, found: {0} ".format(
|
amine@164
|
214 channels
|
amine@164
|
215 ),
|
amine@164
|
216 )
|
amine@164
|
217
|
amine@166
|
218 @genty_dataset(
|
amine@166
|
219 empty=([], 0, 0, 0),
|
amine@166
|
220 zero=([0], 0, 0, 0),
|
amine@166
|
221 five=([5], 5, 0.5, 500),
|
amine@166
|
222 multiple=([5, 20], 25, 2.5, 2500),
|
amine@166
|
223 )
|
amine@166
|
224 def test_position(
|
amine@166
|
225 self, block_sizes, expected_sample, expected_second, expected_ms
|
amine@166
|
226 ):
|
amine@166
|
227 for block_size in block_sizes:
|
amine@166
|
228 self.audio_source.read(block_size)
|
amine@166
|
229 position = self.audio_source.position
|
amine@166
|
230 self.assertEqual(
|
amine@166
|
231 position,
|
amine@166
|
232 expected_sample,
|
amine@166
|
233 msg="wrong stream position, expected: {}, found: {}".format(
|
amine@166
|
234 expected_sample, position
|
amine@166
|
235 ),
|
amine@166
|
236 )
|
amine@166
|
237
|
amine@166
|
238 position_s = self.audio_source.position_s
|
amine@166
|
239 self.assertEqual(
|
amine@166
|
240 position_s,
|
amine@166
|
241 expected_second,
|
amine@166
|
242 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@166
|
243 expected_second, position_s
|
amine@166
|
244 ),
|
amine@166
|
245 )
|
amine@166
|
246
|
amine@166
|
247 position_ms = self.audio_source.position_ms
|
amine@166
|
248 self.assertEqual(
|
amine@166
|
249 position_ms,
|
amine@166
|
250 expected_ms,
|
amine@166
|
251 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@166
|
252 expected_ms, position_ms
|
amine@166
|
253 ),
|
amine@166
|
254 )
|
amine@166
|
255
|
amine@166
|
256 @genty_dataset(
|
amine@166
|
257 zero=(0, 0, 0, 0),
|
amine@166
|
258 one=(1, 1, 0.1, 100),
|
amine@166
|
259 ten=(10, 10, 1, 1000),
|
amine@166
|
260 negative_1=(-1, 31, 3.1, 3100),
|
amine@166
|
261 negative_2=(-7, 25, 2.5, 2500),
|
amine@166
|
262 )
|
amine@166
|
263 def test_position_setter(
|
amine@166
|
264 self, position, expected_sample, expected_second, expected_ms
|
amine@166
|
265 ):
|
amine@166
|
266 self.audio_source.position = position
|
amine@166
|
267
|
amine@166
|
268 position = self.audio_source.position
|
amine@166
|
269 self.assertEqual(
|
amine@166
|
270 position,
|
amine@166
|
271 expected_sample,
|
amine@166
|
272 msg="wrong stream position, expected: {}, found: {}".format(
|
amine@166
|
273 expected_sample, position
|
amine@166
|
274 ),
|
amine@166
|
275 )
|
amine@166
|
276
|
amine@166
|
277 position_s = self.audio_source.position_s
|
amine@166
|
278 self.assertEqual(
|
amine@166
|
279 position_s,
|
amine@166
|
280 expected_second,
|
amine@166
|
281 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@166
|
282 expected_second, position_s
|
amine@166
|
283 ),
|
amine@166
|
284 )
|
amine@166
|
285
|
amine@166
|
286 position_ms = self.audio_source.position_ms
|
amine@166
|
287 self.assertEqual(
|
amine@166
|
288 position_ms,
|
amine@166
|
289 expected_ms,
|
amine@166
|
290 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@166
|
291 expected_ms, position_ms
|
amine@166
|
292 ),
|
amine@166
|
293 )
|
amine@166
|
294
|
amine@166
|
295 @genty_dataset(
|
amine@166
|
296 zero=(0, 0, 0, 0),
|
amine@166
|
297 one=(0.1, 1, 0.1, 100),
|
amine@166
|
298 ten=(1, 10, 1, 1000),
|
amine@166
|
299 negative_1=(-0.1, 31, 3.1, 3100),
|
amine@166
|
300 negative_2=(-0.7, 25, 2.5, 2500),
|
amine@166
|
301 )
|
amine@166
|
302 def test_position_s_setter(
|
amine@166
|
303 self, position_s, expected_sample, expected_second, expected_ms
|
amine@166
|
304 ):
|
amine@166
|
305 self.audio_source.position_s = position_s
|
amine@166
|
306
|
amine@166
|
307 position = self.audio_source.position
|
amine@166
|
308 self.assertEqual(
|
amine@166
|
309 position,
|
amine@166
|
310 expected_sample,
|
amine@166
|
311 msg="wrong stream position, expected: {}, found: {}".format(
|
amine@166
|
312 expected_sample, position
|
amine@166
|
313 ),
|
amine@166
|
314 )
|
amine@166
|
315
|
amine@166
|
316 position_s = self.audio_source.position_s
|
amine@166
|
317 self.assertEqual(
|
amine@166
|
318 position_s,
|
amine@166
|
319 expected_second,
|
amine@166
|
320 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@166
|
321 expected_second, position_s
|
amine@166
|
322 ),
|
amine@166
|
323 )
|
amine@166
|
324
|
amine@166
|
325 position_ms = self.audio_source.position_ms
|
amine@166
|
326 self.assertEqual(
|
amine@166
|
327 position_ms,
|
amine@166
|
328 expected_ms,
|
amine@166
|
329 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@166
|
330 expected_ms, position_ms
|
amine@166
|
331 ),
|
amine@166
|
332 )
|
amine@166
|
333
|
amine@166
|
334 @genty_dataset(
|
amine@166
|
335 zero=(0, 0, 0, 0),
|
amine@166
|
336 one=(100, 1, 0.1, 100),
|
amine@166
|
337 ten=(1000, 10, 1, 1000),
|
amine@166
|
338 negative_1=(-100, 31, 3.1, 3100),
|
amine@166
|
339 negative_2=(-700, 25, 2.5, 2500),
|
amine@166
|
340 )
|
amine@166
|
341 def test_position_ms_setter(
|
amine@166
|
342 self, position_ms, expected_sample, expected_second, expected_ms
|
amine@166
|
343 ):
|
amine@166
|
344 self.audio_source.position_ms = position_ms
|
amine@166
|
345
|
amine@166
|
346 position = self.audio_source.position
|
amine@166
|
347 self.assertEqual(
|
amine@166
|
348 position,
|
amine@166
|
349 expected_sample,
|
amine@166
|
350 msg="wrong stream position, expected: {}, found: {}".format(
|
amine@166
|
351 expected_sample, position
|
amine@166
|
352 ),
|
amine@166
|
353 )
|
amine@166
|
354
|
amine@166
|
355 position_s = self.audio_source.position_s
|
amine@166
|
356 self.assertEqual(
|
amine@166
|
357 position_s,
|
amine@166
|
358 expected_second,
|
amine@166
|
359 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@166
|
360 expected_second, position_s
|
amine@166
|
361 ),
|
amine@166
|
362 )
|
amine@166
|
363
|
amine@166
|
364 position_ms = self.audio_source.position_ms
|
amine@166
|
365 self.assertEqual(
|
amine@166
|
366 position_ms,
|
amine@166
|
367 expected_ms,
|
amine@166
|
368 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@166
|
369 expected_ms, position_ms
|
amine@166
|
370 ),
|
amine@166
|
371 )
|
amine@166
|
372
|
amine@166
|
373 @genty_dataset(positive=((100,)), negative=(-100,))
|
amine@166
|
374 def test_position_setter_out_of_range(self, position):
|
amine@166
|
375 with self.assertRaises(IndexError):
|
amine@166
|
376 self.audio_source.position = position
|
amine@166
|
377
|
amine@166
|
378 @genty_dataset(positive=((100,)), negative=(-100,))
|
amine@166
|
379 def test_position_s_setter_out_of_range(self, position_s):
|
amine@166
|
380 with self.assertRaises(IndexError):
|
amine@166
|
381 self.audio_source.position_s = position_s
|
amine@166
|
382
|
amine@166
|
383 @genty_dataset(positive=((10000,)), negative=(-10000,))
|
amine@166
|
384 def test_position_ms_setter_out_of_range(self, position_ms):
|
amine@166
|
385 with self.assertRaises(IndexError):
|
amine@166
|
386 self.audio_source.position_ms = position_ms
|
amine@166
|
387
|
amine@330
|
388 def test_sr10_sw1_ch1_initial_position_s_0(self):
|
amine@216
|
389 tp = self.audio_source.position_s
|
amine@164
|
390 self.assertEqual(
|
amine@164
|
391 tp,
|
amine@164
|
392 0.0,
|
amine@164
|
393 msg="wrong time position, expected: 0.0, found: {0} ".format(tp),
|
amine@164
|
394 )
|
amine@164
|
395
|
amine@330
|
396 def test_sr10_sw1_ch1_position_s_1_after_read(self):
|
amine@330
|
397 srate = self.audio_source.sampling_rate
|
amine@164
|
398 # read one second
|
amine@164
|
399 self.audio_source.read(srate)
|
amine@216
|
400 tp = self.audio_source.position_s
|
amine@164
|
401 self.assertEqual(
|
amine@164
|
402 tp,
|
amine@164
|
403 1.0,
|
amine@164
|
404 msg="wrong time position, expected: 1.0, found: {0} ".format(tp),
|
amine@164
|
405 )
|
amine@164
|
406
|
amine@216
|
407 def test_sr10_sw1_ch1_position_s_2_5(self):
|
amine@164
|
408 # read 2.5 seconds
|
amine@164
|
409 self.audio_source.read(25)
|
amine@216
|
410 tp = self.audio_source.position_s
|
amine@164
|
411 self.assertEqual(
|
amine@164
|
412 tp,
|
amine@164
|
413 2.5,
|
amine@164
|
414 msg="wrong time position, expected: 2.5, found: {0} ".format(tp),
|
amine@164
|
415 )
|
amine@164
|
416
|
amine@216
|
417 def test_sr10_sw1_ch1_position_s_0(self):
|
amine@164
|
418 self.audio_source.read(10)
|
amine@216
|
419 self.audio_source.position_s = 0
|
amine@216
|
420 tp = self.audio_source.position_s
|
amine@164
|
421 self.assertEqual(
|
amine@164
|
422 tp,
|
amine@164
|
423 0.0,
|
amine@164
|
424 msg="wrong time position, expected: 0.0, found: {0} ".format(tp),
|
amine@164
|
425 )
|
amine@164
|
426
|
amine@216
|
427 def test_sr10_sw1_ch1_position_s_1(self):
|
amine@216
|
428 self.audio_source.position_s = 1
|
amine@216
|
429 tp = self.audio_source.position_s
|
amine@164
|
430 self.assertEqual(
|
amine@164
|
431 tp,
|
amine@164
|
432 1.0,
|
amine@164
|
433 msg="wrong time position, expected: 1.0, found: {0} ".format(tp),
|
amine@164
|
434 )
|
amine@164
|
435
|
amine@164
|
436 def test_sr10_sw1_ch1_rewind(self):
|
amine@164
|
437 self.audio_source.read(10)
|
amine@164
|
438 self.audio_source.rewind()
|
amine@169
|
439 tp = self.audio_source.position
|
amine@164
|
440 self.assertEqual(
|
amine@164
|
441 tp, 0, msg="wrong position, expected: 0.0, found: {0} ".format(tp)
|
amine@164
|
442 )
|
amine@164
|
443
|
amine@164
|
444 def test_sr10_sw1_ch1_read_closed(self):
|
amine@164
|
445 self.audio_source.close()
|
amine@164
|
446 with self.assertRaises(Exception):
|
amine@164
|
447 self.audio_source.read(1)
|
amine@164
|
448
|
amine@209
|
449
|
amine@169
|
450 @genty
|
amine@164
|
451 class TestBufferAudioSource_SR16_SW2_CH1(unittest.TestCase):
|
amine@164
|
452 def setUp(self):
|
amine@164
|
453 self.data = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"
|
amine@164
|
454 self.audio_source = BufferAudioSource(
|
amine@321
|
455 data=self.data, sampling_rate=16, sample_width=2, channels=1
|
amine@164
|
456 )
|
amine@164
|
457 self.audio_source.open()
|
amine@164
|
458
|
amine@164
|
459 def tearDown(self):
|
amine@164
|
460 self.audio_source.close()
|
amine@164
|
461
|
amine@164
|
462 def test_sr16_sw2_ch1_read_1(self):
|
amine@164
|
463 block = self.audio_source.read(1)
|
amine@164
|
464 exp = b"AB"
|
amine@164
|
465 self.assertEqual(
|
amine@164
|
466 block,
|
amine@164
|
467 exp,
|
amine@164
|
468 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
469 )
|
amine@164
|
470
|
amine@164
|
471 def test_sr16_sw2_ch1_read_6(self):
|
amine@164
|
472 block = self.audio_source.read(6)
|
amine@164
|
473 exp = b"ABCDEFGHIJKL"
|
amine@164
|
474 self.assertEqual(
|
amine@164
|
475 block,
|
amine@164
|
476 exp,
|
amine@164
|
477 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
478 )
|
amine@164
|
479
|
amine@164
|
480 def test_sr16_sw2_ch1_read_multiple(self):
|
amine@164
|
481 block = self.audio_source.read(1)
|
amine@164
|
482 exp = b"AB"
|
amine@164
|
483 self.assertEqual(
|
amine@164
|
484 block,
|
amine@164
|
485 exp,
|
amine@164
|
486 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
487 )
|
amine@164
|
488
|
amine@164
|
489 block = self.audio_source.read(6)
|
amine@164
|
490 exp = b"CDEFGHIJKLMN"
|
amine@164
|
491 self.assertEqual(
|
amine@164
|
492 block,
|
amine@164
|
493 exp,
|
amine@164
|
494 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
495 )
|
amine@164
|
496
|
amine@164
|
497 block = self.audio_source.read(5)
|
amine@164
|
498 exp = b"OPQRSTUVWX"
|
amine@164
|
499 self.assertEqual(
|
amine@164
|
500 block,
|
amine@164
|
501 exp,
|
amine@164
|
502 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
503 )
|
amine@164
|
504
|
amine@164
|
505 block = self.audio_source.read(9999)
|
amine@164
|
506 exp = b"YZ012345"
|
amine@164
|
507 self.assertEqual(
|
amine@164
|
508 block,
|
amine@164
|
509 exp,
|
amine@164
|
510 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
511 )
|
amine@164
|
512
|
amine@164
|
513 def test_sr16_sw2_ch1_read_all(self):
|
amine@164
|
514 block = self.audio_source.read(9999)
|
amine@164
|
515 self.assertEqual(
|
amine@164
|
516 block,
|
amine@164
|
517 self.data,
|
amine@164
|
518 msg="wrong block, expected: {0}, found: {1} ".format(
|
amine@164
|
519 self.data, block
|
amine@164
|
520 ),
|
amine@164
|
521 )
|
amine@164
|
522
|
amine@164
|
523 block = self.audio_source.read(1)
|
amine@164
|
524 self.assertEqual(
|
amine@164
|
525 block,
|
amine@164
|
526 None,
|
amine@164
|
527 msg="wrong block, expected: {0}, found: {1} ".format(None, block),
|
amine@164
|
528 )
|
amine@164
|
529
|
amine@335
|
530 def test_sr16_sw2_ch1_sampling_rate(self):
|
amine@335
|
531 srate = self.audio_source.sampling_rate
|
amine@164
|
532 self.assertEqual(
|
amine@164
|
533 srate,
|
amine@164
|
534 16,
|
amine@164
|
535 msg="wrong sampling rate, expected: 10, found: {0} ".format(srate),
|
amine@164
|
536 )
|
amine@164
|
537
|
amine@335
|
538 def test_sr16_sw2_ch1_sample_width(self):
|
amine@335
|
539 swidth = self.audio_source.sample_width
|
amine@164
|
540 self.assertEqual(
|
amine@164
|
541 swidth,
|
amine@164
|
542 2,
|
amine@164
|
543 msg="wrong sample width, expected: 1, found: {0} ".format(swidth),
|
amine@164
|
544 )
|
amine@164
|
545
|
amine@335
|
546 def test_sr16_sw2_ch1_channels(self):
|
amine@164
|
547
|
amine@335
|
548 channels = self.audio_source.channels
|
amine@164
|
549 self.assertEqual(
|
amine@164
|
550 channels,
|
amine@164
|
551 1,
|
amine@164
|
552 msg="wrong number of channels, expected: 1, found: {0} ".format(
|
amine@164
|
553 channels
|
amine@164
|
554 ),
|
amine@164
|
555 )
|
amine@164
|
556
|
amine@169
|
557 @genty_dataset(
|
amine@169
|
558 empty=([], 0, 0, 0),
|
amine@169
|
559 zero=([0], 0, 0, 0),
|
amine@209
|
560 two=([2], 2, 2 / 16, int(2000 / 16)),
|
amine@209
|
561 eleven=([11], 11, 11 / 16, int(11 * 1000 / 16)),
|
amine@169
|
562 multiple=([4, 8], 12, 0.75, 750),
|
amine@169
|
563 )
|
amine@169
|
564 def test_position(
|
amine@169
|
565 self, block_sizes, expected_sample, expected_second, expected_ms
|
amine@169
|
566 ):
|
amine@169
|
567 for block_size in block_sizes:
|
amine@169
|
568 self.audio_source.read(block_size)
|
amine@169
|
569 position = self.audio_source.position
|
amine@169
|
570 self.assertEqual(
|
amine@169
|
571 position,
|
amine@169
|
572 expected_sample,
|
amine@169
|
573 msg="wrong stream position, expected: {}, found: {}".format(
|
amine@169
|
574 expected_sample, position
|
amine@169
|
575 ),
|
amine@169
|
576 )
|
amine@169
|
577
|
amine@169
|
578 position_s = self.audio_source.position_s
|
amine@169
|
579 self.assertEqual(
|
amine@169
|
580 position_s,
|
amine@169
|
581 expected_second,
|
amine@169
|
582 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
583 expected_second, position_s
|
amine@169
|
584 ),
|
amine@169
|
585 )
|
amine@169
|
586
|
amine@169
|
587 position_ms = self.audio_source.position_ms
|
amine@169
|
588 self.assertEqual(
|
amine@169
|
589 position_ms,
|
amine@169
|
590 expected_ms,
|
amine@169
|
591 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
592 expected_ms, position_ms
|
amine@169
|
593 ),
|
amine@169
|
594 )
|
amine@169
|
595
|
amine@216
|
596 def test_sr16_sw2_ch1_read_position_0(self):
|
amine@169
|
597 self.audio_source.read(10)
|
amine@169
|
598 self.audio_source.position = 0
|
amine@169
|
599 pos = self.audio_source.position
|
amine@164
|
600 self.assertEqual(
|
amine@164
|
601 pos, 0, msg="wrong position, expected: 0, found: {0} ".format(pos)
|
amine@164
|
602 )
|
amine@164
|
603
|
amine@169
|
604 @genty_dataset(
|
amine@169
|
605 zero=(0, 0, 0, 0),
|
amine@209
|
606 one=(1, 1, 1 / 16, int(1000 / 16)),
|
amine@209
|
607 ten=(10, 10, 10 / 16, int(10000 / 16)),
|
amine@209
|
608 negative_1=(-1, 15, 15 / 16, int(15000 / 16)),
|
amine@209
|
609 negative_2=(-7, 9, 9 / 16, int(9000 / 16)),
|
amine@169
|
610 )
|
amine@169
|
611 def test_position_setter(
|
amine@169
|
612 self, position, expected_sample, expected_second, expected_ms
|
amine@169
|
613 ):
|
amine@169
|
614 self.audio_source.position = position
|
amine@169
|
615
|
amine@169
|
616 position = self.audio_source.position
|
amine@164
|
617 self.assertEqual(
|
amine@169
|
618 position,
|
amine@169
|
619 expected_sample,
|
amine@169
|
620 msg="wrong stream position, expected: {}, found: {}".format(
|
amine@169
|
621 expected_sample, position
|
amine@169
|
622 ),
|
amine@164
|
623 )
|
amine@164
|
624
|
amine@169
|
625 position_s = self.audio_source.position_s
|
amine@164
|
626 self.assertEqual(
|
amine@169
|
627 position_s,
|
amine@169
|
628 expected_second,
|
amine@169
|
629 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
630 expected_second, position_s
|
amine@169
|
631 ),
|
amine@164
|
632 )
|
amine@164
|
633
|
amine@169
|
634 position_ms = self.audio_source.position_ms
|
amine@164
|
635 self.assertEqual(
|
amine@169
|
636 position_ms,
|
amine@169
|
637 expected_ms,
|
amine@169
|
638 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
639 expected_ms, position_ms
|
amine@169
|
640 ),
|
amine@164
|
641 )
|
amine@164
|
642
|
amine@169
|
643 @genty_dataset(
|
amine@169
|
644 zero=(0, 0, 0, 0),
|
amine@209
|
645 one=(0.1, 1, 1 / 16, int(1000 / 16)),
|
amine@209
|
646 two=(1 / 8, 2, 1 / 8, int(1 / 8 * 1000)),
|
amine@209
|
647 twelve=(0.75, 12, 0.75, 750),
|
amine@209
|
648 negative_1=(-0.1, 15, 15 / 16, int(15000 / 16)),
|
amine@209
|
649 negative_2=(-0.7, 5, 5 / 16, int(5000 / 16)),
|
amine@169
|
650 )
|
amine@169
|
651 def test_position_s_setter(
|
amine@169
|
652 self, position_s, expected_sample, expected_second, expected_ms
|
amine@169
|
653 ):
|
amine@169
|
654 self.audio_source.position_s = position_s
|
amine@169
|
655
|
amine@169
|
656 position = self.audio_source.position
|
amine@164
|
657 self.assertEqual(
|
amine@169
|
658 position,
|
amine@169
|
659 expected_sample,
|
amine@169
|
660 msg="wrong stream position, expected: {}, found: {}".format(
|
amine@169
|
661 expected_sample, position
|
amine@169
|
662 ),
|
amine@164
|
663 )
|
amine@164
|
664
|
amine@169
|
665 position_s = self.audio_source.position_s
|
amine@164
|
666 self.assertEqual(
|
amine@169
|
667 position_s,
|
amine@169
|
668 expected_second,
|
amine@169
|
669 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
670 expected_second, position_s
|
amine@169
|
671 ),
|
amine@164
|
672 )
|
amine@164
|
673
|
amine@169
|
674 position_ms = self.audio_source.position_ms
|
amine@164
|
675 self.assertEqual(
|
amine@169
|
676 position_ms,
|
amine@169
|
677 expected_ms,
|
amine@169
|
678 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
679 expected_ms, position_ms
|
amine@169
|
680 ),
|
amine@164
|
681 )
|
amine@164
|
682
|
amine@169
|
683 @genty_dataset(
|
amine@169
|
684 zero=(0, 0, 0, 0),
|
amine@209
|
685 one=(100, 1, 1 / 16, int(1000 / 16)),
|
amine@169
|
686 ten=(1000, 16, 1, 1000),
|
amine@209
|
687 negative_1=(-100, 15, 15 / 16, int(15 * 1000 / 16)),
|
amine@169
|
688 negative_2=(-500, 8, 0.5, 500),
|
amine@209
|
689 negative_3=(-700, 5, 5 / 16, int(5 * 1000 / 16)),
|
amine@169
|
690 )
|
amine@169
|
691 def test_position_ms_setter(
|
amine@169
|
692 self, position_ms, expected_sample, expected_second, expected_ms
|
amine@169
|
693 ):
|
amine@169
|
694 self.audio_source.position_ms = position_ms
|
amine@169
|
695
|
amine@169
|
696 position = self.audio_source.position
|
amine@164
|
697 self.assertEqual(
|
amine@169
|
698 position,
|
amine@169
|
699 expected_sample,
|
amine@169
|
700 msg="wrong stream position, expected: {}, found: {}".format(
|
amine@169
|
701 expected_sample, position
|
amine@169
|
702 ),
|
amine@164
|
703 )
|
amine@164
|
704
|
amine@169
|
705 position_s = self.audio_source.position_s
|
amine@164
|
706 self.assertEqual(
|
amine@169
|
707 position_s,
|
amine@169
|
708 expected_second,
|
amine@169
|
709 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
710 expected_second, position_s
|
amine@169
|
711 ),
|
amine@164
|
712 )
|
amine@164
|
713
|
amine@169
|
714 position_ms = self.audio_source.position_ms
|
amine@164
|
715 self.assertEqual(
|
amine@169
|
716 position_ms,
|
amine@169
|
717 expected_ms,
|
amine@169
|
718 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
719 expected_ms, position_ms
|
amine@169
|
720 ),
|
amine@164
|
721 )
|
amine@164
|
722
|
amine@164
|
723 def test_sr16_sw2_ch1_rewind(self):
|
amine@164
|
724 self.audio_source.read(10)
|
amine@164
|
725 self.audio_source.rewind()
|
amine@216
|
726 tp = self.audio_source.position
|
amine@164
|
727 self.assertEqual(
|
amine@164
|
728 tp, 0, msg="wrong position, expected: 0.0, found: {0} ".format(tp)
|
amine@164
|
729 )
|
amine@164
|
730
|
amine@164
|
731
|
amine@164
|
732 class TestBufferAudioSource_SR11_SW4_CH1(unittest.TestCase):
|
amine@164
|
733 def setUp(self):
|
amine@164
|
734 self.data = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefgh"
|
amine@164
|
735 self.audio_source = BufferAudioSource(
|
amine@321
|
736 data=self.data, sampling_rate=11, sample_width=4, channels=1
|
amine@164
|
737 )
|
amine@164
|
738 self.audio_source.open()
|
amine@164
|
739
|
amine@164
|
740 def tearDown(self):
|
amine@164
|
741 self.audio_source.close()
|
amine@164
|
742
|
amine@164
|
743 def test_sr11_sw4_ch1_read_1(self):
|
amine@164
|
744 block = self.audio_source.read(1)
|
amine@164
|
745 exp = b"ABCD"
|
amine@164
|
746 self.assertEqual(
|
amine@164
|
747 block,
|
amine@164
|
748 exp,
|
amine@164
|
749 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
750 )
|
amine@164
|
751
|
amine@164
|
752 def test_sr11_sw4_ch1_read_6(self):
|
amine@164
|
753 block = self.audio_source.read(6)
|
amine@164
|
754 exp = b"ABCDEFGHIJKLMNOPQRSTUVWX"
|
amine@164
|
755 self.assertEqual(
|
amine@164
|
756 block,
|
amine@164
|
757 exp,
|
amine@164
|
758 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
759 )
|
amine@164
|
760
|
amine@164
|
761 def test_sr11_sw4_ch1_read_multiple(self):
|
amine@164
|
762 block = self.audio_source.read(1)
|
amine@164
|
763 exp = b"ABCD"
|
amine@164
|
764 self.assertEqual(
|
amine@164
|
765 block,
|
amine@164
|
766 exp,
|
amine@164
|
767 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
768 )
|
amine@164
|
769
|
amine@164
|
770 block = self.audio_source.read(6)
|
amine@164
|
771 exp = b"EFGHIJKLMNOPQRSTUVWXYZ01"
|
amine@164
|
772 self.assertEqual(
|
amine@164
|
773 block,
|
amine@164
|
774 exp,
|
amine@164
|
775 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
776 )
|
amine@164
|
777
|
amine@164
|
778 block = self.audio_source.read(3)
|
amine@164
|
779 exp = b"23456789abcd"
|
amine@164
|
780 self.assertEqual(
|
amine@164
|
781 block,
|
amine@164
|
782 exp,
|
amine@164
|
783 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
784 )
|
amine@164
|
785
|
amine@164
|
786 block = self.audio_source.read(9999)
|
amine@164
|
787 exp = b"efgh"
|
amine@164
|
788 self.assertEqual(
|
amine@164
|
789 block,
|
amine@164
|
790 exp,
|
amine@164
|
791 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
792 )
|
amine@164
|
793
|
amine@164
|
794 def test_sr11_sw4_ch1_read_all(self):
|
amine@164
|
795 block = self.audio_source.read(9999)
|
amine@164
|
796 self.assertEqual(
|
amine@164
|
797 block,
|
amine@164
|
798 self.data,
|
amine@164
|
799 msg="wrong block, expected: {0}, found: {1} ".format(
|
amine@164
|
800 self.data, block
|
amine@164
|
801 ),
|
amine@164
|
802 )
|
amine@164
|
803
|
amine@164
|
804 block = self.audio_source.read(1)
|
amine@164
|
805 self.assertEqual(
|
amine@164
|
806 block,
|
amine@164
|
807 None,
|
amine@164
|
808 msg="wrong block, expected: {0}, found: {1} ".format(None, block),
|
amine@164
|
809 )
|
amine@164
|
810
|
amine@335
|
811 def test_sr11_sw4_ch1_sampling_rate(self):
|
amine@335
|
812 srate = self.audio_source.sampling_rate
|
amine@164
|
813 self.assertEqual(
|
amine@164
|
814 srate,
|
amine@164
|
815 11,
|
amine@164
|
816 msg="wrong sampling rate, expected: 10, found: {0} ".format(srate),
|
amine@164
|
817 )
|
amine@164
|
818
|
amine@335
|
819 def test_sr11_sw4_ch1_sample_width(self):
|
amine@335
|
820 swidth = self.audio_source.sample_width
|
amine@164
|
821 self.assertEqual(
|
amine@164
|
822 swidth,
|
amine@164
|
823 4,
|
amine@164
|
824 msg="wrong sample width, expected: 1, found: {0} ".format(swidth),
|
amine@164
|
825 )
|
amine@164
|
826
|
amine@335
|
827 def test_sr11_sw4_ch1_channels(self):
|
amine@335
|
828 channels = self.audio_source.channels
|
amine@164
|
829 self.assertEqual(
|
amine@164
|
830 channels,
|
amine@164
|
831 1,
|
amine@164
|
832 msg="wrong number of channels, expected: 1, found: {0} ".format(
|
amine@164
|
833 channels
|
amine@164
|
834 ),
|
amine@164
|
835 )
|
amine@164
|
836
|
amine@330
|
837 def test_sr11_sw4_ch1_intial_position_0(self):
|
amine@216
|
838 pos = self.audio_source.position
|
amine@164
|
839 self.assertEqual(
|
amine@164
|
840 pos, 0, msg="wrong position, expected: 0, found: {0} ".format(pos)
|
amine@164
|
841 )
|
amine@164
|
842
|
amine@216
|
843 def test_sr11_sw4_ch1_position_5(self):
|
amine@164
|
844 self.audio_source.read(5)
|
amine@216
|
845 pos = self.audio_source.position
|
amine@164
|
846 self.assertEqual(
|
amine@164
|
847 pos, 5, msg="wrong position, expected: 5, found: {0} ".format(pos)
|
amine@164
|
848 )
|
amine@164
|
849
|
amine@216
|
850 def test_sr11_sw4_ch1_position_9(self):
|
amine@164
|
851 self.audio_source.read(5)
|
amine@164
|
852 self.audio_source.read(4)
|
amine@216
|
853 pos = self.audio_source.position
|
amine@164
|
854 self.assertEqual(
|
amine@164
|
855 pos, 9, msg="wrong position, expected: 5, found: {0} ".format(pos)
|
amine@164
|
856 )
|
amine@164
|
857
|
amine@216
|
858 def test_sr11_sw4_ch1_position_0(self):
|
amine@164
|
859 self.audio_source.read(10)
|
amine@216
|
860 self.audio_source.position = 0
|
amine@216
|
861 pos = self.audio_source.position
|
amine@164
|
862 self.assertEqual(
|
amine@164
|
863 pos, 0, msg="wrong position, expected: 0, found: {0} ".format(pos)
|
amine@164
|
864 )
|
amine@164
|
865
|
amine@216
|
866 def test_sr11_sw4_ch1_position_10(self):
|
amine@216
|
867 self.audio_source.position = 10
|
amine@216
|
868 pos = self.audio_source.position
|
amine@164
|
869 self.assertEqual(
|
amine@164
|
870 pos,
|
amine@164
|
871 10,
|
amine@164
|
872 msg="wrong position, expected: 10, found: {0} ".format(pos),
|
amine@164
|
873 )
|
amine@164
|
874
|
amine@330
|
875 def test_sr11_sw4_ch1_initial_position_s_0(self):
|
amine@216
|
876 tp = self.audio_source.position_s
|
amine@164
|
877 self.assertEqual(
|
amine@164
|
878 tp,
|
amine@164
|
879 0.0,
|
amine@164
|
880 msg="wrong time position, expected: 0.0, found: {0} ".format(tp),
|
amine@164
|
881 )
|
amine@164
|
882
|
amine@330
|
883 def test_sr11_sw4_ch1_position_s_1_after_read(self):
|
amine@330
|
884 srate = self.audio_source.sampling_rate
|
amine@164
|
885 # read one second
|
amine@164
|
886 self.audio_source.read(srate)
|
amine@216
|
887 tp = self.audio_source.position_s
|
amine@164
|
888 self.assertEqual(
|
amine@164
|
889 tp,
|
amine@164
|
890 1.0,
|
amine@164
|
891 msg="wrong time position, expected: 1.0, found: {0} ".format(tp),
|
amine@164
|
892 )
|
amine@164
|
893
|
amine@216
|
894 def test_sr11_sw4_ch1_position_s_0_63(self):
|
amine@164
|
895 # read 2.5 seconds
|
amine@164
|
896 self.audio_source.read(7)
|
amine@216
|
897 tp = self.audio_source.position_s
|
amine@164
|
898 self.assertAlmostEqual(
|
amine@164
|
899 tp,
|
amine@164
|
900 0.636363636364,
|
amine@164
|
901 msg="wrong time position, expected: 0.636363636364, "
|
amine@164
|
902 "found: {0} ".format(tp),
|
amine@164
|
903 )
|
amine@164
|
904
|
amine@216
|
905 def test_sr11_sw4_ch1_position_s_0(self):
|
amine@164
|
906 self.audio_source.read(10)
|
amine@216
|
907 self.audio_source.position_s = 0
|
amine@216
|
908 tp = self.audio_source.position_s
|
amine@164
|
909 self.assertEqual(
|
amine@164
|
910 tp,
|
amine@164
|
911 0.0,
|
amine@164
|
912 msg="wrong time position, expected: 0.0, found: {0} ".format(tp),
|
amine@164
|
913 )
|
amine@164
|
914
|
amine@216
|
915 def test_sr11_sw4_ch1_position_s_1(self):
|
amine@216
|
916 self.audio_source.position_s = 1
|
amine@216
|
917 tp = self.audio_source.position_s
|
amine@164
|
918 self.assertEqual(
|
amine@164
|
919 tp,
|
amine@164
|
920 1.0,
|
amine@164
|
921 msg="wrong time position, expected: 1.0, found: {0} ".format(tp),
|
amine@164
|
922 )
|
amine@164
|
923
|
amine@164
|
924 def test_sr11_sw4_ch1_rewind(self):
|
amine@164
|
925 self.audio_source.read(10)
|
amine@164
|
926 self.audio_source.rewind()
|
amine@169
|
927 tp = self.audio_source.position
|
amine@164
|
928 self.assertEqual(
|
amine@164
|
929 tp, 0, msg="wrong position, expected: 0.0, found: {0} ".format(tp)
|
amine@164
|
930 )
|
amine@164
|
931
|
amine@164
|
932
|
amine@164
|
933 class TestBufferAudioSourceCreationException(unittest.TestCase):
|
amine@164
|
934 def test_wrong_sample_width_value(self):
|
amine@164
|
935 with self.assertRaises(AudioParameterError) as audio_param_err:
|
amine@164
|
936 _ = BufferAudioSource(
|
amine@321
|
937 data=b"ABCDEFGHI", sampling_rate=9, sample_width=3, channels=1
|
amine@164
|
938 )
|
amine@164
|
939 self.assertEqual(
|
amine@164
|
940 "Sample width must be one of: 1, 2 or 4 (bytes)",
|
amine@164
|
941 str(audio_param_err.exception),
|
amine@164
|
942 )
|
amine@164
|
943
|
amine@164
|
944 def test_wrong_data_buffer_size(self):
|
amine@164
|
945 with self.assertRaises(AudioParameterError) as audio_param_err:
|
amine@164
|
946 _ = BufferAudioSource(
|
amine@321
|
947 data=b"ABCDEFGHI", sampling_rate=8, sample_width=2, channels=1
|
amine@164
|
948 )
|
amine@164
|
949 self.assertEqual(
|
amine@164
|
950 "The length of audio data must be an integer "
|
amine@164
|
951 "multiple of `sample_width * channels`",
|
amine@164
|
952 str(audio_param_err.exception),
|
amine@164
|
953 )
|
amine@164
|
954
|
amine@164
|
955
|
amine@164
|
956 class TestAudioSourceProperties(unittest.TestCase):
|
amine@164
|
957 def test_read_properties(self):
|
amine@164
|
958 data = b""
|
amine@164
|
959 sampling_rate = 8000
|
amine@164
|
960 sample_width = 2
|
amine@164
|
961 channels = 1
|
amine@164
|
962 a_source = BufferAudioSource(
|
amine@164
|
963 data, sampling_rate, sample_width, channels
|
amine@164
|
964 )
|
amine@164
|
965
|
amine@164
|
966 self.assertEqual(a_source.sampling_rate, sampling_rate)
|
amine@164
|
967 self.assertEqual(a_source.sample_width, sample_width)
|
amine@164
|
968 self.assertEqual(a_source.channels, channels)
|
amine@164
|
969
|
amine@164
|
970 def test_set_readonly_properties_exception(self):
|
amine@164
|
971 data = b""
|
amine@164
|
972 sampling_rate = 8000
|
amine@164
|
973 sample_width = 2
|
amine@164
|
974 channels = 1
|
amine@164
|
975 a_source = BufferAudioSource(
|
amine@164
|
976 data, sampling_rate, sample_width, channels
|
amine@164
|
977 )
|
amine@164
|
978
|
amine@164
|
979 with self.assertRaises(AttributeError):
|
amine@164
|
980 a_source.sampling_rate = 16000
|
amine@164
|
981 a_source.sample_width = 1
|
amine@164
|
982 a_source.channels = 2
|
amine@164
|
983
|
amine@164
|
984
|
amine@164
|
985 class TestAudioSourceShortProperties(unittest.TestCase):
|
amine@164
|
986 def test_read_short_properties(self):
|
amine@164
|
987 data = b""
|
amine@164
|
988 sampling_rate = 8000
|
amine@164
|
989 sample_width = 2
|
amine@164
|
990 channels = 1
|
amine@164
|
991 a_source = BufferAudioSource(
|
amine@164
|
992 data, sampling_rate, sample_width, channels
|
amine@164
|
993 )
|
amine@164
|
994
|
amine@164
|
995 self.assertEqual(a_source.sr, sampling_rate)
|
amine@164
|
996 self.assertEqual(a_source.sw, sample_width)
|
amine@164
|
997 self.assertEqual(a_source.ch, channels)
|
amine@164
|
998
|
amine@164
|
999 def test_set_readonly_short_properties_exception(self):
|
amine@164
|
1000 data = b""
|
amine@164
|
1001 sampling_rate = 8000
|
amine@164
|
1002 sample_width = 2
|
amine@164
|
1003 channels = 1
|
amine@164
|
1004 a_source = BufferAudioSource(
|
amine@164
|
1005 data, sampling_rate, sample_width, channels
|
amine@164
|
1006 )
|
amine@164
|
1007
|
amine@164
|
1008 with self.assertRaises(AttributeError):
|
amine@164
|
1009 a_source.sr = 16000
|
amine@164
|
1010 a_source.sw = 1
|
amine@164
|
1011 a_source.ch = 2
|
amine@164
|
1012
|
amine@164
|
1013
|
amine@164
|
1014 if __name__ == "__main__":
|
amine@209
|
1015 unittest.main()
|