class_docstr: Aubio Pitch estimation analyzer
class_docstr_tok: ["Aubio","Pitch","estimation","analyzer"]
code: def setup(
      self,
      channels=None,
      samplerate=None,
      blocksize=None,
      totalframes=None,
  ):
      # Frame parameters setup
      if self._blocksize_s:
          self.input_blocksize = nextpow2(
              self._blocksize_s * samplerate
          )
      else:
          self.input_blocksize = 2048
  
      if self._stepsize_s:
          self.input_stepsize = int(
              np.round(self._stepsize_s * samplerate)
          )
      else:
          self.input_stepsize = self.input_blocksize // 2
  
      # Now that frames size metadata are properly set, we can do the set-up
      super(AubioPitch, self).setup(
          channels, samplerate, blocksize, totalframes
      )
  
      # Aubio Pitch set-up
      self.aubio_pitch = aubio_pitch(
          "default",
          self.input_blocksize,
          self.input_stepsize,
          samplerate,
      )
      self.aubio_pitch.set_unit("freq")
  
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 2 for calling the AubioPitch obj's underlying member method code with example usage: obj.setup(channels, samplerate, blocksize, totalframes) without return types