Preprocessors

Collections of preprocessors to use as decorators for the analyzers process

Preprocessors process the (frame, eod) arguments in order to handle various preprocessing such as :

  • Downmixing to mono
  • Adapt the frames to match the input_blocksize and input_stepsize
    of the analyzer

downmix_to_mono

timeside.core.preprocessors.downmix_to_mono(process_func)[source]

Pre-processing decorator that downmixes frames from multi-channel to mono

Downmix is achieved by averaging all channels

>>> from timeside.core.preprocessors import downmix_to_mono
>>> @downmix_to_mono
... def process(analyzer,frames,eod):
...     print 'Frames, eod inside process :'
...     print frames, eod
...     return frames, eod
...
>>> import numpy as np
>>> frames = np.asarray([[1,2],[3,4],[5,6],[7,8],[9,10]])
>>> eod = False
>>> frames_, eod_ = process(object(),frames,eod)
Frames, eod inside process :
[ 1.5  3.5  5.5  7.5  9.5] False

Outside Process frames and eod are preserved :

>>> frames_
array([[ 1,  2],
       [ 3,  4],
       [ 5,  6],
       [ 7,  8],
       [ 9, 10]])
>>> eod_
False

frames_adapter

timeside.core.preprocessors.frames_adapter(process_func)[source]

Pre-processing decorator that adapt frames to match input_blocksize and input_stepsize of the decorated analyzer

>>> from timeside.core.preprocessors import frames_adapter
>>> @frames_adapter
... def process(analyzer,frames,eod):
...     analyzer.frames.append(frames)
...     return frames, eod
>>> class Fake_Analyzer(object):
...     def __init__(self):
...         self.input_blocksize = 4
...         self.input_stepsize = 3
...         self.frames = [] # Container for the frame as viewed by process
...     @staticmethod
...     def id():
...         return 'fake_analyzer'
>>> import numpy as np
>>> analyzer = Fake_Analyzer()
>>> frames = np.asarray(range(0,12))
>>> eod = False
>>> frames_, eod_ = process(analyzer,frames,eod)

Inside the process the frames have been adapted to match input_blocksize and input_stepsize

>>> analyzer.frames
[array([0, 1, 2, 3]), array([3, 4, 5, 6]), array([6, 7, 8, 9])]

Outside the process, the original frames and eod are preserved:

>>> frames_
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
>>> eod_
False

Releasing the process with eod=True will zeropad the last frame if necessary

>>> frames = np.asarray(range(12,14))
>>> eod = True
>>> frames_, eod_ = process(analyzer,frames,eod)
>>> analyzer.frames
[array([0, 1, 2, 3]), array([3, 4, 5, 6]), array([6, 7, 8, 9]), array([ 9, 10, 11, 12]), array([12, 13,  0,  0])]