class_docstr: Logarithmic scaled spectrogram (level vs. frequency vs. time).
  
  Adds pixels iteratively thanks to the adapter providing
  fixed size frame buffers.
class_docstr_tok: ["Logarithmic","scaled","spectrogram","(","level","vs.","frequency","vs.","time",")",".","Adds","pixels","iteratively","thanks","to","the","adapter","providing","fixed","size","frame","buffers","."]
code: def process(self, frames, eod=False):
      if len(frames) != 1:
          chunk = frames[:, 0].copy()
          chunk.shape = (len(chunk), 1)
          for samples, end in self.pixels_adapter.process(chunk, eod):
              if self.pixel_cursor < self.image_width:
                  (
                      spectral_centroid,
                      db_spectrum,
                  ) = self.spectrum.process(samples, True)
                  self.draw_spectrum(self.pixel_cursor, db_spectrum)
                  self.pixel_cursor += 1
      return frames, eod
  
file_path: TimeSide/timeside/plugins/grapher/spectrogram_log.py
imports: from timeside.core import implements, interfacedoc
  from timeside.core.api import IGrapher
  from timeside.core.grapher import Grapher, Image
  from timeside.plugins.grapher.color_schemes import default_color_schemes
  from .utils import interpolate_colors
  import math
label_desc: Use image node_id 8 for calling the SpectrogramLog obj's underlying member method code with example usage: obj.process(frames, eod) and returns: frames,  eod