Re: [Python-es] Fallo con replace
Muchas gracias Flavio y Omar, es lo que quería decir respecto al modo interactivo :-) El 11 de octubre de 2014, 1:50, Omar Gutiérrez omar@gmail.com escribió: Las cadenas son inmutables: a = 'esto' a.upper() 'ESTO' a 'esto' *a.upper()* o *a.replace('', '')* en tu caso, sólo devuelven una copia del objeto más la función que le has aplicado. El modo interactivo no es diferente, *a.replace()* no hace nada sobre el objeto *a*, por que *a* es inmutable. Creo que lo que tú quieres hacer es esto:* a = a.replace(, )* Saludos 2014-10-10 18:00 GMT-05:00 Flavio Danesse fdane...@gmail.com: no es diferente, lo que pasa es que no haces lo mismo en ambos casos, mira: en el interprete cando haces a.replace('0','3') te lo imprime, pero en el código de tu programa tu no le dices: print a.replace('0','3'), por el contrario haces a.replace('0','3') y luego imprimes a. python hace lo mismo en ambos casos, tu código es diferente. El 10 de octubre de 2014, 15:20, Juan M. Puertas soft.sir...@gmail.com escribió: ¡Eso era Samuel!. El modo interactivo es ligerqamente diferente. Muchas gracias :-) El 10 de octubre de 2014, 19:15, Samuel de Ancos sdean...@gmail.com escribió: Buenas compañero :D El problema es que replace no aplica sobre a: a='12045' b='3' a.replace('0','3') '12345' a '12045' deberías hacer una asignación: c = a.replace c = a.replace('0','3') c '12345' Saludos!!! El 10 de octubre de 2014, 19:12, Juan M. Puertas soft.sir...@gmail.com escribió: Hola amigos. Tengo un extraño problema con replace, resulta que en modo interactivo hago lo siguiente: a='12045' b='3' a.replace('0','3') '12345' Sin embargo, cuando hago esto mismo en un módulo py, sucede lo siguiente: import string a='12045' b='3' a.replace('0','3') print a Y el resultado es como si replace no hubiera hecho nada: '12045' Lo he probado en un ordenador con Ubuntu y en otro con Mint. ¿Os sucede a vosotros lo mismo?. Gracias :-) ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ -- *Nota: Por problemas con el e-mail. Puede que recibas de nuevo este mensaje en un tiempo.* ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ -- *Nota: Por problemas con el e-mail. Puede que recibas de nuevo este mensaje en un tiempo.* ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
[Python-es] Ploteo en tiempo real con PyAudio y Matplotlib
Saludos a todos: Estoy trabajando actualmente en un software que debe recuperar datos desde el micrófono de un equipo, y plotearlos en tiempo real en en una interfaz gráfica determinada. Actualmente estoy recuperando los datos del micrófono con PyAudio, que no me ha presentado problemas. Sin embargo, a la hora de plotear los datos con matplotlib, a medida que los segundos avanzan el programa se va volviendo cada vez mas lento, produciéndose un desfase entre el gráfico mostrado y los sonidos del ambiente. He pensado que el problema puede ser la cantidad de datos que se le pasan a Matplotlib, ya que PyAudio ingresa arrays de tamaño considerable en cosa de milisegundos. Por ello, estoy buscando alguna forma de simplificar estos arrays (reducir su tamaño mediante algún algoritmo). O será tal vez que Matplotlib no es adecuado al problema, y hay herramientas que corren más rápido o son mas livianas. Saludos, y gracias por sus respuestas. -- *Ricardo Cisterna Santos* *Ingenieria Civil InformáticaUniversidad del Bío-Bío* ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Ploteo en tiempo real con PyAudio y Matplotlib
He pensado que el problema puede ser la cantidad de datos que se le pasan a Matplotlib, ya que PyAudio ingresa arrays de tamaño considerable en cosa de milisegundos. Por ello, estoy buscando alguna forma de simplificar estos arrays (reducir su tamaño mediante algún algoritmo). O será tal vez que Matplotlib no es adecuado al problema, y hay herramientas que corren más rápido o son mas livianas. Matplotlib debería poder sin problemas. Si puedes pasar algo de código lo vemos. Otra opción es pyQwT, que es más ligera y para determinadas cosas, más recomendable. Saludos, y gracias por sus respuestas. -- *Ricardo Cisterna Santos* *Ingenieria Civil InformáticaUniversidad del Bío-Bío* ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Ploteo en tiempo real con PyAudio y Matplotlib
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* ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Ploteo en tiempo real con PyAudio y Matplotlib
On Sat, Oct 11, 2014 at 10:39 AM, Ricardo Cisterna r.cisternasan...@gmail.com wrote: 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() Creo que estas redibujado toda la data en cada intervalo. No conozco mucho de matplotlib, no es posible solo añadir la nueva información al gráfico en lugar de redibujarlo desde el principio? ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Ploteo en tiempo real con PyAudio y Matplotlib
2014-10-11 17:16 GMT+02:00 Ricardo Cisterna r.cisternasan...@gmail.com: Sin embargo, a la hora de plotear los datos con matplotlib, a medida que los segundos avanzan el programa se va volviendo cada vez mas lento, produciéndose un desfase entre el gráfico mostrado y los sonidos del ambiente. Esto suena a un problema que tuve hace bastante tiempo, y es que la figura conservaba datos históricos, así que el uso de memoria se disparaba. En la versión 1.0 se mejoró mucho, pero todavía quedaba una pequeña fuga. La solución era ejecutar plt.clf() de vez en cuando, que elimina por completo la basura acumulada. ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Ploteo en tiempo real con PyAudio y Matplotlib
Hola a todos, gracias por sus respuestas. Olvidé mencionar que el software debe mantener el histórico de datos recopilados, de forma de que el gráfico muestra los datos desde el inicio de la grabación hasta el momento actual. De todas formas probaré los consejos que me dan y comentaré acá los resultados, gracias de nuevo por su tiempo. El oct 11, 2014 2:39 PM, Daπid davidmen...@gmail.com escribió: 2014-10-11 17:16 GMT+02:00 Ricardo Cisterna r.cisternasan...@gmail.com: Sin embargo, a la hora de plotear los datos con matplotlib, a medida que los segundos avanzan el programa se va volviendo cada vez mas lento, produciéndose un desfase entre el gráfico mostrado y los sonidos del ambiente. Esto suena a un problema que tuve hace bastante tiempo, y es que la figura conservaba datos históricos, así que el uso de memoria se disparaba. En la versión 1.0 se mejoró mucho, pero todavía quedaba una pequeña fuga. La solución era ejecutar plt.clf() de vez en cuando, que elimina por completo la basura acumulada. ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Ploteo en tiempo real con PyAudio y Matplotlib
2014-10-11 23:37 GMT+02:00 Ricardo Cisterna r.cisternasan...@gmail.com: Olvidé mencionar que el software debe mantener el histórico de datos recopilados, de forma de que el gráfico muestra los datos desde el inicio de la grabación hasta el momento actual. Mira que lo dudo. :) Estás recibiendo 44100 muestras por segundo, suficientes para hacer un gráfico suave que te llene la pantalla de lado a lado. Es perfectamente razonable conservar en memoria los datos en crudo, pero no tienes que hacer el gráfico con todos ellos. Esencialmente, lo que quieres hacer es subsampling de tus datos, y sacar por pantalla sólo eso. Dependiendo del tipo de sonidos que grabes y lo que te importen problemas como aliasing, puedes simplemente hacer uno regular usando la maquinaria de Numpy: plt.plot(data[::int(rate)]) O tendrás que buscar algo más complicado (y computacionalmente costoso). Si quieres pintar la forma de la onda según entra y los datos pueden ser cualquier cosa, puedes copiar lo que Audacity hace. /David ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/