mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-11-12 20:15:10 +00:00
fix(music): stop reading a kb/s bitrate as a hi-res sample rate
A lossy label such as "256 kb/s AAC" or "MP3 320 kb/s" no longer gets the per-track Hi-Res badge.
This commit is contained in:
@@ -0,0 +1,22 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
from unshackle.core.music.renderer import MusicRenderer
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("label", "hires"),
|
||||||
|
[
|
||||||
|
("FLAC 24-bit/96kHz", True),
|
||||||
|
("24-bit / 96 kHz", True),
|
||||||
|
("FLAC 16-bit/88.2kHz", True),
|
||||||
|
("96k", True),
|
||||||
|
("FLAC 16-bit/44.1kHz", False),
|
||||||
|
("Lossless", False),
|
||||||
|
("256 kb/s AAC", False),
|
||||||
|
("MP3 320 kb/s", False),
|
||||||
|
("320kbps", False),
|
||||||
|
("AAC 96 kbit/s", False),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_is_hires_quality_reads_sample_rate_not_bitrate(label: str, hires: bool) -> None:
|
||||||
|
assert MusicRenderer.is_hires_quality(label) is hires
|
||||||
@@ -285,6 +285,7 @@ class MusicRenderer:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def is_hires_quality(value: str) -> bool:
|
def is_hires_quality(value: str) -> bool:
|
||||||
|
"""Return True for a label above 16-bit or 48 kHz; a "k" before "b" is a bitrate ("256 kb/s"), not a rate."""
|
||||||
lowered = value.lower()
|
lowered = value.lower()
|
||||||
bit_depth = None
|
bit_depth = None
|
||||||
sample_rate = None
|
sample_rate = None
|
||||||
@@ -293,7 +294,7 @@ class MusicRenderer:
|
|||||||
if bit_match:
|
if bit_match:
|
||||||
bit_depth = int(bit_match.group("bits"))
|
bit_depth = int(bit_match.group("bits"))
|
||||||
|
|
||||||
sample_match = re.search(r"(?P<rate>\d+(?:\.\d+)?)\s*k(?:hz)?", lowered)
|
sample_match = re.search(r"(?P<rate>\d+(?:\.\d+)?)\s*k(?!b)(?:hz)?", lowered)
|
||||||
if sample_match:
|
if sample_match:
|
||||||
sample_rate = float(sample_match.group("rate"))
|
sample_rate = float(sample_match.group("rate"))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user