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