class_docstr: Linear scaled spectrogram (level vs. frequency vs. time).
  
  Adds pixels iteratively thanks to the adapter providing fixed size frame buffers.
class_docstr_tok: ["Linear","scaled","spectrogram","(","level","vs.","frequency","vs.","time",")",".","Adds","pixels","iteratively","thanks","to","the","adapter","providing","fixed","size","frame","buffers","."]
docstr: generate the lookup which translates y-coordinate to fft-bin
docstr_tok: ["generate","the","lookup","which","translates","y-coordinate","to","fft-bin"]
code: def set_scale(self):
      """generate the lookup which translates y-coordinate to fft-bin"""
  
      f_min = float(self.lower_freq)
      f_max = float(self.higher_freq)
      y_min = f_min
      y_max = f_max
      for y in range(self.image_height):
          freq = y_min + y / (self.image_height - 1.0) * (y_max - y_min)
          fft_bin = freq / f_max * (self.fft_size / 2 + 1)
          if fft_bin < self.fft_size / 2:
              alpha = fft_bin - int(fft_bin)
              self.y_to_bin.append((int(fft_bin), alpha * 255))
  
file_path: TimeSide/timeside/plugins/grapher/spectrogram_lin.py
imports: from timeside.core import implements, interfacedoc
  from timeside.core.api import IGrapher
  from timeside.plugins.grapher.spectrogram_log import SpectrogramLog
label_desc: Use image node_id 6 for calling the SpectrogramLinear obj's underlying member method code with example usage: obj.set_scale() without return types