Mercurial > hg > auditok
changeset 155:8b1b9010d6ae
Refactor WaveAudioSource
author | Amine Sehili <amine.sehili@gmail.com> |
---|---|
date | Sun, 24 Feb 2019 16:05:36 +0100 |
parents | dde6da718b42 |
children | eda276f5d871 |
files | auditok/io.py |
diffstat | 1 files changed, 9 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/auditok/io.py Sun Feb 24 15:47:42 2019 +0100 +++ b/auditok/io.py Sun Feb 24 16:05:36 2019 +0100 @@ -512,50 +512,37 @@ return data -class WaveAudioSource(AudioSource): +class WaveAudioSource(_FileAudioSource, Rewindable): """ A class for an `AudioSource` that reads data from a wave file. + This class should be used for large wave files to avoid loading + the whole data to memory. :Parameters: `filename` : - path to a valid wave file + path to a valid wave file. """ - def __init__(self, filename): - + def __init__(self, filename, use_channel=0): self._filename = filename self._audio_stream = None - stream = wave.open(self._filename) - AudioSource.__init__( + _FileAudioSource.__init__( self, stream.getframerate(), stream.getsampwidth(), stream.getnchannels(), + use_channel, ) stream.close() - def is_open(self): - return self._audio_stream is not None - def open(self): if self._audio_stream is None: self._audio_stream = wave.open(self._filename) - def close(self): - if self._audio_stream is not None: - self._audio_stream.close() - self._audio_stream = None - - def read(self, size): - if self._audio_stream is None: - raise IOError("Stream is not open") - else: - data = self._audio_stream.readframes(size) - if data is None or len(data) < 1: - return None - return data + def _read_from_stream(self, size): + return self._audio_stream.readframes(size) class PyAudioSource(AudioSource):