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
27 import numpy
28 from aubio import filterbank, pvoc
32 implements(IAnalyzer)
33
35 super(AubioMelEnergy, self).__init__()
36 self.input_blocksize = 1024
37 self.input_stepsize = self.input_blocksize / 4
38
39 @interfacedoc
40 - def setup(self, channels=None, samplerate=None,
41 blocksize=None, totalframes=None):
42 super(AubioMelEnergy, self).setup(
43 channels, samplerate, blocksize, totalframes)
44 self.n_filters = 40
45 self.n_coeffs = 13
46 self.pvoc = pvoc(self.input_blocksize, self.input_stepsize)
47 self.melenergy = filterbank(self.n_filters, self.input_blocksize)
48 self.melenergy.set_mel_coeffs_slaney(samplerate)
49 self.block_read = 0
50 self.melenergy_results = []
51
52 @staticmethod
53 @interfacedoc
55 return "aubio_melenergy"
56
57 @staticmethod
58 @interfacedoc
60 return "Mel Energy (aubio)"
61
62 @staticmethod
63 @interfacedoc
66
67 @downmix_to_mono
68 @frames_adapter
69 - def process(self, frames, eod=False):
70
71 fftgrain = self.pvoc(frames)
72 self.melenergy_results.append(self.melenergy(fftgrain))
73 self.block_read += 1
74 return frames, eod
75
76 - def post_process(self):
77 melenergy = self.new_result(data_mode='value', time_mode='framewise')
78 melenergy.parameters = dict(n_filters=self.n_filters,
79 n_coeffs=self.n_coeffs)
80 melenergy.data_object.value = self.melenergy_results
81 self.process_pipe.results.add(melenergy)
82