mirror of
https://github.com/zhaarey/AppleMusicDecrypt.git
synced 2025-10-23 15:11:06 +00:00
71 lines
1.9 KiB
Python
71 lines
1.9 KiB
Python
from typing import Optional
|
|
|
|
from pydantic import BaseModel
|
|
|
|
defaultId = "0"
|
|
prefetchKey = "skd://itunes.apple.com/P000000000/s1/e1"
|
|
|
|
|
|
class SampleInfo(BaseModel):
|
|
data: bytes
|
|
duration: int
|
|
descIndex: int
|
|
|
|
|
|
class SongInfo(BaseModel):
|
|
codec: str
|
|
raw: bytes
|
|
samples: list[SampleInfo]
|
|
nhml: str
|
|
decoderParams: Optional[bytes] = None
|
|
|
|
|
|
class Codec:
|
|
ALAC = "alac"
|
|
EC3 = "ec3"
|
|
AC3 = "ac3"
|
|
AAC_BINAURAL = "aac-binaural"
|
|
AAC_DOWNMIX = "aac-downmix"
|
|
AAC = "aac"
|
|
|
|
|
|
class CodecKeySuffix:
|
|
KeySuffixAtmos = "c24"
|
|
KeySuffixAlac = "c23"
|
|
KeySuffixAAC = "c22"
|
|
KeySuffixAACDownmix = "c24"
|
|
KeySuffixAACBinaural = "c24"
|
|
KeySuffixDefault = "c6"
|
|
|
|
|
|
class CodecRegex:
|
|
RegexCodecAtmos = "audio-(atmos|ec3)-\\d{4}$"
|
|
RegexCodecAC3 = "audio-ac3-\\d{3}$"
|
|
RegexCodecAlac = "audio-alac-stereo-\\d{5,6}-\\d{2}$"
|
|
RegexCodecBinaural = "audio-stereo-\\d{3}-binaural$"
|
|
RegexCodecDownmix = "audio-stereo-\\d{3}-downmix$"
|
|
RegexCodecAAC = "audio-stereo-\\d{3}$"
|
|
|
|
@classmethod
|
|
def get_pattern_by_codec(cls, codec: str):
|
|
codec_pattern_mapping = {Codec.ALAC: cls.RegexCodecAlac, Codec.EC3: cls.RegexCodecAtmos,
|
|
Codec.AAC_DOWNMIX: cls.RegexCodecDownmix, Codec.AAC_BINAURAL: cls.RegexCodecBinaural,
|
|
Codec.AAC: cls.RegexCodecAAC, Codec.AC3: cls.RegexCodecAC3}
|
|
return codec_pattern_mapping.get(codec)
|
|
|
|
|
|
class AuthParams(BaseModel):
|
|
dsid: str
|
|
accountToken: str
|
|
accountAccessToken: str
|
|
storefront: str
|
|
|
|
|
|
class GlobalAuthParams(AuthParams):
|
|
anonymousAccessToken: str
|
|
|
|
@classmethod
|
|
def from_auth_params_and_token(cls, auth_params: AuthParams, token: str):
|
|
return cls(dsid=auth_params.dsid, accountToken=auth_params.accountToken, anonymousAccessToken=token,
|
|
accountAccessToken=auth_params.accountAccessToken, storefront=auth_params.storefront)
|