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 DATA_FORMAT,
|
amine@164
|
10 BufferAudioSource,
|
amine@164
|
11 RawAudioSource,
|
amine@164
|
12 WaveAudioSource,
|
amine@164
|
13 )
|
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@240
|
62 fmt = DATA_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@240
|
92 fmt = DATA_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@164
|
117 data_buffer=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@164
|
192 def test_sr10_sw1_ch1_get_sampling_rate(self):
|
amine@164
|
193 srate = self.audio_source.get_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@164
|
200 def test_sr10_sw1_ch1_get_sample_width(self):
|
amine@164
|
201 swidth = self.audio_source.get_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@164
|
208 def test_sr10_sw1_ch1_get_channels(self):
|
amine@164
|
209 channels = self.audio_source.get_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@216
|
388 def test_sr10_sw1_ch1_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@216
|
396 def test_sr10_sw1_ch1_position_s_1(self):
|
amine@164
|
397 srate = self.audio_source.get_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_set_data(self):
|
amine@164
|
445 self.audio_source.set_data(b"12345")
|
amine@164
|
446 block = self.audio_source.read(9999)
|
amine@164
|
447 self.assertEqual(
|
amine@164
|
448 block,
|
amine@164
|
449 b"12345",
|
amine@164
|
450 msg="wrong block, expected: '12345', found: {0} ".format(block),
|
amine@164
|
451 )
|
amine@164
|
452
|
amine@164
|
453 def test_sr10_sw1_ch1_read_closed(self):
|
amine@164
|
454 self.audio_source.close()
|
amine@164
|
455 with self.assertRaises(Exception):
|
amine@164
|
456 self.audio_source.read(1)
|
amine@164
|
457
|
amine@209
|
458
|
amine@169
|
459 @genty
|
amine@164
|
460 class TestBufferAudioSource_SR16_SW2_CH1(unittest.TestCase):
|
amine@164
|
461 def setUp(self):
|
amine@164
|
462 self.data = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"
|
amine@164
|
463 self.audio_source = BufferAudioSource(
|
amine@164
|
464 data_buffer=self.data, sampling_rate=16, sample_width=2, channels=1
|
amine@164
|
465 )
|
amine@164
|
466 self.audio_source.open()
|
amine@164
|
467
|
amine@164
|
468 def tearDown(self):
|
amine@164
|
469 self.audio_source.close()
|
amine@164
|
470
|
amine@164
|
471 def test_sr16_sw2_ch1_read_1(self):
|
amine@164
|
472 block = self.audio_source.read(1)
|
amine@164
|
473 exp = b"AB"
|
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_6(self):
|
amine@164
|
481 block = self.audio_source.read(6)
|
amine@164
|
482 exp = b"ABCDEFGHIJKL"
|
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 def test_sr16_sw2_ch1_read_multiple(self):
|
amine@164
|
490 block = self.audio_source.read(1)
|
amine@164
|
491 exp = b"AB"
|
amine@164
|
492 self.assertEqual(
|
amine@164
|
493 block,
|
amine@164
|
494 exp,
|
amine@164
|
495 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
496 )
|
amine@164
|
497
|
amine@164
|
498 block = self.audio_source.read(6)
|
amine@164
|
499 exp = b"CDEFGHIJKLMN"
|
amine@164
|
500 self.assertEqual(
|
amine@164
|
501 block,
|
amine@164
|
502 exp,
|
amine@164
|
503 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
504 )
|
amine@164
|
505
|
amine@164
|
506 block = self.audio_source.read(5)
|
amine@164
|
507 exp = b"OPQRSTUVWX"
|
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 block = self.audio_source.read(9999)
|
amine@164
|
515 exp = b"YZ012345"
|
amine@164
|
516 self.assertEqual(
|
amine@164
|
517 block,
|
amine@164
|
518 exp,
|
amine@164
|
519 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
520 )
|
amine@164
|
521
|
amine@164
|
522 def test_sr16_sw2_ch1_read_all(self):
|
amine@164
|
523 block = self.audio_source.read(9999)
|
amine@164
|
524 self.assertEqual(
|
amine@164
|
525 block,
|
amine@164
|
526 self.data,
|
amine@164
|
527 msg="wrong block, expected: {0}, found: {1} ".format(
|
amine@164
|
528 self.data, block
|
amine@164
|
529 ),
|
amine@164
|
530 )
|
amine@164
|
531
|
amine@164
|
532 block = self.audio_source.read(1)
|
amine@164
|
533 self.assertEqual(
|
amine@164
|
534 block,
|
amine@164
|
535 None,
|
amine@164
|
536 msg="wrong block, expected: {0}, found: {1} ".format(None, block),
|
amine@164
|
537 )
|
amine@164
|
538
|
amine@164
|
539 def test_sr16_sw2_ch1_get_sampling_rate(self):
|
amine@164
|
540 srate = self.audio_source.get_sampling_rate()
|
amine@164
|
541 self.assertEqual(
|
amine@164
|
542 srate,
|
amine@164
|
543 16,
|
amine@164
|
544 msg="wrong sampling rate, expected: 10, found: {0} ".format(srate),
|
amine@164
|
545 )
|
amine@164
|
546
|
amine@164
|
547 def test_sr16_sw2_ch1_get_sample_width(self):
|
amine@164
|
548 swidth = self.audio_source.get_sample_width()
|
amine@164
|
549 self.assertEqual(
|
amine@164
|
550 swidth,
|
amine@164
|
551 2,
|
amine@164
|
552 msg="wrong sample width, expected: 1, found: {0} ".format(swidth),
|
amine@164
|
553 )
|
amine@164
|
554
|
amine@164
|
555 def test_sr16_sw2_ch1_get_channels(self):
|
amine@164
|
556
|
amine@164
|
557 channels = self.audio_source.get_channels()
|
amine@164
|
558 self.assertEqual(
|
amine@164
|
559 channels,
|
amine@164
|
560 1,
|
amine@164
|
561 msg="wrong number of channels, expected: 1, found: {0} ".format(
|
amine@164
|
562 channels
|
amine@164
|
563 ),
|
amine@164
|
564 )
|
amine@164
|
565
|
amine@169
|
566 @genty_dataset(
|
amine@169
|
567 empty=([], 0, 0, 0),
|
amine@169
|
568 zero=([0], 0, 0, 0),
|
amine@209
|
569 two=([2], 2, 2 / 16, int(2000 / 16)),
|
amine@209
|
570 eleven=([11], 11, 11 / 16, int(11 * 1000 / 16)),
|
amine@169
|
571 multiple=([4, 8], 12, 0.75, 750),
|
amine@169
|
572 )
|
amine@169
|
573 def test_position(
|
amine@169
|
574 self, block_sizes, expected_sample, expected_second, expected_ms
|
amine@169
|
575 ):
|
amine@169
|
576 for block_size in block_sizes:
|
amine@169
|
577 self.audio_source.read(block_size)
|
amine@169
|
578 position = self.audio_source.position
|
amine@169
|
579 self.assertEqual(
|
amine@169
|
580 position,
|
amine@169
|
581 expected_sample,
|
amine@169
|
582 msg="wrong stream position, expected: {}, found: {}".format(
|
amine@169
|
583 expected_sample, position
|
amine@169
|
584 ),
|
amine@169
|
585 )
|
amine@169
|
586
|
amine@169
|
587 position_s = self.audio_source.position_s
|
amine@169
|
588 self.assertEqual(
|
amine@169
|
589 position_s,
|
amine@169
|
590 expected_second,
|
amine@169
|
591 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
592 expected_second, position_s
|
amine@169
|
593 ),
|
amine@169
|
594 )
|
amine@169
|
595
|
amine@169
|
596 position_ms = self.audio_source.position_ms
|
amine@169
|
597 self.assertEqual(
|
amine@169
|
598 position_ms,
|
amine@169
|
599 expected_ms,
|
amine@169
|
600 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
601 expected_ms, position_ms
|
amine@169
|
602 ),
|
amine@169
|
603 )
|
amine@169
|
604
|
amine@216
|
605 def test_sr16_sw2_ch1_read_position_0(self):
|
amine@169
|
606 self.audio_source.read(10)
|
amine@169
|
607 self.audio_source.position = 0
|
amine@169
|
608 pos = self.audio_source.position
|
amine@164
|
609 self.assertEqual(
|
amine@164
|
610 pos, 0, msg="wrong position, expected: 0, found: {0} ".format(pos)
|
amine@164
|
611 )
|
amine@164
|
612
|
amine@169
|
613 @genty_dataset(
|
amine@169
|
614 zero=(0, 0, 0, 0),
|
amine@209
|
615 one=(1, 1, 1 / 16, int(1000 / 16)),
|
amine@209
|
616 ten=(10, 10, 10 / 16, int(10000 / 16)),
|
amine@209
|
617 negative_1=(-1, 15, 15 / 16, int(15000 / 16)),
|
amine@209
|
618 negative_2=(-7, 9, 9 / 16, int(9000 / 16)),
|
amine@169
|
619 )
|
amine@169
|
620 def test_position_setter(
|
amine@169
|
621 self, position, expected_sample, expected_second, expected_ms
|
amine@169
|
622 ):
|
amine@169
|
623 self.audio_source.position = position
|
amine@169
|
624
|
amine@169
|
625 position = self.audio_source.position
|
amine@164
|
626 self.assertEqual(
|
amine@169
|
627 position,
|
amine@169
|
628 expected_sample,
|
amine@169
|
629 msg="wrong stream position, expected: {}, found: {}".format(
|
amine@169
|
630 expected_sample, position
|
amine@169
|
631 ),
|
amine@164
|
632 )
|
amine@164
|
633
|
amine@169
|
634 position_s = self.audio_source.position_s
|
amine@164
|
635 self.assertEqual(
|
amine@169
|
636 position_s,
|
amine@169
|
637 expected_second,
|
amine@169
|
638 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
639 expected_second, position_s
|
amine@169
|
640 ),
|
amine@164
|
641 )
|
amine@164
|
642
|
amine@169
|
643 position_ms = self.audio_source.position_ms
|
amine@164
|
644 self.assertEqual(
|
amine@169
|
645 position_ms,
|
amine@169
|
646 expected_ms,
|
amine@169
|
647 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
648 expected_ms, position_ms
|
amine@169
|
649 ),
|
amine@164
|
650 )
|
amine@164
|
651
|
amine@169
|
652 @genty_dataset(
|
amine@169
|
653 zero=(0, 0, 0, 0),
|
amine@209
|
654 one=(0.1, 1, 1 / 16, int(1000 / 16)),
|
amine@209
|
655 two=(1 / 8, 2, 1 / 8, int(1 / 8 * 1000)),
|
amine@209
|
656 twelve=(0.75, 12, 0.75, 750),
|
amine@209
|
657 negative_1=(-0.1, 15, 15 / 16, int(15000 / 16)),
|
amine@209
|
658 negative_2=(-0.7, 5, 5 / 16, int(5000 / 16)),
|
amine@169
|
659 )
|
amine@169
|
660 def test_position_s_setter(
|
amine@169
|
661 self, position_s, expected_sample, expected_second, expected_ms
|
amine@169
|
662 ):
|
amine@169
|
663 self.audio_source.position_s = position_s
|
amine@169
|
664
|
amine@169
|
665 position = self.audio_source.position
|
amine@164
|
666 self.assertEqual(
|
amine@169
|
667 position,
|
amine@169
|
668 expected_sample,
|
amine@169
|
669 msg="wrong stream position, expected: {}, found: {}".format(
|
amine@169
|
670 expected_sample, position
|
amine@169
|
671 ),
|
amine@164
|
672 )
|
amine@164
|
673
|
amine@169
|
674 position_s = self.audio_source.position_s
|
amine@164
|
675 self.assertEqual(
|
amine@169
|
676 position_s,
|
amine@169
|
677 expected_second,
|
amine@169
|
678 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
679 expected_second, position_s
|
amine@169
|
680 ),
|
amine@164
|
681 )
|
amine@164
|
682
|
amine@169
|
683 position_ms = self.audio_source.position_ms
|
amine@164
|
684 self.assertEqual(
|
amine@169
|
685 position_ms,
|
amine@169
|
686 expected_ms,
|
amine@169
|
687 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
688 expected_ms, position_ms
|
amine@169
|
689 ),
|
amine@164
|
690 )
|
amine@164
|
691
|
amine@169
|
692 @genty_dataset(
|
amine@169
|
693 zero=(0, 0, 0, 0),
|
amine@209
|
694 one=(100, 1, 1 / 16, int(1000 / 16)),
|
amine@169
|
695 ten=(1000, 16, 1, 1000),
|
amine@209
|
696 negative_1=(-100, 15, 15 / 16, int(15 * 1000 / 16)),
|
amine@169
|
697 negative_2=(-500, 8, 0.5, 500),
|
amine@209
|
698 negative_3=(-700, 5, 5 / 16, int(5 * 1000 / 16)),
|
amine@169
|
699 )
|
amine@169
|
700 def test_position_ms_setter(
|
amine@169
|
701 self, position_ms, expected_sample, expected_second, expected_ms
|
amine@169
|
702 ):
|
amine@169
|
703 self.audio_source.position_ms = position_ms
|
amine@169
|
704
|
amine@169
|
705 position = self.audio_source.position
|
amine@164
|
706 self.assertEqual(
|
amine@169
|
707 position,
|
amine@169
|
708 expected_sample,
|
amine@169
|
709 msg="wrong stream position, expected: {}, found: {}".format(
|
amine@169
|
710 expected_sample, position
|
amine@169
|
711 ),
|
amine@164
|
712 )
|
amine@164
|
713
|
amine@169
|
714 position_s = self.audio_source.position_s
|
amine@164
|
715 self.assertEqual(
|
amine@169
|
716 position_s,
|
amine@169
|
717 expected_second,
|
amine@169
|
718 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
719 expected_second, position_s
|
amine@169
|
720 ),
|
amine@164
|
721 )
|
amine@164
|
722
|
amine@169
|
723 position_ms = self.audio_source.position_ms
|
amine@164
|
724 self.assertEqual(
|
amine@169
|
725 position_ms,
|
amine@169
|
726 expected_ms,
|
amine@169
|
727 msg="wrong stream position_s, expected: {}, found: {}".format(
|
amine@169
|
728 expected_ms, position_ms
|
amine@169
|
729 ),
|
amine@164
|
730 )
|
amine@164
|
731
|
amine@164
|
732 def test_sr16_sw2_ch1_rewind(self):
|
amine@164
|
733 self.audio_source.read(10)
|
amine@164
|
734 self.audio_source.rewind()
|
amine@216
|
735 tp = self.audio_source.position
|
amine@164
|
736 self.assertEqual(
|
amine@164
|
737 tp, 0, msg="wrong position, expected: 0.0, found: {0} ".format(tp)
|
amine@164
|
738 )
|
amine@164
|
739
|
amine@164
|
740 def test_sr16_sw2_ch1_set_data(self):
|
amine@164
|
741 self.audio_source.set_data(b"abcdef")
|
amine@164
|
742 block = self.audio_source.read(9999)
|
amine@164
|
743 self.assertEqual(
|
amine@164
|
744 block,
|
amine@164
|
745 b"abcdef",
|
amine@164
|
746 msg="wrong block, expected: 'abcdef', found: {0} ".format(block),
|
amine@164
|
747 )
|
amine@164
|
748
|
amine@164
|
749 def test_sr16_sw2_ch1_set_data_exception(self):
|
amine@164
|
750 with self.assertRaises(AudioParameterError) as audio_param_err:
|
amine@164
|
751 self.audio_source.set_data("abcde")
|
amine@164
|
752 self.assertEqual(
|
amine@164
|
753 "The length of audio data must be an integer "
|
amine@164
|
754 "multiple of `sample_width * channels`",
|
amine@164
|
755 str(audio_param_err.exception),
|
amine@164
|
756 )
|
amine@164
|
757
|
amine@164
|
758 def test_sr16_sw2_ch1_append_data_exception(self):
|
amine@164
|
759 with self.assertRaises(AudioParameterError) as audio_param_err:
|
amine@164
|
760 self.audio_source.append_data("abcde")
|
amine@164
|
761 self.assertEqual(
|
amine@164
|
762 "The length of audio data must be an integer "
|
amine@164
|
763 "multiple of `sample_width * channels`",
|
amine@164
|
764 str(audio_param_err.exception),
|
amine@164
|
765 )
|
amine@164
|
766
|
amine@164
|
767
|
amine@164
|
768 class TestBufferAudioSource_SR11_SW4_CH1(unittest.TestCase):
|
amine@164
|
769 def setUp(self):
|
amine@164
|
770 self.data = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefgh"
|
amine@164
|
771 self.audio_source = BufferAudioSource(
|
amine@164
|
772 data_buffer=self.data, sampling_rate=11, sample_width=4, channels=1
|
amine@164
|
773 )
|
amine@164
|
774 self.audio_source.open()
|
amine@164
|
775
|
amine@164
|
776 def tearDown(self):
|
amine@164
|
777 self.audio_source.close()
|
amine@164
|
778
|
amine@164
|
779 def test_sr11_sw4_ch1_read_1(self):
|
amine@164
|
780 block = self.audio_source.read(1)
|
amine@164
|
781 exp = b"ABCD"
|
amine@164
|
782 self.assertEqual(
|
amine@164
|
783 block,
|
amine@164
|
784 exp,
|
amine@164
|
785 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
786 )
|
amine@164
|
787
|
amine@164
|
788 def test_sr11_sw4_ch1_read_6(self):
|
amine@164
|
789 block = self.audio_source.read(6)
|
amine@164
|
790 exp = b"ABCDEFGHIJKLMNOPQRSTUVWX"
|
amine@164
|
791 self.assertEqual(
|
amine@164
|
792 block,
|
amine@164
|
793 exp,
|
amine@164
|
794 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
795 )
|
amine@164
|
796
|
amine@164
|
797 def test_sr11_sw4_ch1_read_multiple(self):
|
amine@164
|
798 block = self.audio_source.read(1)
|
amine@164
|
799 exp = b"ABCD"
|
amine@164
|
800 self.assertEqual(
|
amine@164
|
801 block,
|
amine@164
|
802 exp,
|
amine@164
|
803 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
804 )
|
amine@164
|
805
|
amine@164
|
806 block = self.audio_source.read(6)
|
amine@164
|
807 exp = b"EFGHIJKLMNOPQRSTUVWXYZ01"
|
amine@164
|
808 self.assertEqual(
|
amine@164
|
809 block,
|
amine@164
|
810 exp,
|
amine@164
|
811 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
812 )
|
amine@164
|
813
|
amine@164
|
814 block = self.audio_source.read(3)
|
amine@164
|
815 exp = b"23456789abcd"
|
amine@164
|
816 self.assertEqual(
|
amine@164
|
817 block,
|
amine@164
|
818 exp,
|
amine@164
|
819 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
820 )
|
amine@164
|
821
|
amine@164
|
822 block = self.audio_source.read(9999)
|
amine@164
|
823 exp = b"efgh"
|
amine@164
|
824 self.assertEqual(
|
amine@164
|
825 block,
|
amine@164
|
826 exp,
|
amine@164
|
827 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
828 )
|
amine@164
|
829
|
amine@164
|
830 def test_sr11_sw4_ch1_read_all(self):
|
amine@164
|
831 block = self.audio_source.read(9999)
|
amine@164
|
832 self.assertEqual(
|
amine@164
|
833 block,
|
amine@164
|
834 self.data,
|
amine@164
|
835 msg="wrong block, expected: {0}, found: {1} ".format(
|
amine@164
|
836 self.data, block
|
amine@164
|
837 ),
|
amine@164
|
838 )
|
amine@164
|
839
|
amine@164
|
840 block = self.audio_source.read(1)
|
amine@164
|
841 self.assertEqual(
|
amine@164
|
842 block,
|
amine@164
|
843 None,
|
amine@164
|
844 msg="wrong block, expected: {0}, found: {1} ".format(None, block),
|
amine@164
|
845 )
|
amine@164
|
846
|
amine@164
|
847 def test_sr11_sw4_ch1_get_sampling_rate(self):
|
amine@164
|
848 srate = self.audio_source.get_sampling_rate()
|
amine@164
|
849 self.assertEqual(
|
amine@164
|
850 srate,
|
amine@164
|
851 11,
|
amine@164
|
852 msg="wrong sampling rate, expected: 10, found: {0} ".format(srate),
|
amine@164
|
853 )
|
amine@164
|
854
|
amine@164
|
855 def test_sr11_sw4_ch1_get_sample_width(self):
|
amine@164
|
856 swidth = self.audio_source.get_sample_width()
|
amine@164
|
857 self.assertEqual(
|
amine@164
|
858 swidth,
|
amine@164
|
859 4,
|
amine@164
|
860 msg="wrong sample width, expected: 1, found: {0} ".format(swidth),
|
amine@164
|
861 )
|
amine@164
|
862
|
amine@164
|
863 def test_sr11_sw4_ch1_get_channels(self):
|
amine@164
|
864 channels = self.audio_source.get_channels()
|
amine@164
|
865 self.assertEqual(
|
amine@164
|
866 channels,
|
amine@164
|
867 1,
|
amine@164
|
868 msg="wrong number of channels, expected: 1, found: {0} ".format(
|
amine@164
|
869 channels
|
amine@164
|
870 ),
|
amine@164
|
871 )
|
amine@164
|
872
|
amine@216
|
873 def test_sr11_sw4_ch1_position_0(self):
|
amine@216
|
874 pos = self.audio_source.position
|
amine@164
|
875 self.assertEqual(
|
amine@164
|
876 pos, 0, msg="wrong position, expected: 0, found: {0} ".format(pos)
|
amine@164
|
877 )
|
amine@164
|
878
|
amine@216
|
879 def test_sr11_sw4_ch1_position_5(self):
|
amine@164
|
880 self.audio_source.read(5)
|
amine@216
|
881 pos = self.audio_source.position
|
amine@164
|
882 self.assertEqual(
|
amine@164
|
883 pos, 5, msg="wrong position, expected: 5, found: {0} ".format(pos)
|
amine@164
|
884 )
|
amine@164
|
885
|
amine@216
|
886 def test_sr11_sw4_ch1_position_9(self):
|
amine@164
|
887 self.audio_source.read(5)
|
amine@164
|
888 self.audio_source.read(4)
|
amine@216
|
889 pos = self.audio_source.position
|
amine@164
|
890 self.assertEqual(
|
amine@164
|
891 pos, 9, msg="wrong position, expected: 5, found: {0} ".format(pos)
|
amine@164
|
892 )
|
amine@164
|
893
|
amine@216
|
894 def test_sr11_sw4_ch1_position_0(self):
|
amine@164
|
895 self.audio_source.read(10)
|
amine@216
|
896 self.audio_source.position = 0
|
amine@216
|
897 pos = self.audio_source.position
|
amine@164
|
898 self.assertEqual(
|
amine@164
|
899 pos, 0, msg="wrong position, expected: 0, found: {0} ".format(pos)
|
amine@164
|
900 )
|
amine@164
|
901
|
amine@216
|
902 def test_sr11_sw4_ch1_position_10(self):
|
amine@216
|
903 self.audio_source.position = 10
|
amine@216
|
904 pos = self.audio_source.position
|
amine@164
|
905 self.assertEqual(
|
amine@164
|
906 pos,
|
amine@164
|
907 10,
|
amine@164
|
908 msg="wrong position, expected: 10, found: {0} ".format(pos),
|
amine@164
|
909 )
|
amine@164
|
910
|
amine@216
|
911 def test_sr11_sw4_ch1_position_s_0(self):
|
amine@216
|
912 tp = self.audio_source.position_s
|
amine@164
|
913 self.assertEqual(
|
amine@164
|
914 tp,
|
amine@164
|
915 0.0,
|
amine@164
|
916 msg="wrong time position, expected: 0.0, found: {0} ".format(tp),
|
amine@164
|
917 )
|
amine@164
|
918
|
amine@216
|
919 def test_sr11_sw4_ch1_position_s_1(self):
|
amine@164
|
920 srate = self.audio_source.get_sampling_rate()
|
amine@164
|
921 # read one second
|
amine@164
|
922 self.audio_source.read(srate)
|
amine@216
|
923 tp = self.audio_source.position_s
|
amine@164
|
924 self.assertEqual(
|
amine@164
|
925 tp,
|
amine@164
|
926 1.0,
|
amine@164
|
927 msg="wrong time position, expected: 1.0, found: {0} ".format(tp),
|
amine@164
|
928 )
|
amine@164
|
929
|
amine@216
|
930 def test_sr11_sw4_ch1_position_s_0_63(self):
|
amine@164
|
931 # read 2.5 seconds
|
amine@164
|
932 self.audio_source.read(7)
|
amine@216
|
933 tp = self.audio_source.position_s
|
amine@164
|
934 self.assertAlmostEqual(
|
amine@164
|
935 tp,
|
amine@164
|
936 0.636363636364,
|
amine@164
|
937 msg="wrong time position, expected: 0.636363636364, "
|
amine@164
|
938 "found: {0} ".format(tp),
|
amine@164
|
939 )
|
amine@164
|
940
|
amine@216
|
941 def test_sr11_sw4_ch1_position_s_0(self):
|
amine@164
|
942 self.audio_source.read(10)
|
amine@216
|
943 self.audio_source.position_s = 0
|
amine@216
|
944 tp = self.audio_source.position_s
|
amine@164
|
945 self.assertEqual(
|
amine@164
|
946 tp,
|
amine@164
|
947 0.0,
|
amine@164
|
948 msg="wrong time position, expected: 0.0, found: {0} ".format(tp),
|
amine@164
|
949 )
|
amine@164
|
950
|
amine@216
|
951 def test_sr11_sw4_ch1_position_s_1(self):
|
amine@164
|
952
|
amine@216
|
953 self.audio_source.position_s = 1
|
amine@216
|
954 tp = self.audio_source.position_s
|
amine@164
|
955 self.assertEqual(
|
amine@164
|
956 tp,
|
amine@164
|
957 1.0,
|
amine@164
|
958 msg="wrong time position, expected: 1.0, found: {0} ".format(tp),
|
amine@164
|
959 )
|
amine@164
|
960
|
amine@164
|
961 def test_sr11_sw4_ch1_rewind(self):
|
amine@164
|
962 self.audio_source.read(10)
|
amine@164
|
963 self.audio_source.rewind()
|
amine@169
|
964 tp = self.audio_source.position
|
amine@164
|
965 self.assertEqual(
|
amine@164
|
966 tp, 0, msg="wrong position, expected: 0.0, found: {0} ".format(tp)
|
amine@164
|
967 )
|
amine@164
|
968
|
amine@164
|
969 def test_sr11_sw4_ch1_set_data(self):
|
amine@164
|
970 self.audio_source.set_data(b"abcdefgh")
|
amine@164
|
971 block = self.audio_source.read(9999)
|
amine@164
|
972 exp = b"abcdefgh"
|
amine@164
|
973 self.assertEqual(
|
amine@164
|
974 block,
|
amine@164
|
975 exp,
|
amine@164
|
976 msg="wrong block, expected: {}, found: {} ".format(exp, block),
|
amine@164
|
977 )
|
amine@164
|
978
|
amine@164
|
979 def test_sr11_sw4_ch1_set_data_exception(self):
|
amine@164
|
980 with self.assertRaises(AudioParameterError) as audio_param_err:
|
amine@164
|
981 self.audio_source.set_data(b"abcdef")
|
amine@164
|
982 self.assertEqual(
|
amine@164
|
983 "The length of audio data must be an integer "
|
amine@164
|
984 "multiple of `sample_width * channels`",
|
amine@164
|
985 str(audio_param_err.exception),
|
amine@164
|
986 )
|
amine@164
|
987
|
amine@164
|
988 def test_sr11_sw4_ch1_append_data_exception(self):
|
amine@164
|
989 with self.assertRaises(AudioParameterError) as audio_param_err:
|
amine@164
|
990 self.audio_source.append_data(b"abcdef")
|
amine@164
|
991 self.assertEqual(
|
amine@164
|
992 "The length of audio data must be an integer "
|
amine@164
|
993 "multiple of `sample_width * channels`",
|
amine@164
|
994 str(audio_param_err.exception),
|
amine@164
|
995 )
|
amine@164
|
996
|
amine@164
|
997
|
amine@164
|
998 class TestBufferAudioSourceCreationException(unittest.TestCase):
|
amine@164
|
999 def test_wrong_sample_width_value(self):
|
amine@164
|
1000 with self.assertRaises(AudioParameterError) as audio_param_err:
|
amine@164
|
1001 _ = BufferAudioSource(
|
amine@164
|
1002 data_buffer=b"ABCDEFGHI",
|
amine@164
|
1003 sampling_rate=9,
|
amine@164
|
1004 sample_width=3,
|
amine@164
|
1005 channels=1,
|
amine@164
|
1006 )
|
amine@164
|
1007 self.assertEqual(
|
amine@164
|
1008 "Sample width must be one of: 1, 2 or 4 (bytes)",
|
amine@164
|
1009 str(audio_param_err.exception),
|
amine@164
|
1010 )
|
amine@164
|
1011
|
amine@164
|
1012 def test_wrong_data_buffer_size(self):
|
amine@164
|
1013 with self.assertRaises(AudioParameterError) as audio_param_err:
|
amine@164
|
1014 _ = BufferAudioSource(
|
amine@164
|
1015 data_buffer=b"ABCDEFGHI",
|
amine@164
|
1016 sampling_rate=8,
|
amine@164
|
1017 sample_width=2,
|
amine@164
|
1018 channels=1,
|
amine@164
|
1019 )
|
amine@164
|
1020 self.assertEqual(
|
amine@164
|
1021 "The length of audio data must be an integer "
|
amine@164
|
1022 "multiple of `sample_width * channels`",
|
amine@164
|
1023 str(audio_param_err.exception),
|
amine@164
|
1024 )
|
amine@164
|
1025
|
amine@164
|
1026
|
amine@164
|
1027 class TestAudioSourceProperties(unittest.TestCase):
|
amine@164
|
1028 def test_read_properties(self):
|
amine@164
|
1029 data = b""
|
amine@164
|
1030 sampling_rate = 8000
|
amine@164
|
1031 sample_width = 2
|
amine@164
|
1032 channels = 1
|
amine@164
|
1033 a_source = BufferAudioSource(
|
amine@164
|
1034 data, sampling_rate, sample_width, channels
|
amine@164
|
1035 )
|
amine@164
|
1036
|
amine@164
|
1037 self.assertEqual(a_source.sampling_rate, sampling_rate)
|
amine@164
|
1038 self.assertEqual(a_source.sample_width, sample_width)
|
amine@164
|
1039 self.assertEqual(a_source.channels, channels)
|
amine@164
|
1040
|
amine@164
|
1041 def test_set_readonly_properties_exception(self):
|
amine@164
|
1042 data = b""
|
amine@164
|
1043 sampling_rate = 8000
|
amine@164
|
1044 sample_width = 2
|
amine@164
|
1045 channels = 1
|
amine@164
|
1046 a_source = BufferAudioSource(
|
amine@164
|
1047 data, sampling_rate, sample_width, channels
|
amine@164
|
1048 )
|
amine@164
|
1049
|
amine@164
|
1050 with self.assertRaises(AttributeError):
|
amine@164
|
1051 a_source.sampling_rate = 16000
|
amine@164
|
1052 a_source.sample_width = 1
|
amine@164
|
1053 a_source.channels = 2
|
amine@164
|
1054
|
amine@164
|
1055
|
amine@164
|
1056 class TestAudioSourceShortProperties(unittest.TestCase):
|
amine@164
|
1057 def test_read_short_properties(self):
|
amine@164
|
1058 data = b""
|
amine@164
|
1059 sampling_rate = 8000
|
amine@164
|
1060 sample_width = 2
|
amine@164
|
1061 channels = 1
|
amine@164
|
1062 a_source = BufferAudioSource(
|
amine@164
|
1063 data, sampling_rate, sample_width, channels
|
amine@164
|
1064 )
|
amine@164
|
1065
|
amine@164
|
1066 self.assertEqual(a_source.sr, sampling_rate)
|
amine@164
|
1067 self.assertEqual(a_source.sw, sample_width)
|
amine@164
|
1068 self.assertEqual(a_source.ch, channels)
|
amine@164
|
1069
|
amine@164
|
1070 def test_set_readonly_short_properties_exception(self):
|
amine@164
|
1071 data = b""
|
amine@164
|
1072 sampling_rate = 8000
|
amine@164
|
1073 sample_width = 2
|
amine@164
|
1074 channels = 1
|
amine@164
|
1075 a_source = BufferAudioSource(
|
amine@164
|
1076 data, sampling_rate, sample_width, channels
|
amine@164
|
1077 )
|
amine@164
|
1078
|
amine@164
|
1079 with self.assertRaises(AttributeError):
|
amine@164
|
1080 a_source.sr = 16000
|
amine@164
|
1081 a_source.sw = 1
|
amine@164
|
1082 a_source.ch = 2
|
amine@164
|
1083
|
amine@164
|
1084
|
amine@164
|
1085 if __name__ == "__main__":
|
amine@209
|
1086 unittest.main()
|