Lectura de datos de audio en tiempo real en una matriz numpy

¿Cómo puedo leer el audio en tiempo real en una matriz numpy y usar matplotlib para trazar?

Ahora estoy grabando el audio en un archivo wav luego uso scikits.audiolab.wavread para leerlo en una matriz. ¿Hay alguna manera de que pueda hacer esto directamente en tiempo real?

Puede usar PyAudio para grabar audio y usar np.fromstring para convertirlo en una matriz numpy.

 import pyaudio import numpy as np from matplotlib import pyplot as plt CHUNKSIZE = 1024 # fixed chunk size # initialize portaudio p = pyaudio.PyAudio() stream = p.open(format=pyaudio.paInt16, channels=1, rate=44100, input=True, frames_per_buffer=CHUNKSIZE) # do this as long as you want fresh samples data = stream.read(CHUNKSIZE) numpydata = np.fromstring(data, dtype=np.int16) # plot data plt.plot(numpydata) plt.show() # close stream stream.stop_stream() stream.close() p.terminate() 

Hay una biblioteca llamada PyAudio . Puedes usarlo para grabar en tiempo real. Además, con la ayuda de numpy.fromstring() y numpy.hstack() , puede obtener el resultado deseado. Tenga en cuenta que el siguiente fragmento de código es para MONO-CHANNEL .

 import pyaudio import numpy RATE=16000 RECORD_SECONDS = 2.5 CHUNKSIZE = 1024 # initialize portaudio p = pyaudio.PyAudio() stream = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, input=True, frames_per_buffer=CHUNKSIZE) frames = [] # A python-list of chunks(numpy.ndarray) for _ in range(0, int(RATE / CHUNKSIZE * RECORD_SECONDS)): data = stream.read(CHUNKSIZE) frames.append(numpy.fromstring(data, dtype=numpy.int16)) #Convert the list of numpy-arrays into a 1D array (column-wise) numpydata = numpy.hstack(frames) # close stream stream.stop_stream() stream.close() p.terminate() 

Este es un código probado. Debería funcionar como encanto. Para verificar si sus datos grabados están disponibles correctamente en numpydata , puede agregar este fragmento de código siguiente después del código anterior.

 import scipy.io.wavefile as wav wav.write('out.wav',RATE,numpydata) 

Estas líneas escribirán su numpydata en “out.wav”. Reproduce el archivo para comprobar los datos.

PD: Esta es mi primera respuesta en StackOverflow. Espero eso ayude.