Created own metadata dataclass instead of using TinyTag.tags()

This commit is contained in:
The Wobbler 2025-03-04 17:24:24 +01:00
parent 7ff1ad7a02
commit 072f5c7691
3 changed files with 32 additions and 16 deletions

View file

@ -3,18 +3,35 @@
from pydub import AudioSegment
from pygame.mixer import Sound
from tinytag import TinyTag
from tinytag.tinytag import Images as TTImages
from dataclasses import dataclass
@dataclass
class TrackMetadata:
title: str
artist: str
album: str
images: TTImages | None=None # tinytag images
class Track:
"""
Class containing data for a track like file path, raw data...
Class representing a track.
"""
def __init__(self, app, path: str, cache: bool=False):
def __init__(self, app, path: str, cache: bool=False, metadata: TrackMetadata=None):
self.app = app
self.path = path
self.tags = TinyTag.get(self.path, ignore_errors=True, duration=False)
if metadata is None:
# load metadata from audio file
tags = TinyTag.get(self.path, ignore_errors=True, duration=False)
self.metadata = TrackMetadata(tags.title, tags.artist, tags.album)
else:
self.metadata = metadata
self.cached = False
self.audio = None
@ -67,7 +84,8 @@ class Track:
self.duration = len(self.audio) # track duration in milliseconds
self.tags = TinyTag.get(self.path, ignore_errors=True, duration=False, image=True) # metadata with images
# metadata with images
self.metadata.images = TinyTag.get(self.path, ignore_errors=True, duration=False, image=True).images
self.cached = True
@ -78,11 +96,9 @@ class Track:
self.sound = None
self.duration = 0
self.tags = TinyTag.get(self.path, ignore_errors=True, duration=False) # metadata without images
self.metadata.images = None
def load_audio(self):
#file_type = self.path.split(".")[-1]
self.audio = AudioSegment.from_file(self.path)
def remaining(self, position: int):