Звуки завершаются до следующего, в python?

В Python / pygame я хочу повторить определенный wav-файл (прочитайте pygame.mixer.Sound("foo.wav").play() в цикле и попросите их играть один за другим, желательно после того, как последний завершил или по умолчанию задержка (1500 мс работает)

Пока, перефразируя, у меня есть это:

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

Однако, когда он играет, он играет все сразу.

Используя pygame.time для задержки, зависает окно, как и tkinter .after (1500), и я не могу найти прямолинейное средство для этого, используя либо библиотеки, либо питон, или даже пример чего-то, играющего несколько тонов с как я предполагаю. Я мог бы заменить pygame более «стандартным» звуковым падением для Python или потенциально использовать потоки, если дело доходит до нажатия кнопки, если это требует, чтобы хакерство выполняло такую ​​вещь только с микшером pygame.

Некоторые полезные ссылки при необходимости: http://www.pygame.org/docs/ref/music.html https://docs.python.org/2/library/tkinter.html

  • Почему мои виджеты Tkinter сохраняются как None?
  • Anaconda python, PIL и imagingtk
  • команды в tkinter, когда использовать лямбда и обратные вызовы
  • Как заставить Tkinter поддерживать прозрачность PNG?
  • Отображать jpg-изображения в python
  • PySide / PyQt обнаруживает, если пользователь пытается закрыть окно
  • Как создать несколько флажков из списка в цикле for в python tkinter
  • Получить текущие координаты элемента на виджете Canvas с учетом его элемента управления?
  • One Solution collect form web for “Звуки завершаются до следующего, в python?”

    Самый простой способ сделать это, похоже, состоит в том, чтобы получить длину каждого звука и сыграть следующую по истечении заданного времени через метод After 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) 

    Вы также можете посмотреть на pygame.mixer.Channel.queue() и pygame.mixer.Channel.set_endevent , поскольку они, вероятно, предназначены для такого рода вещей.

    Python - лучший язык программирования в мире.