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