changeset 246:936511b60745

Implement __array__ and samples in AudioRegion
author Amine Sehili <amine.sehili@gmail.com>
date Tue, 20 Aug 2019 20:26:04 +0100
parents 1dfba457a9e1
children 56ff493c2b97
files auditok/core.py
diffstat 1 files changed, 21 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/auditok/core.py	Mon Aug 19 20:18:51 2019 +0100
+++ b/auditok/core.py	Tue Aug 20 20:26:04 2019 +0100
@@ -14,6 +14,11 @@
 from auditok.io import check_audio_data, to_file, player_for, get_audio_source
 from auditok.exceptions import TooSamllBlockDuration
 
+try:
+    from . import signal_numpy as signal
+except ImportError:
+    from . import signal
+
 __all__ = ["split", "AudioRegion", "StreamTokenizer"]
 
 
@@ -369,6 +374,7 @@
         self._sampling_rate = sampling_rate
         self._sample_width = sample_width
         self._channels = channels
+        self._samples = None
 
         if meta is not None:
             self._meta = _AudioRegionMetadata(meta)
@@ -533,6 +539,21 @@
         )
         return file
 
+    def __array__(self):
+        return self.samples
+
+    @property
+    def samples(self):
+        if self._samples is None:
+            fmt = signal.FORMAT[self.sample_width]
+            if self.channels == 1:
+                self._samples = signal.to_array(self._data, fmt)
+            else:
+                self._samples = signal.separate_channels(
+                    self._data, fmt, self.channels
+                )
+        return self._samples
+
     def __len__(self):
         """
         Return region length in number of samples.