title: Real-time audio signal processing using python
body: <p>I have been trying to do real-time audio signal processing using 'pyAudio' module in python. What I did was a simple case of reading audio data from microphone and play it via headphones. I tried with the following code(both Python and Cython versions). Thought it works but unfortunately it is stalls and not smooth enough. How can I improve the code so that it will run smoothly. My PC is i7, 8GB RAM.</p>
  
  <p>Python Version</p>
  
  <pre><code>import pyaudio
  import numpy as np
  
  RATE    = 16000
  CHUNK   = 256
  
  p               =   pyaudio.PyAudio()
  
  player = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, output=True, 
  frames_per_buffer=CHUNK)
  stream = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, input=True, frames_per_buffer=CHUNK)
  
  for i in range(int(20*RATE/CHUNK)): #do this for 10 seconds
  player.write(np.fromstring(stream.read(CHUNK),dtype=np.int16))
  stream.stop_stream()
  stream.close()
  p.terminate()
  </code></pre>
  
  <p>Cython Version</p>
  
  <pre><code>import pyaudio
  import numpy as np
  
  cdef int RATE   = 16000
  cdef int CHUNK  = 1024
  cdef int i      
  p               =   pyaudio.PyAudio()
  
  player = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, output=True, frames_per_buffer=CHUNK)
  stream = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, input=True, frames_per_buffer=CHUNK)
  
  for i in range(500): #do this for 10 seconds
      player.write(np.fromstring(stream.read(CHUNK),dtype=np.int16))
  stream.stop_stream()
  stream.close()
  p.terminate()
  </code></pre>