Mercurial > hg > auditok
changeset 230:1a3cf18658c6
Add a test for temporal AudioRegion slicing with an arbitrary sampling rate
author | Amine Sehili <amine.sehili@gmail.com> |
---|---|
date | Sun, 14 Jul 2019 12:31:38 +0100 |
parents | 19b8f4f28d7b |
children | 046c445b9699 |
files | auditok/core.py tests/test_core.py |
diffstat | 2 files changed, 16 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/auditok/core.py Sat Jul 13 11:19:25 2019 +0100 +++ b/auditok/core.py Sun Jul 14 12:31:38 2019 +0100 @@ -537,29 +537,23 @@ ) def __getitem__(self, index): - err_msg = "AudioRegion index must a slice object without a step" - if not isinstance(index, slice): - raise TypeError(err_msg) - if index.step is not None: - raise ValueError(err_msg) + err_msg = "Slicing AudioRegion by samples requires indices of type " + err_msg += "'int' without a step (e.g. region.sec[1600:3200])" + start_sample, stop_sample = _check_convert_index(index, (int), err_msg) bytes_per_sample = self.sample_width * self.channels len_samples = len(self._data) // bytes_per_sample - if index.start is None: - start_sample = None - else: - start_sample = index.start - if start_sample < 0: - start_sample = max(start_sample + len_samples, 0) + if start_sample < 0: + start_sample = max(start_sample + len_samples, 0) onset = start_sample * bytes_per_sample - if index.stop is None: + if stop_sample is not None: + if stop_sample < 0: + stop_sample = max(stop_sample + len_samples, 0) + offset = index.stop * bytes_per_sample + else: offset = None - elif index.stop < 0: - offset = max(index.stop + len_samples, 0) * bytes_per_sample - else: - offset = index.stop * bytes_per_sample data = self._data[onset:offset] new_start = self.start + start_sample / self.sampling_rate
--- a/tests/test_core.py Sat Jul 13 11:19:25 2019 +0100 +++ b/tests/test_core.py Sun Jul 14 12:31:38 2019 +0100 @@ -874,6 +874,12 @@ 0, b"", ), + arbitrary_sampling_rate=( + AudioRegion(b"a" * 124 + b"b" * 376, 0, 1234, 1, 1), + slice(100, 200), + 123 / 1234, + b"a" + b"b" * 123, + ), ) def test_region_slicing( self, region, slice_, expected_start, expected_data @@ -889,7 +895,6 @@ self.assertEqual(sub_region.start, expected_start) self.assertEqual(bytes(sub_region), expected_data) - @genty_dataset( simple=(8000, 1, 1), stereo_sw_2=(8000, 2, 2),