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),