changeset 239:6c3b56eb8052

Implement load as classmethod in AudioRegion
author Amine Sehili <amine.sehili@gmail.com>
date Sun, 21 Jul 2019 17:13:53 +0100
parents f16fc2c3d12b
children 173ffca58d23
files auditok/core.py
diffstat 1 files changed, 22 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/auditok/core.py	Sun Jul 21 16:20:20 2019 +0100
+++ b/auditok/core.py	Sun Jul 21 17:13:53 2019 +0100
@@ -11,7 +11,7 @@
 import os
 import math
 from auditok.util import AudioDataSource, DataValidator, AudioEnergyValidator
-from auditok.io import check_audio_data, to_file, player_for
+from auditok.io import check_audio_data, to_file, player_for, get_audio_source
 from auditok.exceptions import TooSamllBlockDuration
 
 __all__ = ["split", "AudioRegion", "StreamTokenizer"]
@@ -339,6 +339,27 @@
         self._millis_view = _MillisView(self)
         self.ms = self.millis
 
+    @classmethod
+    def load(cls, file, skip=0, max_read=None, **kwargs):
+        audio_source = get_audio_source(file, **kwargs)
+        audio_source.open()
+        if skip is not None and skip > 0:
+            skip_samples = int(skip * audio_source.sampling_rate)
+            audio_source.read(skip_samples)
+        if max_read is None or max_read < 0:
+            max_read_samples = None
+        else:
+            max_read_samples = round(max_read * audio_source.sampling_rate)
+        data = audio_source.read(max_read_samples)
+        audio_source.close()
+        return cls(
+            data,
+            0,
+            audio_source.sampling_rate,
+            audio_source.sample_width,
+            audio_source.channels,
+        )
+
     @property
     def sec(self):
         return self._seconds_view