From: Thomas Fillon Date: Mon, 20 Oct 2014 14:55:09 +0000 (+0200) Subject: Add BufferTable support in spectrogram X-Git-Tag: 0.6~4^2~15 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=e01a7949f7b38c514c05e1a5fec249b7ef3202f6;p=timeside.git Add BufferTable support in spectrogram --- diff --git a/timeside/analyzer/aubio/aubio_melenergy.py b/timeside/analyzer/aubio/aubio_melenergy.py index 1fcfe48..a22055f 100644 --- a/timeside/analyzer/aubio/aubio_melenergy.py +++ b/timeside/analyzer/aubio/aubio_melenergy.py @@ -26,6 +26,7 @@ from ...api import IAnalyzer from ..preprocessors import downmix_to_mono, frames_adapter from aubio import filterbank, pvoc + class AubioMelEnergy(Analyzer): """Aubio Mel Energy analyzer""" diff --git a/timeside/analyzer/irit_noise_startSilences.py b/timeside/analyzer/irit_noise_startSilences.py index 60f55cb..bbea231 100644 --- a/timeside/analyzer/irit_noise_startSilences.py +++ b/timeside/analyzer/irit_noise_startSilences.py @@ -104,7 +104,7 @@ class IRITStartSeg(Analyzer): # frames.T[0]) ** 2))] # Compute energy env, self.filtre_z = lfilter(b=self.filtre, a=1.0, axis=0, - x=frames[:,0], + x=frames[:, 0], zi=self.filtre_z) self._buffer.append('energy', numpy.sqrt(numpy.mean(env ** 2))) diff --git a/timeside/analyzer/spectrogram.py b/timeside/analyzer/spectrogram.py index da89cc9..2a136be 100644 --- a/timeside/analyzer/spectrogram.py +++ b/timeside/analyzer/spectrogram.py @@ -23,14 +23,25 @@ from timeside.core import implements, interfacedoc from timeside.analyzer.core import Analyzer from timeside.api import IAnalyzer from timeside.analyzer.preprocessors import downmix_to_mono, frames_adapter -from ..tools.parameters import Int, HasTraits +from timeside.tools.parameters import Int, HasTraits +from timeside.tools.buffering import BufferTable import numpy as np class Spectrogram(Analyzer): - """Spectrogram analyzer""" + """Spectrogram analyzer + + >>> import timeside + >>> from timeside.tools.data_samples import samples as ts_samples + >>> audio_source = ts_samples['sweep.wav'] + >>> decoder = timeside.decoder.file.FileDecoder(uri=audio_source) + >>> spectrogram = Spectrogram(input_blocksize=2048, input_stepsize=1024) + >>> pipe = (decoder | spectrogram) + >>> pipe.run() + + """ implements(IAnalyzer) # Define Parameters @@ -54,7 +65,7 @@ class Spectrogram(Analyzer): else: self.fft_size = fft_size - self.values = [] + self.values = BufferTable() @interfacedoc def setup(self, channels=None, samplerate=None, @@ -80,15 +91,20 @@ class Spectrogram(Analyzer): @downmix_to_mono @frames_adapter def process(self, frames, eod=False): - self.values.append(np.abs(np.fft.rfft(frames, self.fft_size))) + stft = np.fft.rfft(frames, self.fft_size) + self.values.append('stft', stft) return frames, eod def post_process(self): spectrogram = self.new_result(data_mode='value', time_mode='framewise') spectrogram.parameters = {'fft_size': self.fft_size} - spectrogram.data_object.value = self.values + spectrogram.data_object.value = np.abs(self.values['stft']) nb_freq = spectrogram.data_object.value.shape[1] spectrogram.data_object.y_value = (np.arange(0, nb_freq) * self.samplerate() / self.fft_size) self.add_result(spectrogram) + +if __name__ == "__main__": + import doctest + doctest.testmod()