class_docstr: Aubio Pitch estimation analyzer
class_docstr_tok: ["Aubio","Pitch","estimation","analyzer"]
code: def process(self, frames, eod=False):
      # time = self.block_read * self.input_stepsize * 1. / self.samplerate()
  
      # WARNING : All Aubio analyzer process functions manages frames reconstruction by themself
      #           from small stepsize input blocksize
      #           i.e. Aubio process functions should receive non overlapping input blocksize
      #           of length stepsize.
      #           This is achieve through  @frames_adapter that handles Aubio Analyzer specifically (blocksize=stepsize).
  
      self.pitches += [self.aubio_pitch(frames)[0]]
      self.pitch_confidences += [self.aubio_pitch.get_confidence()]
      self.block_read += 1
      return frames, eod
  
imports: from __future__ import absolute_import
  from timeside.core import implements, interfacedoc
  from timeside.core.analyzer import Analyzer
  from timeside.core.api import IAnalyzer
  from timeside.core.preprocessors import downmix_to_mono, frames_adapter
  from aubio import pitch
  import numpy
  from timeside.plugins.analyzer.utils import nextpow2
  from timeside.core.tools.parameters import store_parameters, Float, HasTraits
  from timeside.core.grapher import DisplayAnalyzer
label_desc: Use image node_id 8 for calling the AubioPitch obj's underlying member method code with example usage: obj.process(frames, eod) and returns: frames,  eod