Fix issues with Spotify tracks not having ISRCs + others

This commit is contained in:
cloudwithax 2022-07-05 05:12:34 -04:00
parent 2c4c07a349
commit 535c3bfe79
3 changed files with 93 additions and 10 deletions

View File

@ -43,7 +43,63 @@ class Equalizer(Filter):
return _dict return _dict
def __repr__(self) -> str: def __repr__(self) -> str:
return f"<Pomice.EqualizerFilter eq={self.eq} raw={self.raw}>" return f"<Pomice.EqualizerFilter tag={self.tag} eq={self.eq} raw={self.raw}>"
@classmethod
def flat(cls):
"""Equalizer preset which represents a flat EQ board,
with all levels set to their default values.
"""
levels = [
(0, 0.0), (1, 0.0), (2, 0.0), (3, 0.0), (4, 0.0),
(5, 0.0), (6, 0.0), (7, 0.0), (8, 0.0), (9, 0.0),
(10, 0.0), (11, 0.0), (12, 0.0), (13, 0.0), (14, 0.0)
]
return cls(tag="flat", levels=levels)
@classmethod
def boost(cls):
"""Equalizer preset which boosts the sound of a track,
making it sound fun and energetic by increasing the bass
and the highs.
"""
levels = [
(0, -0.075), (1, 0.125), (2, 0.125), (3, 0.1), (4, 0.1),
(5, .05), (6, 0.075), (7, 0.0), (8, 0.0), (9, 0.0),
(10, 0.0), (11, 0.0), (12, 0.125), (13, 0.15), (14, 0.05)
]
return cls(tag="boost", levels=levels)
@classmethod
def metal(cls):
"""Equalizer preset which increases the mids of a track,
preferably one of the metal genre, to make it sound
more full and concert-like.
"""
levels = [
(0, 0.0), (1, 0.1), (2, 0.1), (3, 0.15), (4, 0.13),
(5, 0.1), (6, 0.0), (7, 0.125), (8, 0.175), (9, 0.175),
(10, 0.125), (11, 0.125), (12, 0.1), (13, 0.075), (14, 0.0)
]
return cls(tag="metal", levels=levels)
@classmethod
def piano(cls):
"""Equalizer preset which increases the mids and highs
of a track, preferably a piano based one, to make it
stand out.
"""
levels = [
(0, -0.25), (1, -0.25), (2, -0.125), (3, 0.0),
(4, 0.25), (5, 0.25), (6, 0.0), (7, -0.25), (8, -0.25),
(9, 0.0), (10, 0.0), (11, 0.5), (12, 0.25), (13, -0.025)
]
return cls(tag="piano", levels=levels)
class Timescale(Filter): class Timescale(Filter):
@ -79,8 +135,28 @@ class Timescale(Filter):
"pitch": self.pitch, "pitch": self.pitch,
"rate": self.rate}} "rate": self.rate}}
@classmethod
def vaporwave(cls):
"""Timescale preset which slows down the currently playing track,
giving it the effect of a half-speed record/casette playing.
This preset will assign the tag 'vaporwave'.
"""
return cls(tag="vaporwave", speed=0.8, pitch=0.8)
@classmethod
def nightcore(cls):
"""Timescale preset which speeds up the currently playing track,
which matches up to nightcore, a genre of sped-up music
This preset will assign the tag 'nightcore'.
"""
return cls(tag="nightcore", speed=1.25, pitch=1.3)
def __repr__(self): def __repr__(self):
return f"<Pomice.TimescaleFilter speed={self.speed} pitch={self.pitch} rate={self.rate}>" return f"<Pomice.TimescaleFilter tag={self.tag} speed={self.speed} pitch={self.pitch} rate={self.rate}>"
class Karaoke(Filter): class Karaoke(Filter):
@ -112,7 +188,7 @@ class Karaoke(Filter):
def __repr__(self): def __repr__(self):
return ( return (
f"<Pomice.KaraokeFilter level={self.level} mono_level={self.mono_level} " f"<Pomice.KaraokeFilter tag={self.tag} level={self.level} mono_level={self.mono_level} "
f"filter_band={self.filter_band} filter_width={self.filter_width}>" f"filter_band={self.filter_band} filter_width={self.filter_width}>"
) )
@ -146,7 +222,7 @@ class Tremolo(Filter):
"depth": self.depth}} "depth": self.depth}}
def __repr__(self): def __repr__(self):
return f"<Pomice.TremoloFilter frequency={self.frequency} depth={self.depth}>" return f"<Pomice.TremoloFilter tag={self.tag} frequency={self.frequency} depth={self.depth}>"
class Vibrato(Filter): class Vibrato(Filter):
@ -178,7 +254,7 @@ class Vibrato(Filter):
"depth": self.depth}} "depth": self.depth}}
def __repr__(self): def __repr__(self):
return f"<Pomice.VibratoFilter frequency={self.frequency} depth={self.depth}>" return f"<Pomice.VibratoFilter tag={self.tag} frequency={self.frequency} depth={self.depth}>"
class Rotation(Filter): class Rotation(Filter):
@ -194,7 +270,7 @@ class Rotation(Filter):
self.payload = {"rotation": {"rotationHz": self.rotation_hertz}} self.payload = {"rotation": {"rotationHz": self.rotation_hertz}}
def __repr__(self) -> str: def __repr__(self) -> str:
return f"<Pomice.RotationFilter rotation_hertz={self.rotation_hertz}>" return f"<Pomice.RotationFilter tag={self.tag} rotation_hertz={self.rotation_hertz}>"
class ChannelMix(Filter): class ChannelMix(Filter):
@ -241,7 +317,7 @@ class ChannelMix(Filter):
def __repr__(self) -> str: def __repr__(self) -> str:
return ( return (
f"<Pomice.ChannelMix left_to_left={self.left_to_left} left_to_right={self.left_to_right} " f"<Pomice.ChannelMix tag={self.tag} left_to_left={self.left_to_left} left_to_right={self.left_to_right} "
f"right_to_left={self.right_to_left} right_to_right={self.right_to_right}>" f"right_to_left={self.right_to_left} right_to_right={self.right_to_right}>"
) )
@ -288,7 +364,7 @@ class Distortion(Filter):
def __repr__(self) -> str: def __repr__(self) -> str:
return ( return (
f"<Pomice.Distortion sin_offset={self.sin_offset} sin_scale={self.sin_scale}> " f"<Pomice.Distortion tag={self.tag} sin_offset={self.sin_offset} sin_scale={self.sin_scale}> "
f"cos_offset={self.cos_offset} cos_scale={self.cos_scale} tan_offset={self.tan_offset} " f"cos_offset={self.cos_offset} cos_scale={self.cos_scale} tan_offset={self.tan_offset} "
f"tan_scale={self.tan_scale} offset={self.offset} scale={self.scale}" f"tan_scale={self.tan_scale} offset={self.offset} scale={self.scale}"
) )
@ -307,6 +383,6 @@ class LowPass(Filter):
self.payload = {"lowPass": {"smoothing": self.smoothing}} self.payload = {"lowPass": {"smoothing": self.smoothing}}
def __repr__(self) -> str: def __repr__(self) -> str:
return f"<Pomice.LowPass smoothing={self.smoothing}>" return f"<Pomice.LowPass tag={self.tag} smoothing={self.smoothing}>"

View File

@ -294,6 +294,9 @@ class Player(VoiceProtocol):
if track.spotify: if track.spotify:
# First lets try using the tracks ISRC, every track has one (hopefully) # First lets try using the tracks ISRC, every track has one (hopefully)
try: try:
if not track.isrc:
# We have to bare raise here because theres no other way to skip this block feasibly
raise
search: Track = (await self._node.get_tracks( search: Track = (await self._node.get_tracks(
f"{track._search_type}:{track.isrc}", ctx=track.ctx))[0] f"{track._search_type}:{track.isrc}", ctx=track.ctx))[0]
except: except:

View File

@ -9,7 +9,11 @@ class Track:
self.artists = ", ".join(artist["name"] for artist in data["artists"]) self.artists = ", ".join(artist["name"] for artist in data["artists"])
self.length = data["duration_ms"] self.length = data["duration_ms"]
self.id = data["id"] self.id = data["id"]
if data.get("external_ids"):
self.isrc = data["external_ids"]["isrc"] self.isrc = data["external_ids"]["isrc"]
else:
self.isrc = None
if data.get("album") and data["album"].get("images"): if data.get("album") and data["album"].get("images"):
self.image = data["album"]["images"][0]["url"] self.image = data["album"]["images"][0]["url"]