1- import glfw
1+ # import glfw
22from demosys .conf import settings
33from .base import BaseTimer
44
1111class MusicTimer (BaseTimer ):
1212 """Timer based on music"""
1313 def __init__ (self , ** kwargs ):
14- mixer .init ()
14+ mixer .init (frequency = 44100 , size = - 16 , channels = 2 , buffer = 1024 )
1515 mixer .music .load (settings .MUSIC )
1616 self .paused = True
17- # Reported time is not accurate when pausing or unpausing. We hack around it.
1817 self .pause_time = 0
1918 self .initialized = False
20- self ._upt = 0 # hack fixing jaggy unpause
2119 super ().__init__ (** kwargs )
2220
2321 def start (self ):
@@ -32,16 +30,14 @@ def start(self):
3230 self .paused = False
3331
3432 def pause (self ):
33+ mixer .music .pause ()
3534 self .pause_time = self .get_time ()
36- print ("paused" , self .pause_time )
3735 self .paused = True
38- mixer .music .pause ()
3936
4037 def toggle_pause (self ):
4138 """Toggle pause mode"""
4239 if self .paused :
4340 self .start ()
44- self ._upt = glfw .get_time ()
4541 else :
4642 self .pause ()
4743
@@ -52,23 +48,8 @@ def stop(self):
5248
5349 def get_time (self ):
5450 """Get the current time in seconds"""
55- # Hack around inaccuracy in mixer
56- if self .paused :
57- return self .pause_time
5851
59- time = mixer .music .get_pos () / 1000.0
60-
61- # Jaggy unpause. get_pos returns future and past time.
62- # We inspect the difference between the paused time and
63- # the reported time for 0.25 seconds after the unpause
64- if glfw .get_time () < (self ._upt + 0.25 ):
65- if time > self .pause_time + 0.25 :
66- return self .pause_time
67-
68- if time < self .pause_time :
52+ if self .paused :
6953 return self .pause_time
7054
71- # Avoid jaggy time skips when unpausing
72- if time < self .pause_time :
73- return self .pause_time
74- return time
55+ return mixer .music .get_pos () / 1000.0
0 commit comments