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