]> git.parisson.com Git - timeside.git/commitdiff
Add BufferTable support in spectrogram
authorThomas Fillon <thomas@parisson.com>
Mon, 20 Oct 2014 14:55:09 +0000 (16:55 +0200)
committerThomas Fillon <thomas@parisson.com>
Mon, 20 Oct 2014 14:55:09 +0000 (16:55 +0200)
timeside/analyzer/aubio/aubio_melenergy.py
timeside/analyzer/irit_noise_startSilences.py
timeside/analyzer/spectrogram.py

index 1fcfe485062ffc6beb673f07c894b2f75ecb96d5..a22055fb68eed010298621e2bb91ae32bc648434 100644 (file)
@@ -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"""
index 60f55cbc1b6fb4e319ffdf37ea4d1ec40c4df8f8..bbea231be79ba4ba9ea86ff6d911fb7894128069 100644 (file)
@@ -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)))
 
index da89cc9d29959a59d74831360f5d2638abf11981..2a136be861e7d0716d21d1bc040245727caabcde 100644 (file)
@@ -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()