code: def play(self, audio, **kwargs):
      
      with self.lock:
        if self.finished:
          raise threading.ThreadError("Trying to play an audio stream while "
                                      "halting the AudioIO manager object")
        new_thread = AudioThread(self, audio, **kwargs)
        self._threads.append(new_thread)
        new_thread.start()
        return new_thread
docs: Start another thread playing the given audio sample iterable (e.g. a
      list, a generator, a NumPy np.ndarray with samples), and play it.
      The arguments are used to customize behaviour of the new thread, as
      parameters directly sent to PyAudio's new stream opening method, see
      AudioThread.__init__ for more.