1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 from timeside.core import implements, interfacedoc
23 from timeside.analyzer.core import Analyzer
24 from timeside.api import IAnalyzer
25 from preprocessors import downmix_to_mono, frames_adapter
26 import numpy as np
30 implements(IAnalyzer)
31
32 - def __init__(self, blocksize=2048, stepsize=None):
40
41 @interfacedoc
42 - def setup(self, channels=None, samplerate=None,
43 blocksize=None, totalframes=None):
49
50 @staticmethod
51 @interfacedoc
53 return "spectrogram_analyzer"
54
55 @staticmethod
56 @interfacedoc
58 return "Spectrogram Analyzer"
59
60 @staticmethod
61 @interfacedoc
64
65 @downmix_to_mono
66 @frames_adapter
67 - def process(self, frames, eod=False):
68 self.values.append(np.abs(np.fft.rfft(frames, self.FFT_SIZE)))
69 return frames, eod
70
71 - def post_process(self):
72 spectrogram = self.new_result(data_mode='value', time_mode='framewise')
73 spectrogram.parameters = {'FFT_SIZE': self.FFT_SIZE}
74 spectrogram.data_object.value = self.values
75 self.process_pipe.results.add(spectrogram)
76