Как при помощи Pygame воспроизвести звук но с задержкой программы
from pygame import mixer
from mutagen.mp3 import MP3
import time
mixer.init()
f = MP3('e:/VSC/Voice_Asistent_Pro/files/cache/main.mp3')
mixer.music.load("e:/VSC/Voice_Asistent_Pro/files/cache/main.mp3")
time.sleep(f.info.length)
mixer.music.play()
Вот моя попытка реализовать данный код, однако он не работает. Так как mixer.music.load тоже ожидает.
Моя цель заменить playsound.
Ответы (1 шт):
Автор решения: Igen
→ Ссылка
Моё решение использует игровой цикл.
from pygame import mixer,event,init
from pygame import time as pgtime
from mutagen.mp3 import MP3
#Для инициализации "таймера" импортирован init
init()
mixer.init()
f = MP3('e:/VSC/Voice_Asistent_Pro/files/cache/main.mp3')
mixer.music.load("e:/VSC/Voice_Asistent_Pro/files/cache/main.mp3")
clock=pgtime.Clock()
playing=False
def make_something(*args,started_tick=0,music_len=0):
'''
Эта функция не будет работать в период проигрования музыки
Т.е. здесь может быть обработчик основного класса игры, приложения
'''
global playing
if not(0<=(pgtime.get_ticks()-started_tick)>=music_len and (pgtime.get_ticks()-started_tick)<=started_tick+music_len):
print("Works")
playing=False
else:
if not playing:
mixer.music.play()
playing=True
print("Waiting... Music is playing")
#Цикл нужен для обновления тик рейта
while 1:
clock.tick(60) #Для получения тиков, 60 - fps
make_something(started_tick=700,music_len=f.info.length)# В начале старта программы пользователя в pygame тик не 0
Если понадобится включение музыки в цикле множество раз, можно завести переменную со стартом музыки в тиках
music_start=-f.info.length
while 1:
clock.tick(60)
if happend_something():
music_start=pgtime.get_ticks()
make_something(started_tick=music_start,music_len=f.info.length)
PS: В последнем примере таймер может обновляться, даже если музыка еще не завершилась