Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Noxware en 1 Mayo 2014, 02:00 am



Título: [AYUDA][PYTHON][PyAudio]Como pausar pyaudio (y poder usar la consola mientras)
Publicado por: Noxware en 1 Mayo 2014, 02:00 am
hola, lo que sucede es que me pidieron algo para un loco proyecto en el que quieres reproducir musica desde un .bat... se me habia ocurrido usar pyaudio (no lo manejo pero copio los ejemplos y los adapto) y sys.argv para que desde un .bat se ejecute un comando con los argumentos para leer un archivo wav... pero tengo varios problemas:

primero que nada, no puedo ejecutar ningun comando hasta que no termine la cancion (que deberia estar de fondo)

segundo no se como pausar la musica por lo que tengo que esperar a que esta termine

... no se si hay otro problema pero por ahora son esos


Título: Re: [AYUDA][PYTHON][PyAudio]Como pausar pyaudio (y poder usar la consola mientras)
Publicado por: tincopasan en 1 Mayo 2014, 11:07 am
¿y el código qué tenés hasta ahora?


Título: Re: [AYUDA][PYTHON][PyAudio]Como pausar pyaudio (y poder usar la consola mientras)
Publicado por: Noxware en 1 Mayo 2014, 16:00 pm
ninguno xD

pero e hecho algunas pruebas, por lo que ya puedo llamar mi programa desde un bat para que reproduzca un archivo especifico...

el codigo que estoy utilizando lo saque de http://people.csail.mit.edu/hubert/pyaudio/ (http://people.csail.mit.edu/hubert/pyaudio/)

y es este:

Código:
import pyaudio
import wave
import sys

CHUNK = 1024

if len(sys.argv) < 2:
    print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
    sys.exit(-1)

wf = wave.open(sys.argv[1], 'rb')

p = pyaudio.PyAudio()

stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True)

data = wf.readframes(CHUNK)

while data != '':
    stream.write(data)
    data = wf.readframes(CHUNK)

stream.stop_stream()
stream.close()

p.terminate()

pero tengo muchas dudas sobre pyaudio... como se pausa??? hay alguna forma de reproduzca y siga ejecutando los comandos dentro de .bat sin interrumpirlo?


Título: Re: [AYUDA][PYTHON][PyAudio]Como pausar pyaudio (y poder usar la consola mientras)
Publicado por: tincopasan en 2 Mayo 2014, 07:40 am
no sé nada de .bat, pero si querés reproducir un sonido de una forma fácil en pocas líneas usaría:
code\\
import winsound
winsound.PlaySound("archivo.wav", winsound.SND_ALIAS)
code\\

ahora bien, esto te crea el tema de seguir usando la consola simultaneamente, bueno para eso usaría un thread (hilo)

Sino en vez de usar la librería pyaudio usaría la de pygame que me parece brinda muchas más posibilidades.


Título: Re: [AYUDA][PYTHON][PyAudio]Como pausar pyaudio (y poder usar la consola mientras)
Publicado por: Noxware en 2 Mayo 2014, 19:12 pm
gracias, te la debo :P


Título: Re: [AYUDA][PYTHON][PyAudio]Como pausar pyaudio (y poder usar la consola mientras)
Publicado por: Noxware en 2 Mayo 2014, 19:19 pm
una pregunta mas... como se pausa winsound?


Título: Re: [AYUDA][PYTHON][PyAudio]Como pausar pyaudio (y poder usar la consola mientras)
Publicado por: tincopasan en 3 Mayo 2014, 08:28 am
¿te refieres a que al apretar una tecla se detenga el sonido antes de terminar?


Título: Re: [AYUDA][PYTHON][PyAudio]Como pausar pyaudio (y poder usar la consola mientras)
Publicado por: Noxware en 3 Mayo 2014, 18:59 pm
algo asi... pero no al pulsar la tecla, en realidad no tengo metodo todavia... pero me gustaria saber como pausarlo


Título: Re: [AYUDA][PYTHON][PyAudio]Como pausar pyaudio (y poder usar la consola mientras)
Publicado por: tincopasan en 4 Mayo 2014, 00:17 am
ah! entonces no podrás con winsound, no tiene muchas opciones, y menos pausar!, para eso uso pygame, pero debes agregar la librería de acuerdo a la versión de python. Te recomiendo que busques reproducir sonidos con pygame, verás que es fácil y te permite usar wav y mp3 por ejemplo, además de pausar.


Título: Re: [AYUDA][PYTHON][PyAudio]Como pausar pyaudio (y poder usar la consola mientras)
Publicado por: Noxware en 5 Mayo 2014, 02:21 am
me quedo con pyaudio, que ya encontre la opcion detener pero tengo otra duda... yo soy nuevo en python (hace poco que inicie) pero lo que es mas, soy nuevo en los lenguajes orientados a objetos y necesito saber como utilizar cosas que estan en otra clase...

este es el codigo: http://paste.ubuntu.com/7389077 (http://paste.ubuntu.com/7389077)

pero como dije, soy nuevo en los lenguajes tipo POO y no se como usar:

Código:
stream.stop_stream()
stream.close()

p.terminate()

que es para detener el sonido de la otra clase...


Título: Re: [AYUDA][PYTHON][PyAudio]Como pausar pyaudio (y poder usar la consola mientras)
Publicado por: tincopasan en 5 Mayo 2014, 03:00 am
tengo algunas dudas:
¿encontraste como pausar o detener?
pausar = interrumpir la reproducción y en caso de continuar lo hace desde el mismo lugar (basicamente)
detener=interrumpir la reproducción y en caso de continuar comenzar desde el principio
porque tu pregunta anterior era de pausar
salvo, claro está que sea con pyaudio y no con winsound
si es con winsound estaría muy bueno que nos enseñes.


Título: Re: [AYUDA][PYTHON][PyAudio]Como pausar pyaudio (y poder usar la consola mientras)
Publicado por: Noxware en 5 Mayo 2014, 03:53 am
encontre una forma de detener winsound pero al pareces no se puede hacer en las distrubuciones recientes de windows, lo cual hace que usar winsound no sea buena idea... vuelvo a mi pregunta anterior, yo recien entre al mundo de la programacion orientada a objetos asi que lo de las clases me marea... como dije antes, necesito usar...

Código:
stream.stop_stream()
stream.close()

p.terminate()

... para DETENER la musica en el thread 1 (la clase 1) pero no se como usar esos metodos desde la segunda clase... alguien me dijo algo de "herencia" o algo asi pero la persona que me lo dijo es un "alcaguete" y no me quiso enseñar y en este momento estoy en epoca de escritos (porque soy un estudiante de 15 años) y no puedo andar desconcetrado...


Título: Re: [AYUDA][PYTHON][PyAudio]Como pausar pyaudio (y poder usar la consola mientras)
Publicado por: tincopasan en 5 Mayo 2014, 05:51 am
no voy a mirar el código que pusiste pero si trataré de explicarte como usar basicamente una clase:

class N1:  #defino un tipo de objeto de la clase (N1)   
    usuario="tincopasan"
        edad ="a quien le importa"
 
a=N1()# creo una instancia de la clase N1

#hay que pensar que a es un objeto como los conocidos(string,tuplas,etc)

Este objeto es muy simple:
es de clase N1, creada por nosotros
lo unico que podemos hacer es usar el atributo interno usuario o eda
que devolvera las string 'tincopasan' para el método usuario y
'a quien le importa' para el método edad

no se que ide usas, pero por ejemplo el wingide cuando escribís un objeto y . (punto) te muestra los atributos o métodos que posee, sino simplemente escribis el objeto.método
print a.usuario
print a.edad

eso es lo más básico de class,en la red está plagado de tutoriales de esto, no entiendo que es clase 1 o clase 2, aunque supongo te referís a subclases, es más de lo mismo, y si recién entrás en la programación  y te marea, pues practica más y de a poco.