[Python-es] Ploteo en tiempo real con PyAudio y Matplotlib

Ricardo Cisterna r.cisternasantos en gmail.com
Sab Oct 11 17:39:57 CEST 2014


Kiko:

Gracias por tu respuesta. Este es el código que compete a la pregunta:
________________________________________

try:
    import pyaudio
    import numpy as np
    from matplotlib import use
    import  matplotlib.pyplot as plt
    import matplotlib.animation as animation
except ImportError:
    raise ImportError('Faltan modulos externos que instalar')
import wave

SEGUNDOS = 10
MILISEGUNDOS_GRABACION = SEGUNDOS*1000
NOMBRE_ARCHIVO_WAV = "output.wav"

CHUNK = 2**12
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
frames = []

# Definicion de la figura (matplotlib)
fig = plt.figure()
ax = fig.add_subplot(111)
line, = ax.plot(0, 0, lw=2)

# Limites de los ejes
ax.set_xlim(0, MILISEGUNDOS_GRABACION/1000)
ax.set_ylim(-5000, 5000)

# Generar primer plot vacio
xdata = None
ydata = None

# Iniciar stream de audio
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
                        channels=CHANNELS,
                        rate=RATE,
                        input=True,
                        frames_per_buffer=CHUNK)

def generador():
    i = generador.i
    while i < range(0, int(RATE / CHUNK * (SEGUNDOS))):
        data = stream.read(CHUNK)
        audio = np.fromstring(data, np.int16)
        tiempo = np.arange((CHUNK * i), audio.shape[0] + (CHUNK * i)) /
float(RATE)
        i += 1
        print audio
        yield tiempo, audio
generador.i = 0

def animacion(data):
    x, y = data
    global xdata
    global ydata
    if xdata == None:
        xdata = x
        ydata = y
    else:
        xdata = np.append(xdata, x)
        ydata = np.append(ydata, y)
    global line
    line.set_data(xdata, ydata)

    return line,

ani = animation.FuncAnimation(fig, animacion, generador, blit=True,
interval=50, repeat=False)
plt.show()
________________________________________

Gracias de nuevo.

-- 
*Ricardo Cisterna Santos*


*Ingenieria Civil InformáticaUniversidad del Bío-Bío*
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20141011/5415e86b/attachment.html>


Más información sobre la lista de distribución Python-es