diff pytouhou/ui/gamerunner.pyx @ 783:ec1e06402a97

Replace SDL2_mixer with the kira crate
author Link Mauve <linkmauve@linkmauve.fr>
date Fri, 21 Nov 2025 10:21:59 +0100
parents 80687f258001
children
line wrap: on
line diff
--- a/pytouhou/ui/gamerunner.pyx
+++ b/pytouhou/ui/gamerunner.pyx
@@ -17,9 +17,16 @@
 from pytouhou.lib.gui cimport EXIT, PAUSE, SCREENSHOT, RESIZE, FULLSCREEN
 
 from .window cimport Window, Runner
-from .music import BGMPlayer, SFXPlayer
+from libtouhou import Audio
 from pytouhou.game.game cimport Game
-from pytouhou.game.music cimport MusicPlayer
+
+
+class DummyAudio:
+    def play(self, name):
+        pass
+
+    def play_bgm(self, track):
+        pass
 
 
 cdef class GameRunner(Runner):
@@ -27,14 +34,14 @@
     cdef Game game
     cdef Window window
     cdef list save_keystates
-    cdef bint skip
+    cdef bint skip, audio
 
     # Since we want to support multiple renderers, don’t specify its type.
     #TODO: find a way to still specify its interface.
     cdef object renderer
 
     def __init__(self, Window window, renderer, common, resource_loader,
-                 bint skip=False, con=None):
+                 bint skip=False, con=None, bint audio=True):
         self.renderer = renderer
         self.common = common
         self.resource_loader = resource_loader
@@ -43,6 +50,7 @@
         self.replay_level = None
         self.skip = skip
         self.con = con
+        self.audio = audio
 
         self.width = common.interface.width
         self.height = common.interface.height
@@ -66,14 +74,14 @@
 
         self.save_keystates = save_keystates
 
-        null_player = MusicPlayer()
+        if self.audio:
+            game.music = Audio(self.resource_loader, bgms)
+        else:
+            game.music = DummyAudio()
         if bgms is not None:
-            game.music = BGMPlayer(self.resource_loader, bgms)
-            game.music.play(0)
-        else:
-            game.music = null_player
+            game.music.play_bgm(0)
 
-        game.sfx_player = SFXPlayer(self.resource_loader) if not self.skip else null_player
+        game.sfx_player = game.music if not self.skip else DummyAudio()
 
 
     cdef bint set_input(self, replay=None) except True:
@@ -144,7 +152,7 @@
                 if self.skip:
                     self.set_input()
                     self.skip = False
-                    self.game.sfx_player = SFXPlayer(self.resource_loader)
+                    self.game.sfx_player = self.game.music
 
         if self.save_keystates is not None:
             self.save_keystates.append(keystate)