Make music fading more solid - issue #3
This commit is contained in:
parent
a80dc3f165
commit
6e754c1b3a
38
app/music.py
38
app/music.py
@ -32,7 +32,6 @@ class Music:
|
|||||||
to hold up the UI during the fade.
|
to hold up the UI during the fade.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
with lock:
|
|
||||||
DEBUG("music.fade()", True)
|
DEBUG("music.fade()", True)
|
||||||
|
|
||||||
if not self.player:
|
if not self.player:
|
||||||
@ -54,10 +53,14 @@ class Music:
|
|||||||
# Take a copy of current player to allow another track to be
|
# Take a copy of current player to allow another track to be
|
||||||
# started without interfering here
|
# started without interfering here
|
||||||
|
|
||||||
p = self.player
|
|
||||||
|
|
||||||
DEBUG(f"music._fade(), {self.player=}", True)
|
DEBUG(f"music._fade(), {self.player=}", True)
|
||||||
|
|
||||||
|
with lock:
|
||||||
|
p = self.player
|
||||||
|
self.player = None
|
||||||
|
|
||||||
|
DEBUG(f"music._fade() post-lock, {self.player=}", True)
|
||||||
|
|
||||||
fade_time = Config.FADE_TIME / 1000
|
fade_time = Config.FADE_TIME / 1000
|
||||||
steps = Config.FADE_STEPS
|
steps = Config.FADE_STEPS
|
||||||
sleep_time = fade_time / steps
|
sleep_time = fade_time / steps
|
||||||
@ -77,7 +80,15 @@ class Music:
|
|||||||
p.audio_set_volume(int(self.max_volume * volume_factor))
|
p.audio_set_volume(int(self.max_volume * volume_factor))
|
||||||
sleep(sleep_time)
|
sleep(sleep_time)
|
||||||
|
|
||||||
self.stop(p)
|
with lock:
|
||||||
|
DEBUG(f"music._facde(), stopping {p=}", True)
|
||||||
|
|
||||||
|
p.stop()
|
||||||
|
DEBUG(f"Releasing player {p=}", True)
|
||||||
|
p.release()
|
||||||
|
# Ensure we don't reference player after release
|
||||||
|
p = None
|
||||||
|
|
||||||
self.fading -= 1
|
self.fading -= 1
|
||||||
|
|
||||||
def get_playtime(self):
|
def get_playtime(self):
|
||||||
@ -149,24 +160,19 @@ class Music:
|
|||||||
self.max_volume = volume
|
self.max_volume = volume
|
||||||
self.player.audio_set_volume(volume)
|
self.player.audio_set_volume(volume)
|
||||||
|
|
||||||
def stop(self, player=None):
|
def stop(self):
|
||||||
"Immediately stop playing"
|
"Immediately stop playing"
|
||||||
|
|
||||||
with lock:
|
with lock:
|
||||||
DEBUG(f"music.stop(), {player=}", True)
|
DEBUG(f"music.stop(), {self.player=}", True)
|
||||||
|
|
||||||
if not player:
|
|
||||||
if not self.player:
|
if not self.player:
|
||||||
return
|
return
|
||||||
player = self.player
|
|
||||||
|
|
||||||
DEBUG(f"music.stop({player=})")
|
position = self.player.get_position()
|
||||||
|
self.player.stop()
|
||||||
position = player.get_position()
|
DEBUG(f"Releasing player {self.player=}", True)
|
||||||
player.stop()
|
self.player.release()
|
||||||
DEBUG(f"Releasing player {player=}", True)
|
|
||||||
player.release()
|
|
||||||
# Ensure we don't reference player after release
|
# Ensure we don't reference player after release
|
||||||
player = None
|
self.player = None
|
||||||
|
|
||||||
return position
|
return position
|
||||||
|
|||||||
@ -504,16 +504,19 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
def stop_playing(self, fade=True):
|
def stop_playing(self, fade=True):
|
||||||
"Stop playing current track"
|
"Stop playing current track"
|
||||||
|
|
||||||
DEBUG("musicmuster.stop_playing()")
|
DEBUG("musicmuster.stop_playing()", True)
|
||||||
|
|
||||||
if not self.music.playing():
|
if not self.music.playing():
|
||||||
|
DEBUG("musicmuster.stop_playing(): not playing", True)
|
||||||
return
|
return
|
||||||
|
|
||||||
self.previous_track_position = self.music.get_position()
|
self.previous_track_position = self.music.get_position()
|
||||||
if fade:
|
if fade:
|
||||||
|
DEBUG("musicmuster.stop_playing(): fading music", True)
|
||||||
self.music.fade()
|
self.music.fade()
|
||||||
else:
|
else:
|
||||||
self.music.stop()
|
self.music.stop()
|
||||||
|
DEBUG("musicmuster.stop_playing(): stopping music", True)
|
||||||
self.current_track_playlist_tab.clear_current()
|
self.current_track_playlist_tab.clear_current()
|
||||||
|
|
||||||
# Shuffle tracks along
|
# Shuffle tracks along
|
||||||
@ -563,7 +566,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
if not self.even_tick:
|
if not self.even_tick:
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.music.playing():
|
if self.music.player and self.music.playing():
|
||||||
self.playing = True
|
self.playing = True
|
||||||
playtime = self.music.get_playtime()
|
playtime = self.music.get_playtime()
|
||||||
time_to_fade = (self.current_track.fade_at - playtime)
|
time_to_fade = (self.current_track.fade_at - playtime)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user