Fix non-release of player when at natural end of track
This commit is contained in:
parent
1d5fe3e57e
commit
27012a9658
@ -135,8 +135,8 @@ class _FadeCurve:
|
||||
0, track_fade_at - Config.FADE_CURVE_MS_BEFORE_FADE - 1
|
||||
)
|
||||
self.end_ms: int = track_silence_at
|
||||
self.audio_segment = audio[self.start_ms : self.end_ms]
|
||||
self.graph_array = np.array(self.audio_segment.get_array_of_samples())
|
||||
audio_segment = audio[self.start_ms : self.end_ms]
|
||||
self.graph_array = np.array(audio_segment.get_array_of_samples())
|
||||
|
||||
# Calculate the factor to map milliseconds of track to array
|
||||
self.ms_to_array_factor = len(self.graph_array) / (self.end_ms - self.start_ms)
|
||||
@ -202,16 +202,17 @@ class _FadeTrack(QThread):
|
||||
|
||||
# Reduce volume logarithmically
|
||||
total_steps = self.fade_seconds * Config.FADEOUT_STEPS_PER_SECOND
|
||||
db_reduction_per_step = Config.FADEOUT_DB / total_steps
|
||||
reduction_factor_per_step = pow(10, (db_reduction_per_step / 20))
|
||||
if total_steps > 0:
|
||||
db_reduction_per_step = Config.FADEOUT_DB / total_steps
|
||||
reduction_factor_per_step = pow(10, (db_reduction_per_step / 20))
|
||||
|
||||
volume = self.player.audio_get_volume()
|
||||
volume = self.player.audio_get_volume()
|
||||
|
||||
for i in range(1, total_steps + 1):
|
||||
self.player.audio_set_volume(
|
||||
int(volume * pow(reduction_factor_per_step, i))
|
||||
)
|
||||
sleep(1 / Config.FADEOUT_STEPS_PER_SECOND)
|
||||
for i in range(1, total_steps + 1):
|
||||
self.player.audio_set_volume(
|
||||
int(volume * pow(reduction_factor_per_step, i))
|
||||
)
|
||||
sleep(1 / Config.FADEOUT_STEPS_PER_SECOND)
|
||||
|
||||
self.finished.emit()
|
||||
|
||||
@ -292,10 +293,6 @@ class _Music:
|
||||
if not self.player.get_position() > 0 and self.player.is_playing():
|
||||
return
|
||||
|
||||
if fade_seconds <= 0:
|
||||
self.stop()
|
||||
return
|
||||
|
||||
self.fader_worker = _FadeTrack(self.player, fade_seconds=fade_seconds)
|
||||
self.fader_worker.finished.connect(self.player.release)
|
||||
self.fader_worker.start()
|
||||
@ -340,15 +337,6 @@ class _Music:
|
||||
< dt.timedelta(microseconds=Config.PLAY_SETTLE)
|
||||
)
|
||||
|
||||
def on_playback_end(self, *args, **kwargs):
|
||||
"""
|
||||
Release player when playing has ended
|
||||
"""
|
||||
|
||||
if self.player:
|
||||
self.player.release()
|
||||
self.player = None
|
||||
|
||||
def play(
|
||||
self,
|
||||
path: str,
|
||||
@ -376,11 +364,6 @@ class _Music:
|
||||
show_warning(None, "Error creating MediaPlayer", f"Cannot play file ({path})")
|
||||
return
|
||||
|
||||
# Connect to the end-of-playback event
|
||||
self.player.event_manager().event_attach(
|
||||
vlc.EventType.MediaPlayerEndReached, self.on_playback_end
|
||||
)
|
||||
|
||||
_ = self.player.play()
|
||||
self.set_volume(self.max_volume)
|
||||
|
||||
@ -448,7 +431,6 @@ class _Music:
|
||||
if not self.player:
|
||||
return
|
||||
|
||||
self.start_dt = None
|
||||
if self.player.is_playing():
|
||||
self.player.stop()
|
||||
self.player.release()
|
||||
@ -565,14 +547,16 @@ class RowAndTrack:
|
||||
if self.end_of_track_signalled:
|
||||
return
|
||||
|
||||
if not self.music.is_playing():
|
||||
self.start_time = None
|
||||
if self.fade_graph:
|
||||
self.fade_graph.clear()
|
||||
# Ensure that player is released
|
||||
self.music.stop()
|
||||
self.signal_end_of_track()
|
||||
self.end_of_track_signalled = True
|
||||
if self.music.is_playing():
|
||||
return
|
||||
|
||||
self.start_time = None
|
||||
if self.fade_graph:
|
||||
self.fade_graph.clear()
|
||||
# Ensure that player is released
|
||||
self.music.fade(0)
|
||||
self.signals.track_ended_signal.emit()
|
||||
self.end_of_track_signalled = True
|
||||
|
||||
def create_fade_graph(self) -> None:
|
||||
"""
|
||||
@ -608,7 +592,7 @@ class RowAndTrack:
|
||||
|
||||
self.resume_marker = self.music.get_position()
|
||||
self.music.fade(fade_seconds)
|
||||
self.signal_end_of_track()
|
||||
self.signals.track_ended_signal.emit()
|
||||
|
||||
def is_playing(self) -> bool:
|
||||
"""
|
||||
@ -695,13 +679,6 @@ class RowAndTrack:
|
||||
|
||||
return new_start_time
|
||||
|
||||
def signal_end_of_track(self) -> None:
|
||||
"""
|
||||
Send end of track signal
|
||||
"""
|
||||
|
||||
self.signals.track_ended_signal.emit()
|
||||
|
||||
def stop(self, fade_seconds: int = 0) -> None:
|
||||
"""
|
||||
Stop this track playing
|
||||
|
||||
@ -660,9 +660,13 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
- Enable controls
|
||||
"""
|
||||
|
||||
# Reset track_sequence objects
|
||||
track_sequence.previous = track_sequence.current
|
||||
track_sequence.current = None
|
||||
if track_sequence.current:
|
||||
# Dereference the fade curve so it can be garbage collected
|
||||
track_sequence.current.fade_graph = None
|
||||
|
||||
# Reset track_sequence objects
|
||||
track_sequence.previous = track_sequence.current
|
||||
track_sequence.current = None
|
||||
|
||||
# Tell model previous track has finished
|
||||
self.active_proxy_model().previous_track_ended()
|
||||
@ -681,8 +685,8 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
self.show_status_message("Play controls: Enabled", 0)
|
||||
|
||||
# autoplay
|
||||
if not self.stop_autoplay:
|
||||
self.play_next()
|
||||
# if not self.stop_autoplay:
|
||||
# self.play_next()
|
||||
|
||||
def export_playlist_tab(self) -> None:
|
||||
"""Export the current playlist to an m3u file"""
|
||||
|
||||
Loading…
Reference in New Issue
Block a user