This commit is contained in:
2026-04-10 21:59:36 +02:00
parent de04ba84eb
commit 9d7adf42c1
8 changed files with 138 additions and 155 deletions

View File

@@ -33,6 +33,7 @@ class Player(QObject):
self._duration: int = 0
self._demo_mode = False
self._demo_stop_sec = 10
self._demo_fading = False
self._volume = 78
if VLC_AVAILABLE:
@@ -78,11 +79,13 @@ class Player(QObject):
self.state_changed.emit("playing")
def play_demo(self, stop_at_sec: int = 10):
"""Afspil fra start og stop automatisk ved stop_at_sec."""
"""Afspil fra start og stop automatisk ved stop_at_sec med 2 sek fade-out."""
self._demo_mode = True
self._demo_stop_sec = stop_at_sec
self._demo_fading = False
if VLC_AVAILABLE and self._media_player:
self._media_player.set_time(0)
self._media_player.audio_set_volume(self._volume)
self._media_player.play()
self._poll_timer.start()
self.state_changed.emit("playing")
@@ -94,7 +97,9 @@ class Player(QObject):
def stop(self):
self._demo_mode = False
self._demo_fading = False
if VLC_AVAILABLE and self._media_player:
self._media_player.audio_set_volume(self._volume)
self._media_player.stop()
self._poll_timer.stop()
self.position_changed.emit(0.0)
@@ -138,15 +143,33 @@ class Player(QObject):
self.position_changed.emit(pos)
self.time_changed.emit(cur, self._duration)
# Demo-stop
# Demo fade-out og stop
if self._demo_mode and cur >= self._demo_stop_sec:
# Færdig — gendan volumen og stop
if VLC_AVAILABLE and self._media_player:
self._media_player.audio_set_volume(self._volume)
self.stop()
self._demo_mode = False
self._demo_fading = False
self.position_changed.emit(0.0)
self.time_changed.emit(0, self._duration)
self.state_changed.emit("demo_ended")
return
# Demo fade-out — de sidste 2 sekunder
FADE_SEC = 2.0
if self._demo_mode and VLC_AVAILABLE and self._media_player:
secs_left = self._demo_stop_sec - cur
if secs_left <= FADE_SEC and secs_left > 0:
# Fade fra fuld volumen til 0 over FADE_SEC sekunder
fade_fraction = secs_left / FADE_SEC # 1.0 → 0.0
faded_vol = int(self._volume * fade_fraction)
self._media_player.audio_set_volume(max(0, faded_vol))
self._demo_fading = True
elif not self._demo_fading:
# Ikke i fade-zone endnu — sørg for fuld volumen
self._media_player.audio_set_volume(self._volume)
# VU-meter: brug VLC's audio-amplitude hvis tilgængelig, ellers simulér
if VLC_AVAILABLE and self._media_player and self._media_player.is_playing():
# VLC eksponerer ikke amplitude direkte — vi bruger en blød simulation