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

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

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

  • Воспроизведение аудио с помощью Python
  • Признание тональности звука
  • Python: midi to audio stream
  • Воспроизведение звука с помощью Python
  • Python: создание звукового сигнала
  • Простая, кросс-платформенная MIDI-библиотека для Python
  •   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

  • Как повторить фрагмент кода определенное количество раз в python
  • Признание тональности звука
  • Python: переход к следующей итерации во внешнем цикле
  • Как повторить раздел программы, пока вход не будет корректным в python?
  • Удаление элемента из списка - во время итерации - что случилось с этой идиомой?
  • Попытка исправить мою функцию
  • 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 - лучший язык программирования в мире.