title: PyAudio stream.is_active(), how does it know whether it is active or not
body: <p>I am trying understand how stream.is_active() works. say the wave file reader example from the Documentation:</p>
  
  <pre><code>"""PyAudio Example: Play a wave file (callback version)."""
  
  import pyaudio
  import wave
  import time
  import sys
  
  if len(sys.argv) &lt; 2:
      print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
      sys.exit(-1)
  
  wf = wave.open(sys.argv[1], 'rb')
  
  # instantiate PyAudio (1)
  p = pyaudio.PyAudio()
  
  # define callback (2)
  def callback(in_data, frame_count, time_info, status):
      data = wf.readframes(frame_count)
      return (data, pyaudio.paContinue)
  
  # open stream using callback (3)
  stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                  channels=wf.getnchannels(),
                  rate=wf.getframerate(),
                  output=True,
                  stream_callback=callback)
  
  # start the stream (4)
  stream.start_stream()
  
  # wait for stream to finish (5)
  while stream.is_active():
      time.sleep(0.1)
  
  # stop stream (6)
  stream.stop_stream()
  stream.close()
  wf.close()
  
  # close PyAudio (7)
  p.terminate()
  </code></pre>
  
  <p>So I am not sure what is the condition to make <code>is_active()</code> returns <code>False</code>. If <code>wf.readframes</code> ran out will it return 0 or error to data? If 0 is the indicator what if I actually what 0 to be in my <code>data</code>. In the pyaudio.py, is_active() is defined:</p>
  
  <p>def is_active(self):
      """
      Returns whether the stream is active.</p>
  
  <pre><code>:rtype: bool
  """
  
  return pa.is_stream_active(self._stream)
  </code></pre>
  
  <p>But I am not able to go deeper to portaudio (pa)'s is_stream_active(). </p>