diff --git a/cromulant/game.py b/cromulant/game.py index 7583155..fa29d1a 100644 --- a/cromulant/game.py +++ b/cromulant/game.py @@ -256,8 +256,12 @@ class Game: def toggle_song() -> None: if Game.playing_song: Window.stop_audio() + Game.playing_song = False else: path = str(Config.song_path) - Window.play_audio(path) - Game.playing_song = not Game.playing_song + def on_stop() -> None: + Game.playing_song = False + + Window.play_audio(path, on_stop) + Game.playing_song = True diff --git a/cromulant/window.py b/cromulant/window.py index 037e8e2..6ef0908 100644 --- a/cromulant/window.py +++ b/cromulant/window.py @@ -329,12 +329,19 @@ class Window: Window.root.addWidget(root) @staticmethod - def play_audio(path: str) -> None: + def play_audio(path: str, on_stop: Callable[..., Any] | None = None) -> None: Window.player = QMediaPlayer() Window.audio = QAudioOutput() Window.player.setAudioOutput(Window.audio) Window.player.setSource(QUrl.fromLocalFile(path)) Window.audio.setVolume(100) + + def handle_state_change(state: QMediaPlayer.State) -> None: + if state == QMediaPlayer.StoppedState: + if on_stop: + on_stop() + + Window.player.playbackStateChanged.connect(handle_state_change) Window.player.play() @staticmethod