Mercurial > hg > auditok
changeset 357:96adb05e3a07
Add tests for make_channel_selector
author | Amine Sehili <amine.sehili@gmail.com> |
---|---|
date | Wed, 01 Apr 2020 21:31:06 +0200 |
parents | c8cfe01ec9f5 |
children | 379e36e4fe88 |
files | tests/test_util.py |
diffstat | 1 files changed, 72 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/test_util.py Wed Apr 01 20:21:47 2020 +0200 +++ b/tests/test_util.py Wed Apr 01 21:31:06 2020 +0200 @@ -1,10 +1,17 @@ import unittest from unittest import TestCase +from unittest.mock import patch import math -from array import array +from array import array as array_ from genty import genty, genty_dataset -from auditok.util import AudioEnergyValidator, make_duration_formatter -from auditok.signal import FORMAT +from auditok.util import ( + AudioEnergyValidator, + make_duration_formatter, + make_channel_selector, +) +from auditok import signal as signal_ +from auditok import signal_numpy + from auditok.exceptions import TimeFormatError @@ -15,7 +22,7 @@ generator can be used to build a multichannel audio buffer. >>> gen = _sample_generator("abcd", "ABCD") >>> list(gen) - ["a", "A", "b", "B", "c", "C", "d", "D"] + ["a", "A", 1, 1, "c", "C", "d", "D"] """ frame_gen = zip(*data_buffers) return (sample for frame in frame_gen for sample in frame) @@ -31,11 +38,11 @@ max_value = (2 ** (sample_width * 8) // 2) - 1 if volume > max_value: volume = max_value - fmt = FORMAT[sample_width] + fmt = signal_.FORMAT[sample_width] total_samples = int(sampling_rate * duration_sec) step = frequency / sampling_rate two_pi_step = 2 * math.pi * step - data = array( + data = array_( fmt, ( int(math.sin(two_pi_step * i) * volume) @@ -58,6 +65,9 @@ @genty class TestFunctions(TestCase): + def setUp(self): + self.data = b"012345679ABC" + @genty_dataset( only_seconds=("%S", 5400, "5400.000"), only_millis=("%I", 5400, "5400000"), @@ -90,6 +100,61 @@ with self.assertRaises(TimeFormatError): make_duration_formatter(fmt) + @genty_dataset( + int8_1channel_select_0=( + 1, + 1, + 0, + [48, 49, 50, 51, 52, 53, 54, 55, 57, 65, 66, 67], + ), + int8_2channel_select_0=(1, 2, 0, [48, 50, 52, 54, 57, 66]), + int8_3channel_select_0=(1, 3, 0, [48, 51, 54, 65]), + int8_3channel_select_1=(1, 3, 1, [49, 52, 55, 66]), + int8_3channel_select_2=(1, 3, 2, [50, 53, 57, 67]), + int8_4channel_select_0=(1, 4, 0, [48, 52, 57]), + int16_1channel_select_0=( + 2, + 1, + 0, + [12592, 13106, 13620, 14134, 16697, 17218], + ), + int16_2channel_select_0=(2, 2, 0, [12592, 13620, 16697]), + int16_2channel_select_1=(2, 2, 1, [13106, 14134, 17218]), + int16_3channel_select_0=(2, 3, 0, [12592, 14134]), + int16_3channel_select_1=(2, 3, 1, [13106, 16697]), + int16_3channel_select_2=(2, 3, 2, [13620, 17218]), + int32_1channel_select_0=(4, 1, 0, [858927408, 926299444, 1128415545],), + int32_3channel_select_0=(4, 3, 0, [858927408]), + int32_3channel_select_1=(4, 3, 1, [926299444]), + int32_3channel_select_2=(4, 3, 2, [1128415545]), + ) + def test_make_channel_selector_one_channel( + self, sample_width, channels, selected, expected + ): + + # force using signal functions with standard python implementation + with patch("auditok.util.signal", signal_): + selector = make_channel_selector(sample_width, channels, selected) + result = selector(self.data) + + fmt = signal_.FORMAT[sample_width] + expected = array_(fmt, expected) + if channels == 1: + expected = bytes(expected) + self.assertEqual(result, expected) + + # Use signal functions with numpy implementation + with patch("auditok.util.signal", signal_numpy): + selector = make_channel_selector(sample_width, channels, selected) + resutl_numpy = selector(self.data) + + expected = array_(fmt, expected) + if channels == 1: + expected = bytes(expected) + self.assertEqual(resutl_numpy, expected) + else: + self.assertTrue(all(resutl_numpy == expected)) + @genty class TestAudioEnergyValidator(TestCase): @@ -124,7 +189,7 @@ self, data, channels, use_channel, expected ): - data = array("h", data) + data = array_("h", data) sample_width = 2 energy_threshold = 50 validator = AudioEnergyValidator(