class_docstr: The Stream_Reader continuously reads data from a selected sound source using PyAudio
  
  Arguments:
  
      device: int or None:    Select which audio stream to read .
      rate: float or None:    Sample rate to use. Defaults to something supported.
      updatesPerSecond: int:  How often to record new data.
class_docstr_tok: ["The","Stream_Reader","continuously","reads","data","from","a","selected","sound","source","using","PyAudio","Arguments",":","device",":","int","or","None",":","Select","which","audio","stream","to","read",".","rate",":","float","or","None",":","Sample","rate","to","use",".","Defaults","to","something","supported",".","updatesPerSecond",":","int",":","How","often","to","record","new","data","."]
code: def non_blocking_stream_read(
      self, in_data, frame_count, time_info, status
  ):
      if self.verbose:
          start = time.time()
  
      if self.data_buffer is not None:
          self.data_buffer.append_data(
              np.frombuffer(in_data, dtype=np.int16)
          )
          self.new_data = True
  
      if self.verbose:
          self.num_data_captures += 1
          self.data_capture_delays.append(time.time() - start)
  
      return in_data, pyaudio.paContinue
  
file_path: rt-audio-fft/src/stream_reader_pyaudio.py
imports: import numpy
  import pyaudio
  import time, sys, math
  from collections import deque
  from src.utils import *
label_desc: Use image node_id 2 for calling the Stream_Reader obj's underlying member method code with example usage: obj.non_blocking_stream_read(in_data, frame_count, time_info, status) and returns: in_data,  pyaudio