librespot-python/librespot/audio/decoders.py

36 lines
1.3 KiB
Python
Raw Normal View History

2021-02-24 00:46:59 +01:00
from __future__ import annotations
2021-09-12 05:58:24 +02:00
from librespot.proto.Metadata_pb2 import AudioFile
2021-02-24 00:46:59 +01:00
import enum
2021-04-24 12:17:02 +02:00
import typing
2021-02-24 00:46:59 +01:00
class AudioQuality(enum.Enum):
NORMAL = 0x00
HIGH = 0x01
VERY_HIGH = 0x02
@staticmethod
def get_quality(audio_format: AudioFile.Format) -> AudioQuality:
2021-05-22 03:27:30 +02:00
if (audio_format == AudioFile.MP3_96
or audio_format == AudioFile.OGG_VORBIS_96
or audio_format == AudioFile.AAC_24_NORM):
2021-02-24 00:46:59 +01:00
return AudioQuality.NORMAL
2021-05-22 03:27:30 +02:00
if (audio_format == AudioFile.MP3_160
or audio_format == AudioFile.MP3_160_ENC
or audio_format == AudioFile.OGG_VORBIS_160
or audio_format == AudioFile.AAC_24):
2021-02-24 00:46:59 +01:00
return AudioQuality.HIGH
2021-05-22 03:27:30 +02:00
if (audio_format == AudioFile.MP3_320
or audio_format == AudioFile.MP3_256
or audio_format == AudioFile.OGG_VORBIS_320
or audio_format == AudioFile.AAC_48):
2021-02-24 00:46:59 +01:00
return AudioQuality.VERY_HIGH
raise RuntimeError("Unknown format: {}".format(format))
2021-02-24 00:46:59 +01:00
2021-09-12 05:58:24 +02:00
def get_matches(self, files: typing.List[AudioFile]) -> typing.List[AudioFile]:
2021-02-24 00:46:59 +01:00
file_list = []
for file in files:
2021-09-12 05:58:24 +02:00
if hasattr(file, "format") and AudioQuality.get_quality(file.format) == self:
2021-02-24 00:46:59 +01:00
file_list.append(file)
return file_list