From 8496e6871b5685539bac675f5df9c3d60fb488e1 Mon Sep 17 00:00:00 2001 From: William Bell <62452284+Ugric@users.noreply.github.com> Date: Fri, 12 Dec 2025 12:55:53 +0000 Subject: [PATCH] start working on adding song info inside player --- app.py | 4 ++-- player.py => gapless_player.py | 35 +++++++++++++++++++--------------- 2 files changed, 22 insertions(+), 17 deletions(-) rename player.py => gapless_player.py (93%) diff --git a/app.py b/app.py index 7d6faac..d25357f 100644 --- a/app.py +++ b/app.py @@ -1,7 +1,7 @@ import pyray as pr import math from ctypes import c_float -from player import FFQueuePlayer, build_jellyfin_audio_url, server, client +from gapless_player import GaplessPlayer, build_jellyfin_audio_url, server, client # --- Configuration Constants --- INITIAL_SCREEN_WIDTH = 800 @@ -173,7 +173,7 @@ pr.set_config_flags(pr.FLAG_MSAA_4X_HINT) pr.init_window(state["screen_width"], state["screen_height"], "UgPod") pr.set_target_fps(TARGET_FPS) -player = FFQueuePlayer() +player = GaplessPlayer() print("add queue") player.add_to_queue(build_jellyfin_audio_url(server["address"], client.jellyfin.get_item("dab6efb24bb2372794d2b4fb53a12376")["Id"], server["AccessToken"], server["UserId"])) diff --git a/player.py b/gapless_player.py similarity index 93% rename from player.py rename to gapless_player.py index f6e9104..01d00e0 100644 --- a/player.py +++ b/gapless_player.py @@ -17,36 +17,41 @@ import queue import sys import io import fcntl +from dataclasses import dataclass os.makedirs("logs", exist_ok=True) -class FFQueuePlayer: - def __init__(self, samplerate=44100, channels=2): +@dataclass +class Song: + url: str + duration: float + name: str + album_name:str + album_cover:str + artist_name:str + + +class GaplessPlayer: + def __init__(self, samplerate:int=44100, channels:int=2): self.samplerate = samplerate self.channels = channels self.proc = None self.next_proc = None - self.current_file = None - self.next_file = None + self.current_song: Song = None + self.next_file: Song = None self.next_preload_state = 0 - self.last_sample = 0.0 - self.samples_since_last_sample = 0 - self.closed=False self.playing = False self.position = 0.0 - self.playback_info = None - self.next_playback_info=None - self.song = 0 + self.song_list = [] - self.song_queue = queue.Queue() - self.swap_pending = False + self.current_song_in_list = -1 self.lock = threading.Lock() @@ -73,7 +78,7 @@ class FFQueuePlayer: "-" ], stdout=subprocess.PIPE, - stderr=open('logs/'+str(self.song)+".txt", "wb") + stderr=subprocess.PIPE ) # --- make stdout non-blocking --- @@ -117,8 +122,8 @@ class FFQueuePlayer: print("ffprobe error:", e) return None - def add_to_queue(self, url): - self.song_queue.put_nowait(url) + def add_to_queue(self, song:Song): + self.current_song_in_list.append(song) def play(self): with self.lock: