import os from lyra_worker.probe import ProbeResult from lyra_worker.quality import quality_class from lyra_worker.types import Quality _LOSSLESS_EXT = {".flac", ".wav", ".alac", ".aiff", ".aif"} class MutagenProbe: """Real AudioProbe via mutagen (imported lazily; not unit-tested offline).""" def probe(self, path: str) -> ProbeResult: import mutagen ext = os.path.splitext(path)[1].lower() audio = mutagen.File(path, easy=True) artist = album = "" bit_depth = sample_rate = None if audio is not None: artist = (audio.get("artist") or [""])[0] album = (audio.get("album") or [""])[0] info = getattr(audio, "info", None) bit_depth = getattr(info, "bits_per_sample", None) sample_rate = getattr(info, "sample_rate", None) q = quality_class(Quality( fmt=ext.lstrip(".").upper(), lossless=ext in _LOSSLESS_EXT, bit_depth=bit_depth, sample_rate=sample_rate, )) return ProbeResult(artist=artist, album=album, fmt=ext.lstrip(".").upper(), quality_class=q)