tick set_endevent set_alpha get_busy python loops audio tkinter pygame

python - set_endevent - tick() pygame



¿Tener sonidos completos antes del siguiente, en python? (1)

La manera más directa de hacer esto parece ser obtener la duración de cada sonido y reproducir el siguiente después de que haya transcurrido el tiempo dado, mediante el método after de Tkinter.

self.sound_queue = [pygame.mixer.Sound(s) for s in (''foo.wav'', ''bar.ogg'', ''baz.mp3'')] def play_queue(self, q, num=0) sound = q[num] duration = int(sound.get_length() * 1000) sound.play() if num < len(q)-1: self.root.after(duration, self.play_queue, q, num+1) self.play_queue(self.sound_queue)

También puede ver pygame.mixer.Channel.queue() y pygame.mixer.Channel.set_endevent , ya que probablemente sean la forma prevista de hacer este tipo de cosas.

En Python / pygame, deseo repetir cierto archivo wav (leído por pygame.mixer.Sound("foo.wav").play() en un bucle, y hacer que se reproduzcan uno tras otro, preferiblemente después de que el último haya finalizado o por un retraso predeterminado (1500ms funciona)

Hasta ahora, parafraseando, tengo esto:

for x in range(0, 5): pygame.mixer.Sound("foo.wav").play()

Cuando se reproduce, sin embargo, se reproduce todo a la vez.

El uso de pygame.time para un retraso cuelga la ventana, al igual que tkinter .after (1500), y parece que no puedo encontrar un medio directo para hacerlo con bibliotecas o python o incluso con un ejemplo de algo que reproduce algunos tonos con retrasar como tengo la intención. Podría sustituir pygame con un complemento de audio más "estándar" para Python, o posiblemente utilizar el enhebrado si se trata de presionar un botón, si esto requiere hackeo para hacerlo solo con el mezclador de pygame.

Algunas referencias útiles si es necesario: http://www.pygame.org/docs/ref/music.html https://docs.python.org/2/library/tkinter.html