Как воспроизвести звук не прерывая (паралельно) выполнению других команд
Как мне воспроизвести звук асинхронно?
Пробовал pyglet (келых три строчки кода так еще и после выполнения звука все останавливается), playsound (просто не играл звук при block=False), just_playback (вообще не установился), pygame (слишком много весит). И у всех одна и та же проблема: приостанавливается выполнение кода. Есть ли какая-то библиотека которая могла бы в одну строчку кода, асинхронно воспроизвести звук.
#pg - pyautogui
shut = pg.confirm(text="Завершить єпично работу ПК?", title="Єпичное завершение2023 ", buttons=["OK", "НЕТ"])
if shut == "OK":
pg.hotkey("win", "r")
time.sleep(0.5)
pg.typewrite("cmd")
pg.press("enter")
time.sleep(0.5)
out = pyglet.resource.media("outro.mp3")
out.play()
pyglet.app.run() #И ниже код не выполняеться.
pg.typewrite("shutdown /s /t 17")
pg.press("enter")
P.S: Если кто-то еще и подскажет библиотеку с возможностью установки и получения значения громкости от души поблагодарю
Ответы (1 шт):
Кстати в pyglet можно регулировать громкость, да там вообще много чего можно.
import time
from threading import Thread
from pyglet.media import Player, load
class MiniPlayer(Player):
def __init__(self, path_to_file: str):
super().__init__()
source = load(path_to_file)
self.queue(source)
def on_play(self):
return self.play()
def on_pause(self):
return self.pause()
def get_volume(self):
return self.volume
def set_volume(self, value):
self.volume = value
def change_volume(player: MiniPlayer):
for value in range(10, 100, 10):
time.sleep(1)
print(value / 100)
player.set_volume(value / 100)
def main():
# TO DO ваш код до
mini_player = MiniPlayer("song.mp3")
mini_player.on_play()
print(f"Громкость до: {mini_player.get_volume()}")
mini_player.set_volume(0.5)
print(f"Громкость после: {mini_player.get_volume()}")
# TO DO ваш код после
print("ваш код после")
# Имитация кода после
Thread(target=change_volume, args=(mini_player,)).start()
time.sleep(10)
if __name__ == '__main__':
main()
P.S. Мудрил что бы запустить в одтельном потоке но так и не вышло.