code: def update(ev):
      global fft_frames, scope, spectrum, mic
      data = mic.get_frames()
      for frame in data:
          # import scipy.ndimage as ndi
          # frame -= ndi.gaussian_filter(frame, 50)
          # frame -= frame.mean()
  
          scope.new_frame(frame)
  
          fft_frames.append(frame)
          if len(fft_frames) >= n_fft_frames:
              cframes = np.concatenate(fft_frames) * window
              fft = np.abs(np.fft.rfft(cframes)).astype("float32")
              fft_frames.pop(0)
  
              spectrum.new_frame(fft)
              image.roll(fft)
  
file_path: vispy/examples/demo/scene/oscilloscope.py
imports: from __future__ import division
  import threading
  import atexit
  import numpy
  from vispy import app, scene, gloo, visuals
  from vispy.util.filter import gaussian_filter
label_desc: Use image node_id 1 for calling a global function with example usage: update(ev) without return types