Mercurial > hg > auditok
changeset 245:1dfba457a9e1
Implement __len__ and len in AudioRegion and views
author | Amine Sehili <amine.sehili@gmail.com> |
---|---|
date | Mon, 19 Aug 2019 20:18:51 +0100 |
parents | ee6d2294cdd5 |
children | 936511b60745 |
files | auditok/core.py tests/test_core.py |
diffstat | 2 files changed, 39 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/auditok/core.py Wed Jul 31 20:07:27 2019 +0100 +++ b/auditok/core.py Mon Aug 19 20:18:51 2019 +0100 @@ -296,6 +296,13 @@ stop_sample = None if stop_s is None else round(stop_s * sr) return self._region[start_sample:stop_sample] + @property + def len(self): + """ + Return region duration in seconds. + """ + return self._region.duration + class _MillisView(_SecondsView): def __getitem__(self, index): @@ -309,6 +316,19 @@ index = slice(start_sec, stop_sec) return super(_MillisView, self).__getitem__(index) + def __len__(self): + """ + Return region duration in milliseconds. + """ + return round(self._region.duration * 1000) + + @property + def len(self): + """ + Return region duration in milliseconds. + """ + return len(self) + class _AudioRegionMetadata(dict): def __getattr__(self, name): @@ -515,9 +535,16 @@ def __len__(self): """ - Returns region duration in milliseconds. + Return region length in number of samples. """ - return round(self.duration * 1000) + return len(self._data) // (self.sample_width * self.channels) + + @property + def len(self): + """ + Return region length in number of samples. + """ + return len(self) def __bytes__(self): return self._data
--- a/tests/test_core.py Wed Jul 31 20:07:27 2019 +0100 +++ b/tests/test_core.py Mon Aug 19 20:18:51 2019 +0100 @@ -923,7 +923,7 @@ self.assertEqual(region.meta.start, start) self.assertEqual(region.meta.end, expected_end) self.assertEqual(region.duration, expected_duration_s) - self.assertEqual(len(region), expected_duration_ms) + self.assertEqual(len(region.ms), expected_duration_ms) self.assertEqual(bytes(region), data) def test_creation_invalid_data_exception(self): @@ -1297,12 +1297,12 @@ ) @genty_dataset( - simple=(0.01, 0.03, 30), - rounded_len_floor=(0.00575, 0.01725, 17), - rounded_len_ceil=(0.00625, 0.01875, 19), + simple=(0.01, 0.03, 240, 30), + rounded_len_floor=(0.00575, 0.01725, 138, 17), + rounded_len_ceil=(0.00625, 0.01875, 150, 19), ) def test_multiplication( - self, duration, expected_duration, expected_length + self, duration, expected_duration, expected_len, expected_len_ms ): sw = 2 data = b"0" * int(duration * 8000 * sw) @@ -1313,7 +1313,11 @@ self.assertEqual(m_region.sw, 2) self.assertEqual(m_region.ch, 1) self.assertEqual(m_region.duration, expected_duration) - self.assertEqual(len(m_region), expected_length) + self.assertEqual(len(m_region), expected_len) + self.assertEqual(m_region.len, expected_len) + self.assertEqual(m_region.s.len, expected_duration) + self.assertEqual(len(m_region.ms), expected_len_ms) + self.assertEqual(m_region.ms.len, expected_len_ms) @genty_dataset(_str=("x", "str"), _float=(1.4, "float")) def test_multiplication_non_int(self, factor, _type):