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.
docstr: See which devices can be opened for microphone input.
  Return the first valid device
docstr_tok: ["See","which","devices","can","be","opened","for","microphone","input",".","Return","the","first","valid","device"]
code: def input_device(self):
      """
      See which devices can be opened for microphone input.
      Return the first valid device
      """
      mics = []
      for device in range(self.pa.get_device_count()):
          if self.test_device(device):
              mics.append(device)
  
      if len(mics) == 0:
          print("No working microphone devices found!")
          sys.exit()
  
      print("Found %d working microphone device(s): " % len(mics))
      for mic in mics:
          self.print_mic_info(mic)
  
      return mics[0]
  
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 7 for calling the Stream_Reader obj's underlying member method code with example usage: obj.input_device() and returns: mics