Re: [Python-es] Fallo con replace

2014-10-11 Por tema Juan M. Puertas
 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

2014-10-11 Por tema Ricardo Cisterna
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

2014-10-11 Por tema Kiko



 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

2014-10-11 Por tema Ricardo Cisterna
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

2014-10-11 Por tema Carlos Zuniga
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 Por tema Daπid
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

2014-10-11 Por tema Ricardo Cisterna
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 Por tema Daπid
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/