diff --git a/.coverage b/.coverage index 46f32e8..5371006 100644 Binary files a/.coverage and b/.coverage differ diff --git a/docs/.doctrees/api.doctree b/docs/.doctrees/api.doctree index 83a7e7a..3ff23de 100644 Binary files a/docs/.doctrees/api.doctree and b/docs/.doctrees/api.doctree differ diff --git a/docs/.doctrees/api/minim.audio.Audio.doctree b/docs/.doctrees/api/minim.audio.Audio.doctree index 80f78d8..b398911 100644 Binary files a/docs/.doctrees/api/minim.audio.Audio.doctree and b/docs/.doctrees/api/minim.audio.Audio.doctree differ diff --git a/docs/.doctrees/api/minim.audio.FLACAudio.doctree b/docs/.doctrees/api/minim.audio.FLACAudio.doctree index 73ea49b..e4c3e76 100644 Binary files a/docs/.doctrees/api/minim.audio.FLACAudio.doctree and b/docs/.doctrees/api/minim.audio.FLACAudio.doctree differ diff --git a/docs/.doctrees/api/minim.audio.MP3Audio.doctree b/docs/.doctrees/api/minim.audio.MP3Audio.doctree index 49cff64..49b676e 100644 Binary files a/docs/.doctrees/api/minim.audio.MP3Audio.doctree and b/docs/.doctrees/api/minim.audio.MP3Audio.doctree differ diff --git a/docs/.doctrees/api/minim.audio.MP4Audio.doctree b/docs/.doctrees/api/minim.audio.MP4Audio.doctree index 81d42a7..58c1a57 100644 Binary files a/docs/.doctrees/api/minim.audio.MP4Audio.doctree and b/docs/.doctrees/api/minim.audio.MP4Audio.doctree differ diff --git a/docs/.doctrees/api/minim.audio.OGGAudio.doctree b/docs/.doctrees/api/minim.audio.OGGAudio.doctree index f2b008d..dcb050d 100644 Binary files a/docs/.doctrees/api/minim.audio.OGGAudio.doctree and b/docs/.doctrees/api/minim.audio.OGGAudio.doctree differ diff --git a/docs/.doctrees/api/minim.audio.WAVEAudio.doctree b/docs/.doctrees/api/minim.audio.WAVEAudio.doctree index 6f7e90f..e2d2c5d 100644 Binary files a/docs/.doctrees/api/minim.audio.WAVEAudio.doctree and b/docs/.doctrees/api/minim.audio.WAVEAudio.doctree differ diff --git a/docs/.doctrees/api/minim.audio.doctree b/docs/.doctrees/api/minim.audio.doctree index 0e7b5c8..f27e9d8 100644 Binary files a/docs/.doctrees/api/minim.audio.doctree and b/docs/.doctrees/api/minim.audio.doctree differ diff --git a/docs/.doctrees/api/minim.doctree b/docs/.doctrees/api/minim.doctree index 5018b3d..8e1ed7e 100644 Binary files a/docs/.doctrees/api/minim.doctree and b/docs/.doctrees/api/minim.doctree differ diff --git a/docs/.doctrees/api/minim.itunes.SearchAPI.doctree b/docs/.doctrees/api/minim.itunes.SearchAPI.doctree index b68a807..9f587a6 100644 Binary files a/docs/.doctrees/api/minim.itunes.SearchAPI.doctree and b/docs/.doctrees/api/minim.itunes.SearchAPI.doctree differ diff --git a/docs/.doctrees/api/minim.itunes.doctree b/docs/.doctrees/api/minim.itunes.doctree index 13786bd..3c39526 100644 Binary files a/docs/.doctrees/api/minim.itunes.doctree and b/docs/.doctrees/api/minim.itunes.doctree differ diff --git a/docs/.doctrees/api/minim.qobuz.PrivateAPI.doctree b/docs/.doctrees/api/minim.qobuz.PrivateAPI.doctree index 9aff8e9..c20bc91 100644 Binary files a/docs/.doctrees/api/minim.qobuz.PrivateAPI.doctree and b/docs/.doctrees/api/minim.qobuz.PrivateAPI.doctree differ diff --git a/docs/.doctrees/api/minim.qobuz.doctree b/docs/.doctrees/api/minim.qobuz.doctree index 5014e55..5cbed70 100644 Binary files a/docs/.doctrees/api/minim.qobuz.doctree and b/docs/.doctrees/api/minim.qobuz.doctree differ diff --git a/docs/.doctrees/api/minim.spotify.PrivateLyricsService.doctree b/docs/.doctrees/api/minim.spotify.PrivateLyricsService.doctree index 8242ee6..e3e2e93 100644 Binary files a/docs/.doctrees/api/minim.spotify.PrivateLyricsService.doctree and b/docs/.doctrees/api/minim.spotify.PrivateLyricsService.doctree differ diff --git a/docs/.doctrees/api/minim.spotify.WebAPI.doctree b/docs/.doctrees/api/minim.spotify.WebAPI.doctree index 8f9954f..b0fb6ac 100644 Binary files a/docs/.doctrees/api/minim.spotify.WebAPI.doctree and b/docs/.doctrees/api/minim.spotify.WebAPI.doctree differ diff --git a/docs/.doctrees/api/minim.spotify.doctree b/docs/.doctrees/api/minim.spotify.doctree index 8faf35a..cd3dffd 100644 Binary files a/docs/.doctrees/api/minim.spotify.doctree and b/docs/.doctrees/api/minim.spotify.doctree differ diff --git a/docs/.doctrees/api/minim.tidal.API.doctree b/docs/.doctrees/api/minim.tidal.API.doctree index f521133..ee2065d 100644 Binary files a/docs/.doctrees/api/minim.tidal.API.doctree and b/docs/.doctrees/api/minim.tidal.API.doctree differ diff --git a/docs/.doctrees/api/minim.tidal.PrivateAPI.doctree b/docs/.doctrees/api/minim.tidal.PrivateAPI.doctree index 6d42f78..34934a6 100644 Binary files a/docs/.doctrees/api/minim.tidal.PrivateAPI.doctree and b/docs/.doctrees/api/minim.tidal.PrivateAPI.doctree differ diff --git a/docs/.doctrees/api/minim.tidal.doctree b/docs/.doctrees/api/minim.tidal.doctree index 19753cc..9be58e4 100644 Binary files a/docs/.doctrees/api/minim.tidal.doctree and b/docs/.doctrees/api/minim.tidal.doctree differ diff --git a/docs/.doctrees/api/minim.utility.doctree b/docs/.doctrees/api/minim.utility.doctree index bcc4181..91c1de8 100644 Binary files a/docs/.doctrees/api/minim.utility.doctree and b/docs/.doctrees/api/minim.utility.doctree differ diff --git a/docs/.doctrees/api/minim.utility.format_multivalue.doctree b/docs/.doctrees/api/minim.utility.format_multivalue.doctree new file mode 100644 index 0000000..6e35517 Binary files /dev/null and b/docs/.doctrees/api/minim.utility.format_multivalue.doctree differ diff --git a/docs/.doctrees/api/minim.utility.gestalt_ratio.doctree b/docs/.doctrees/api/minim.utility.gestalt_ratio.doctree new file mode 100644 index 0000000..59f3804 Binary files /dev/null and b/docs/.doctrees/api/minim.utility.gestalt_ratio.doctree differ diff --git a/docs/.doctrees/api/minim.utility.gestalt_ratios.doctree b/docs/.doctrees/api/minim.utility.gestalt_ratios.doctree new file mode 100644 index 0000000..b90b314 Binary files /dev/null and b/docs/.doctrees/api/minim.utility.gestalt_ratios.doctree differ diff --git a/docs/.doctrees/api/minim.utility.levenshtein_ratio.doctree b/docs/.doctrees/api/minim.utility.levenshtein_ratio.doctree index 820c6b8..68f01a9 100644 Binary files a/docs/.doctrees/api/minim.utility.levenshtein_ratio.doctree and b/docs/.doctrees/api/minim.utility.levenshtein_ratio.doctree differ diff --git a/docs/.doctrees/api/minim.utility.levenshtein_ratios.doctree b/docs/.doctrees/api/minim.utility.levenshtein_ratios.doctree new file mode 100644 index 0000000..9d3caab Binary files /dev/null and b/docs/.doctrees/api/minim.utility.levenshtein_ratios.doctree differ diff --git a/docs/.doctrees/api/minim.utility.multivalue_formatter.doctree b/docs/.doctrees/api/minim.utility.multivalue_formatter.doctree index df8acc7..286c06f 100644 Binary files a/docs/.doctrees/api/minim.utility.multivalue_formatter.doctree and b/docs/.doctrees/api/minim.utility.multivalue_formatter.doctree differ diff --git a/docs/.doctrees/environment.pickle b/docs/.doctrees/environment.pickle index 99e8782..b7f2c51 100644 Binary files a/docs/.doctrees/environment.pickle and b/docs/.doctrees/environment.pickle differ diff --git a/docs/.doctrees/index.doctree b/docs/.doctrees/index.doctree index 3362a43..5824f41 100644 Binary files a/docs/.doctrees/index.doctree and b/docs/.doctrees/index.doctree differ diff --git a/docs/.doctrees/notebooks/getting_started.doctree b/docs/.doctrees/notebooks/getting_started.doctree index 594c107..2da92b6 100644 Binary files a/docs/.doctrees/notebooks/getting_started.doctree and b/docs/.doctrees/notebooks/getting_started.doctree differ diff --git a/docs/.doctrees/notebooks/user_guide/editing_audio_metadata.doctree b/docs/.doctrees/notebooks/user_guide/editing_audio_metadata.doctree index c8f1c90..d50df0c 100644 Binary files a/docs/.doctrees/notebooks/user_guide/editing_audio_metadata.doctree and b/docs/.doctrees/notebooks/user_guide/editing_audio_metadata.doctree differ diff --git a/docs/.doctrees/notebooks/user_guide/getting_recommendations.doctree b/docs/.doctrees/notebooks/user_guide/getting_recommendations.doctree index 3331e67..d8b1f2a 100644 Binary files a/docs/.doctrees/notebooks/user_guide/getting_recommendations.doctree and b/docs/.doctrees/notebooks/user_guide/getting_recommendations.doctree differ diff --git a/docs/.doctrees/notebooks/user_guide/transferring_music_libraries.doctree b/docs/.doctrees/notebooks/user_guide/transferring_music_libraries.doctree index 7dec405..ae33750 100644 Binary files a/docs/.doctrees/notebooks/user_guide/transferring_music_libraries.doctree and b/docs/.doctrees/notebooks/user_guide/transferring_music_libraries.doctree differ diff --git a/docs/.doctrees/user_guide.doctree b/docs/.doctrees/user_guide.doctree index f8f1626..dc4ac63 100644 Binary files a/docs/.doctrees/user_guide.doctree and b/docs/.doctrees/user_guide.doctree differ diff --git a/docs/_modules/index.html b/docs/_modules/index.html index 8534dbf..2cba801 100644 --- a/docs/_modules/index.html +++ b/docs/_modules/index.html @@ -8,7 +8,7 @@ Overview: module code - Minim 1.0.0 documentation - + @@ -196,8 +196,9 @@
  • utility
  • diff --git a/docs/_modules/minim/audio.html b/docs/_modules/minim/audio.html index a18e5f3..22cd0d9 100644 --- a/docs/_modules/minim/audio.html +++ b/docs/_modules/minim/audio.html @@ -8,7 +8,7 @@ minim.audio - Minim 1.0.0 documentation - + @@ -196,8 +196,9 @@
  • utility
  • @@ -249,8 +250,7 @@

    Source code for minim.audio

     
     from . import (
         base64, datetime, logging, pathlib, re, subprocess, urllib,
    -    utility,
    -    FOUND_FFMPEG, FFMPEG_CODECS, Any, Union
    +    utility, FOUND_FFMPEG, FFMPEG_CODECS, Any, Union
     )
     from .qobuz import _parse_performers
     
    @@ -312,7 +312,7 @@ 

    Source code for minim.audio

                     value = ([sv for v in value for sv in getattr(v, base)]
                              if len(value) > 1 else getattr(value[0], base))
                     if list not in self._FIELDS_TYPES[field]:
    -                    value = utility.multivalue_formatter(value, False, 
    +                    value = utility.format_multivalue(value, False, 
                                                              primary=True)
                         if type(value) not in self._FIELDS_TYPES[field]:
                             try:
    @@ -378,7 +378,7 @@ 

    Source code for minim.audio

             for field, (frame, base, func) in self._FIELDS.items():
                 value = getattr(self, field)
                 if value:
    -                value = utility.multivalue_formatter(
    +                value = utility.format_multivalue(
                         value, self._multivalue, sep=self._sep
                     )
                     self._tags.add(
    @@ -478,7 +478,7 @@ 

    Source code for minim.audio

                 value = self._tags.get(key)
                 if value:
                     if list not in self._FIELDS_TYPES[field]:
    -                    value = utility.multivalue_formatter(value, False, 
    +                    value = utility.format_multivalue(value, False, 
                                                              primary=True)
                         if type(value) not in self._FIELDS_TYPES[field]:
                             try:
    @@ -558,7 +558,7 @@ 

    Source code for minim.audio

             for field, (key, func) in (self._FIELDS | self._FIELDS_SPECIAL).items():
                 value = getattr(self, field)
                 if value:
    -                value = utility.multivalue_formatter(
    +                value = utility.format_multivalue(
                         value, self._multivalue, sep=self._sep
                     )
                     self._tags[key] = func(value) if func else value
    @@ -638,9 +638,9 @@ 

    Source code for minim.audio

     
                * :code:`("(.*) - (.*)", ("artist", "title"))` matches 
                  filenames like "Taylor Swift - Cruel Summer.flac".
    -           * :code:`("(\d*) - (.*)", ("track_number", "title"))` matches
    +           * :code:`("(\\d*) - (.*)", ("track_number", "title"))` matches
                  filenames like "04 - The Man.m4a".
    -           * :code:`("(\d*) (.*)", ("track_number", "title"))` matches
    +           * :code:`("(\\d*) (.*)", ("track_number", "title"))` matches
                  filenames like "13 You Need to Calm Down.mp3".
     
         multivalue : `bool`
    @@ -1075,6 +1075,135 @@ 

    Source code for minim.audio

                     self.copyright = album_data["copyright"]
    +
    +[docs] + def set_metadata_using_qobuz( + self, data: dict[str, Any], *, artwork_size: str = "large", + comment: str = None, overwrite: bool = False) -> None: + + """ + Populate tags using data retrieved from the Qobuz API. + + Parameters + ---------- + data : `dict` + Information about the track in JSON format obtained using + the Qobuz API via :meth:`minim.qobuz.PrivateAPI.get_track` + or :meth:`minim.qobuz.PrivateAPI.search`. + + artwork_size : `str`, keyword-only, default: :code:`"large"` + Artwork size. + + **Valid values**: :code:`"large"`, :code:`"small"`, or + :code:`"thumbnail"`. + + comment : `str`, keyword-only, optional + Comment or description. + + overwrite : `bool`, keyword-only, default: :code:`False` + Determines whether existing metadata should be overwritten. + """ + + if self.album is None or overwrite: + self.album = data["album"]["title"].rstrip() + if (album_artists := data["album"].get("artists")): + album_feat_artist = [a["name"] for a in album_artists + if "featured-artist" in a["roles"]] + if album_feat_artist and "feat." not in self.album: + self.album += (" [feat. {}]" if "(" in self.album + else " (feat. {})").format( + utility.format_multivalue(album_feat_artist, False) + ) + if data["album"]["version"]: + self.album += ( + " [{}]" if "(" in self.album else " ({})" + ).format(data['album']['version']) + if self.album_artist is None or overwrite: + if (album_artists := data["album"].get("artists")): + album_artist = [a["name"] for a in album_artists + if "main-artist" in a["roles"]] + album_main_artist = data["album"]["artist"]["name"] + if album_main_artist in album_artist: + if (i := album_artist.index(album_main_artist) + if album_main_artist in album_artist else 0) != 0: + album_artist.insert(0, album_artist.pop(i)) + self.album_artist = album_artist + else: + self.album_artist = album_main_artist + else: + self.album_artist = data["album"]["artist"]["name"] + + credits = _parse_performers( + data["performers"], + roles=["MainArtist", "FeaturedArtist", "Composers"] + ) + if self.artist is None or overwrite: + self.artist = credits.get("main_artist") or data["performer"]["name"] + if self.artwork is None or overwrite: + if artwork_size not in \ + (ARTWORK_SIZES := {"large", "small", "thumbnail"}): + emsg = (f"Invalid artwork size '{artwork_size}'. " + f"Valid values: {ARTWORK_SIZES}.") + raise ValueError(emsg) + self.artwork = data["album"]["image"][artwork_size] + self._artwork_format = pathlib.Path(self.artwork).suffix[1:] + if self.comment is None or overwrite: + self.comment = comment + if self.composer is None or overwrite: + self.composer = ( + credits.get("composers") + or (data["composer"]["name"] if hasattr(data, "composer") + else None) + ) + if self.copyright is None or overwrite: + self.copyright = data["album"].get("copyright") + if self.date is None or overwrite: + self.date = min( + datetime.datetime.utcfromtimestamp(dt) if isinstance(dt, int) + else datetime.datetime.strptime(dt, "%Y-%m-%d") if isinstance(dt, str) + else datetime.datetime.max for dt in ( + data.get(k) for k in { + "release_date_original", + "release_date_download", + "release_date_stream", + "release_date_purchase", + "purchasable_at", + "streamable_at" + } + ) + ).strftime('%Y-%m-%dT%H:%M:%SZ') + if self.disc_number is None or overwrite: + self.disc_number = data["media_number"] + if self.disc_count is None or overwrite: + self.disc_count = data["album"]["media_count"] + if self.genre is None or overwrite: + self.genre = data["album"]["genre"]["name"] + if self.isrc is None or overwrite: + self.isrc = data["isrc"] + if self.title is None or overwrite: + self.title = data["title"].rstrip() + if (feat_artist := credits.get("featured_artist")) \ + and "feat." not in self.title: + self.title += (" [feat. {}]" if "(" in self.title + else " (feat. {})").format( + utility.format_multivalue(feat_artist, False) + ) + if data["version"]: + self.title += (" [{}]" if "(" in self.title + else " ({})").format(data['version']) + if self.track_number is None or overwrite: + self.track_number = data["track_number"] + if self.track_count is None or overwrite: + self.track_count = data["album"]["tracks_count"] + + if data["album"].get("release_type") == "single" \ + and self.album == self.title: + self.album += " - Single" + self.album_artist = self.artist = max( + self.artist, self.album_artist, key=len + )
    + +
    [docs] def set_metadata_using_spotify( @@ -1281,135 +1410,6 @@

    Source code for minim.audio

                             a["name"] for a in album_data["artists"] 
                             if a["type"] == "MAIN"
                         ]
    - - -
    -[docs] - def set_metadata_using_qobuz( - self, data: dict[str, Any], *, artwork_size: str = "large", - comment: str = None, overwrite: bool = False) -> None: - - """ - Populate tags using data retrieved from the Qobuz API. - - Parameters - ---------- - data : `dict` - Information about the track in JSON format obtained using - the Qobuz API via :meth:`minim.qobuz.PrivateAPI.get_track` - or :meth:`minim.qobuz.PrivateAPI.search`. - - artwork_size : `str`, keyword-only, default: :code:`"large"` - Artwork size. - - **Valid values**: :code:`"large"`, :code:`"small"`, or - :code:`"thumbnail"`. - - comment : `str`, keyword-only, optional - Comment or description. - - overwrite : `bool`, keyword-only, default: :code:`False` - Determines whether existing metadata should be overwritten. - """ - - if self.album is None or overwrite: - self.album = data["album"]["title"].rstrip() - if (album_artists := data["album"].get("artists")): - album_feat_artist = [a["name"] for a in album_artists - if "featured-artist" in a["roles"]] - if album_feat_artist and "feat." not in self.album: - self.album += (" [feat. {}]" if "(" in self.album - else " (feat. {})").format( - utility.multivalue_formatter(album_feat_artist, False) - ) - if data["album"]["version"]: - self.album += ( - " [{}]" if "(" in self.album else " ({})" - ).format(data['album']['version']) - if self.album_artist is None or overwrite: - if (album_artists := data["album"].get("artists")): - album_artist = [a["name"] for a in album_artists - if "main-artist" in a["roles"]] - album_main_artist = data["album"]["artist"]["name"] - if album_main_artist in album_artist: - if (i := album_artist.index(album_main_artist) - if album_main_artist in album_artist else 0) != 0: - album_artist.insert(0, album_artist.pop(i)) - self.album_artist = album_artist - else: - self.album_artist = album_main_artist - else: - self.album_artist = data["album"]["artist"]["name"] - - credits = _parse_performers( - data["performers"], - roles=["MainArtist", "FeaturedArtist", "Composers"] - ) - if self.artist is None or overwrite: - self.artist = credits.get("main_artist") or data["performer"]["name"] - if self.artwork is None or overwrite: - if artwork_size not in \ - (ARTWORK_SIZES := {"large", "small", "thumbnail"}): - emsg = (f"Invalid artwork size '{artwork_size}'. " - f"Valid values: {ARTWORK_SIZES}.") - raise ValueError(emsg) - self.artwork = data["album"]["image"][artwork_size] - self._artwork_format = pathlib.Path(self.artwork).suffix[1:] - if self.comment is None or overwrite: - self.comment = comment - if self.composer is None or overwrite: - self.composer = ( - credits.get("composers") - or (data["composer"]["name"] if hasattr(data, "composer") - else None) - ) - if self.copyright is None or overwrite: - self.copyright = data["album"].get("copyright") - if self.date is None or overwrite: - self.date = min( - datetime.datetime.utcfromtimestamp(dt) if isinstance(dt, int) - else datetime.datetime.strptime(dt, "%Y-%m-%d") if isinstance(dt, str) - else datetime.datetime.max for dt in ( - data.get(k) for k in { - "release_date_original", - "release_date_download", - "release_date_stream", - "release_date_purchase", - "purchasable_at", - "streamable_at" - } - ) - ).strftime('%Y-%m-%dT%H:%M:%SZ') - if self.disc_number is None or overwrite: - self.disc_number = data["media_number"] - if self.disc_count is None or overwrite: - self.disc_count = data["album"]["media_count"] - if self.genre is None or overwrite: - self.genre = data["album"]["genre"]["name"] - if self.isrc is None or overwrite: - self.isrc = data["isrc"] - if self.title is None or overwrite: - self.title = data["title"].rstrip() - if (feat_artist := credits.get("featured_artist")) \ - and "feat." not in self.title: - self.title += (" [feat. {}]" if "(" in self.title - else " (feat. {})").format( - utility.multivalue_formatter(feat_artist, False) - ) - if data["version"]: - self.title += (" [{}]" if "(" in self.title - else " ({})").format(data['version']) - if self.track_number is None or overwrite: - self.track_number = data["track_number"] - if self.track_count is None or overwrite: - self.track_count = data["album"]["tracks_count"] - - if data["album"].get("release_type") == "single" \ - and self.album == self.title: - self.album += " - Single" - self.album_artist = self.artist = max( - self.artist, self.album_artist, key=len - )
    @@ -1448,9 +1448,9 @@

    Source code for minim.audio

     
                * :code:`("(.*) - (.*)", ("artist", "title"))` matches 
                  filenames like "Taylor Swift - Fearless.flac".
    -           * :code:`("(\d*) - (.*)", ("track_number", "title"))` matches
    +           * :code:`("(\\d*) - (.*)", ("track_number", "title"))` matches
                  filenames like "03 - Love Story.flac".
    -           * :code:`("(\d*) (.*)", ("track_number", "title"))` matches
    +           * :code:`("(\\d*) (.*)", ("track_number", "title"))` matches
                  filenames like "06 You Belong with Me.flac".
     
         multivalue : `bool`
    @@ -1528,9 +1528,9 @@ 

    Source code for minim.audio

     
                * :code:`("(.*) - (.*)", ("artist", "title"))` matches 
                  filenames like "Taylor Swift - Red.mp3".
    -           * :code:`("(\d*) - (.*)", ("track_number", "title"))` matches
    +           * :code:`("(\\d*) - (.*)", ("track_number", "title"))` matches
                  filenames like "04 - I Knew You Were Trouble.mp3".
    -           * :code:`("(\d*) (.*)", ("track_number", "title"))` matches
    +           * :code:`("(\\d*) (.*)", ("track_number", "title"))` matches
                  filenames like "06 22.mp3".
     
         multivalue : `bool`
    @@ -1607,9 +1607,9 @@ 

    Source code for minim.audio

     
                * :code:`("(.*) - (.*)", ("artist", "title"))` matches 
                  filenames like "Taylor Swift - Mine.m4a".
    -           * :code:`("(\d*) - (.*)", ("track_number", "title"))` matches
    +           * :code:`("(\\d*) - (.*)", ("track_number", "title"))` matches
                  filenames like "04 - Speak Now.m4a".
    -           * :code:`("(\d*) (.*)", ("track_number", "title"))` matches
    +           * :code:`("(\\d*) (.*)", ("track_number", "title"))` matches
                  filenames like "07 The Story of Us.m4a".
     
         multivalue : `bool`
    @@ -1682,7 +1682,7 @@ 

    Source code for minim.audio

                 value = self._tags.get(key)
                 if value:
                     if list not in self._FIELDS_TYPES[field]:
    -                    value = utility.multivalue_formatter(value, False, 
    +                    value = utility.format_multivalue(value, False, 
                                                              primary=True)
                         if type(value) not in self._FIELDS_TYPES[field]:
                             try:
    @@ -1716,7 +1716,7 @@ 

    Source code for minim.audio

                 self.track_number = self.track_count = None
     
             if "covr" in self._tags:
    -            self.artwork = utility.multivalue_formatter(self._tags.get("covr"), 
    +            self.artwork = utility.format_multivalue(self._tags.get("covr"), 
                                                             False, primary=True)
                 self._artwork_format = str(
                     self._IMAGE_FORMATS[self.artwork.imageformat]
    @@ -1736,7 +1736,7 @@ 

    Source code for minim.audio

             for field, key in self._FIELDS.items():
                 value = getattr(self, field)
                 if value:
    -                value = utility.multivalue_formatter(
    +                value = utility.format_multivalue(
                         value, self._multivalue, sep=self._sep
                     )
                     try:
    @@ -1813,9 +1813,9 @@ 

    Source code for minim.audio

     
                * :code:`("(.*) - (.*)", ("artist", "title"))` matches 
                  filenames like "Taylor Swift - Blank Space.ogg".
    -           * :code:`("(\d*) - (.*)", ("track_number", "title"))` matches
    +           * :code:`("(\\d*) - (.*)", ("track_number", "title"))` matches
                  filenames like "03 - Style.ogg".
    -           * :code:`("(\d*) (.*)", ("track_number", "title"))` matches
    +           * :code:`("(\\d*) (.*)", ("track_number", "title"))` matches
                  filenames like "06 Shake It Off.ogg".
     
         multivalue : `bool`
    @@ -1911,9 +1911,9 @@ 

    Source code for minim.audio

     
                * :code:`("(.*) - (.*)", ("artist", "title"))` matches 
                  filenames like "Taylor Swift - Don't Blame Me.wav".
    -           * :code:`("(\d*) - (.*)", ("track_number", "title"))` matches
    +           * :code:`("(\\d*) - (.*)", ("track_number", "title"))` matches
                  filenames like "05 - Delicate.wav".
    -           * :code:`("(\d*) (.*)", ("track_number", "title"))` matches
    +           * :code:`("(\\d*) (.*)", ("track_number", "title"))` matches
                  filenames like "06 Look What You Made Me Do.wav".
     
         multivalue : `bool`
    diff --git a/docs/_modules/minim/itunes.html b/docs/_modules/minim/itunes.html
    index 319468e..3d2fecc 100644
    --- a/docs/_modules/minim/itunes.html
    +++ b/docs/_modules/minim/itunes.html
    @@ -8,7 +8,7 @@
             minim.itunes - Minim 1.0.0 documentation
           
         
    -    
    +    
         
         
         
    @@ -173,7 +173,6 @@
     
  • FLACAudio
  • MP3Audio
  • MP4Audio
  • -
  • OggAudio
  • WAVEAudio
  • @@ -196,8 +195,9 @@
  • utility
  • diff --git a/docs/_modules/minim/qobuz.html b/docs/_modules/minim/qobuz.html index 250347b..6fb576b 100644 --- a/docs/_modules/minim/qobuz.html +++ b/docs/_modules/minim/qobuz.html @@ -8,7 +8,7 @@ minim.qobuz - Minim 1.0.0 documentation - + @@ -173,7 +173,6 @@
  • FLACAudio
  • MP3Audio
  • MP4Audio
  • -
  • OggAudio
  • WAVEAudio
  • @@ -196,8 +195,9 @@
  • utility
  • @@ -2989,7 +2989,7 @@

    Source code for minim.qobuz

                 Audio stream MIME type.
             """
     
    -        file = self.get_track_file_url(track_id, format_id=format_id)["url"]
    +        file = self.get_track_file_url(track_id, format_id=format_id)
             with self.session.get(file["url"]) as r:
                 return r.content, file["mime_type"]
    diff --git a/docs/_modules/minim/spotify.html b/docs/_modules/minim/spotify.html index 8fc4d46..c868299 100644 --- a/docs/_modules/minim/spotify.html +++ b/docs/_modules/minim/spotify.html @@ -8,7 +8,7 @@ minim.spotify - Minim 1.0.0 documentation - + @@ -173,7 +173,6 @@
  • FLACAudio
  • MP3Audio
  • MP4Audio
  • -
  • OggAudio
  • WAVEAudio
  • @@ -196,8 +195,9 @@
  • utility
  • diff --git a/docs/_modules/minim/tidal.html b/docs/_modules/minim/tidal.html index 35f3882..3415b4c 100644 --- a/docs/_modules/minim/tidal.html +++ b/docs/_modules/minim/tidal.html @@ -8,7 +8,7 @@ minim.tidal - Minim 1.0.0 documentation - + @@ -173,7 +173,6 @@
  • FLACAudio
  • MP3Audio
  • MP4Audio
  • -
  • OggAudio
  • WAVEAudio
  • @@ -196,8 +195,9 @@
  • utility
  • @@ -248,15 +248,12 @@

    Source code for minim.tidal

     
     from xml.dom import minidom
     
    -from Crypto.Cipher import AES
    -from Crypto.Util import Counter
    +from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
     
     from . import (
         base64, datetime, hashlib, json, logging, os, pathlib, re, requests, 
    -    secrets, subprocess, time, urllib, warnings, webbrowser,
    -    audio, utility, 
    -    FOUND_PLAYWRIGHT, FOUND_FFMPEG, DIR_HOME, DIR_TEMP, ILLEGAL_CHARACTERS,
    -    Any, Union, config
    +    secrets, time, urllib, warnings, webbrowser,
    +    FOUND_PLAYWRIGHT, DIR_HOME, DIR_TEMP, Any, Union, config
     )
     
     if FOUND_PLAYWRIGHT:
    @@ -2280,8 +2277,6 @@ 

    Source code for minim.tidal

         """
     
         _FLOWS = {"pkce", "device_code"}
    -    _MASTER_KEY = (b"P\x89SLC&\x98\xb7\xc6\xa3\n?P.\xb4\xc7a\xf8\xe5n"
    -                   b"\x8cth\x13E\xfa?\xbah8\xef\x9e")
         _NAME = f"{__module__}.{__qualname__}"
     
         API_URL = "https://api.tidal.com"
    @@ -7145,16 +7140,19 @@ 

    Source code for minim.tidal

                 codec = manifest["codecs"]
                 with self.session.get(manifest["urls"][0]) as r:
                     stream = r.content
    -            if manifest["encryptionType"] != "NONE":
    -                d_key_id = base64.b64decode(manifest['keyId'])
    -                d_id = AES.new(self._MASTER_KEY, AES.MODE_CBC,
    -                               d_key_id[:16]).decrypt(d_key_id[16:])
    -                d_key, d_nonce = d_id[:16], d_id[16:24]
    -                stream = AES.new(
    -                    d_key, AES.MODE_CTR,
    -                    counter=Counter.new(64, prefix=d_nonce, 
    -                                        initial_value=0)
    -                ).decrypt(stream)
    +            if manifest["encryptionType"] == "OLD_AES":
    +                key_id = base64.b64decode(manifest["keyId"])
    +                key_nonce = Cipher(
    +                    algorithms.AES(b"P\x89SLC&\x98\xb7\xc6\xa3\n?P.\xb4\xc7"
    +                                   b"a\xf8\xe5n\x8cth\x13E\xfa?\xbah8\xef\x9e"),
    +                    modes.CBC(key_id[:16])
    +                ).decryptor().update(key_id[16:])
    +                stream = Cipher(
    +                    algorithms.AES(key_nonce[:16]),
    +                    modes.CTR(key_nonce[16:32])
    +                ).decryptor().update(stream)
    +            elif manifest["encryptionType"] != "NONE":
    +                raise NotImplementedError("Unsupported encryption type.")
             return stream, codec
    diff --git a/docs/_modules/minim/utility.html b/docs/_modules/minim/utility.html index dc240b7..2260c0a 100644 --- a/docs/_modules/minim/utility.html +++ b/docs/_modules/minim/utility.html @@ -8,7 +8,7 @@ minim.utility - Minim 1.0.0 documentation - + @@ -196,8 +196,9 @@
  • utility
  • @@ -244,63 +245,26 @@

    Source code for minim.utility

     This module contains a collection of utility functions.
     """
     
    +from difflib import SequenceMatcher
    +
     from . import Any, Union
     
     try:
         import Levenshtein
         FOUND_LEVENSHTEIN = True
     except ModuleNotFoundError:
    -    FOUND_LEVELSHTEIN = False
    +    FOUND_LEVENSHTEIN = False
     try:
         import numpy as np
         FOUND_NUMPY = True
     except ModuleNotFoundError:
         FOUND_NUMPY = False
     
    -__all__ = ["levenshtein_ratio", "multivalue_formatter"]
    -
    -
    -[docs] -def levenshtein_ratio( - base: str, values: Union[str, list[str]] - ) -> Union[float, list[float], "np.ndarray[float]"]: - - """ - Compute the Levenshtein ratio, a measure of similarity, for - string(s) with respect to a reference string. - - Parameters - ---------- - base : `str` - Reference string. - - values : `str` or `list` - String(s) to compare with `base`. - - Returns - ------- - ratios : `float`, `list`, or `numpy.ndarray` - Levenshtein ratio(s). If `values` is a `str`, a `float` is - returned. If `values` is a `list`, a `numpy.ndarray` is returned - if NumPy is installed; otherwise, a `list` is returned. - """ - - if not FOUND_LEVENSHTEIN: - emsg = ("The Levenshtein module was not found, so " - "minim.utility.levenshtein_ratio() is unavailable.") - raise ImportError(emsg) - - if isinstance(values, str): - return Levenshtein.ratio(base, values) - gen = (Levenshtein.ratio(base, v) for v in values) - if FOUND_NUMPY: - return np.fromiter(gen, dtype=float, count=len(values)) - return list(gen)
    - +__all__ = ["format_multivalue", "gestalt_ratios", "levenshtein_ratios"] -
    -[docs] -def multivalue_formatter( +
    +[docs] +def format_multivalue( value: Any, multivalue: bool, *, primary: bool = False, sep: Union[str, tuple[str]] = (", ", " & ")) -> Union[str, list[Any]]: @@ -347,6 +311,80 @@

    Source code for minim.utility

             return [value]
         return value
    + +
    +[docs] +def gestalt_ratio( + reference: str, strings: Union[str, list[str]] + ) -> Union[float, list[float], "np.ndarray[float]"]: + + """ + Compute the Gestalt or Ratcliff–Obershelp ratios, a measure of + similarity, for strings with respect to a reference string. + + Parameters + ---------- + reference : `str` + Reference string. + + strings : `str` or `list` + Strings to compare with `reference`. + + Returns + ------- + ratios : `float`, `list`, or `numpy.ndarray` + Gestalt or Ratcliff–Obershelp ratios. If `strings` is a `str`, a + `float` is returned. If `strings` is a `list`, a `numpy.ndarray` + is returned if NumPy is installed; otherwise, a `list` is + returned. + """ + + if isinstance(strings, str): + return SequenceMatcher(None, reference, strings).ratio() + gen = (SequenceMatcher(None, reference, s).ratio() for s in strings) + if FOUND_NUMPY: + return np.fromiter(gen, dtype=float, count=len(strings)) + return list(gen)
    + + +
    +[docs] +def levenshtein_ratio( + reference: str, strings: Union[str, list[str]] + ) -> Union[float, list[float], "np.ndarray[float]"]: + + """ + Compute the Levenshtein ratios, a measure of similarity, for + strings with respect to a reference string. + + Parameters + ---------- + reference : `str` + Reference string. + + strings : `str` or `list` + Strings to compare with `reference`. + + Returns + ------- + ratios : `float`, `list`, or `numpy.ndarray` + Levenshtein ratios. If `strings` is a `str`, a `float` is + returned. If `strings` is a `list`, a `numpy.ndarray` is + returned if NumPy is installed; otherwise, a `list` is returned. + """ + + if not FOUND_LEVENSHTEIN: + emsg = ("The Levenshtein module was not found, so " + "minim.utility.levenshtein_ratio() is unavailable.") + raise ImportError(emsg) + + if isinstance(strings, str): + return Levenshtein.ratio(reference, strings) + gen = (Levenshtein.ratio(reference, s) for s in strings) + if FOUND_NUMPY: + return np.fromiter(gen, dtype=float, count=len(strings)) + return list(gen)
    +
    diff --git a/docs/_sources/api/minim.utility.format_multivalue.rst.txt b/docs/_sources/api/minim.utility.format_multivalue.rst.txt new file mode 100644 index 0000000..d8c7901 --- /dev/null +++ b/docs/_sources/api/minim.utility.format_multivalue.rst.txt @@ -0,0 +1,6 @@ +format\_multivalue +================== + +.. currentmodule:: minim.utility + +.. autofunction:: format_multivalue \ No newline at end of file diff --git a/docs/_sources/api/minim.utility.gestalt_ratio.rst.txt b/docs/_sources/api/minim.utility.gestalt_ratio.rst.txt new file mode 100644 index 0000000..4611a99 --- /dev/null +++ b/docs/_sources/api/minim.utility.gestalt_ratio.rst.txt @@ -0,0 +1,6 @@ +gestalt\_ratio +============== + +.. currentmodule:: minim.utility + +.. autofunction:: gestalt_ratio \ No newline at end of file diff --git a/docs/_sources/api/minim.utility.gestalt_ratios.rst.txt b/docs/_sources/api/minim.utility.gestalt_ratios.rst.txt new file mode 100644 index 0000000..8d88773 --- /dev/null +++ b/docs/_sources/api/minim.utility.gestalt_ratios.rst.txt @@ -0,0 +1,6 @@ +gestalt\_ratios +=============== + +.. currentmodule:: minim.utility + +.. autofunction:: gestalt_ratios \ No newline at end of file diff --git a/docs/_sources/api/minim.utility.levenshtein_ratios.rst.txt b/docs/_sources/api/minim.utility.levenshtein_ratios.rst.txt new file mode 100644 index 0000000..9dc9176 --- /dev/null +++ b/docs/_sources/api/minim.utility.levenshtein_ratios.rst.txt @@ -0,0 +1,6 @@ +levenshtein\_ratios +=================== + +.. currentmodule:: minim.utility + +.. autofunction:: levenshtein_ratios \ No newline at end of file diff --git a/docs/_sources/api/minim.utility.rst.txt b/docs/_sources/api/minim.utility.rst.txt index 1247157..da455d2 100644 --- a/docs/_sources/api/minim.utility.rst.txt +++ b/docs/_sources/api/minim.utility.rst.txt @@ -1,4 +1,4 @@ -utility +utility ======= .. automodule:: minim.utility @@ -15,8 +15,9 @@ utility :toctree: :nosignatures: + format_multivalue + gestalt_ratio levenshtein_ratio - multivalue_formatter diff --git a/docs/api.html b/docs/api.html index c75fda9..d9ae78f 100644 --- a/docs/api.html +++ b/docs/api.html @@ -9,7 +9,7 @@ <no title> - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.audio.Audio.html b/docs/api/minim.audio.Audio.html index c2f0dae..c8190de 100644 --- a/docs/api/minim.audio.Audio.html +++ b/docs/api/minim.audio.Audio.html @@ -9,7 +9,7 @@ Audio - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • @@ -503,6 +504,30 @@

    Audio#< +
    +
    +set_metadata_using_qobuz(data: dict[str, Any], *, artwork_size: str = 'large', comment: str = None, overwrite: bool = False) None[source]#
    +

    Populate tags using data retrieved from the Qobuz API.

    +
    +
    Parameters:
    +
    +
    datadict

    Information about the track in JSON format obtained using +the Qobuz API via minim.qobuz.PrivateAPI.get_track() +or minim.qobuz.PrivateAPI.search().

    +
    +
    artwork_sizestr, keyword-only, default: "large"

    Artwork size.

    +

    Valid values: "large", "small", or +"thumbnail".

    +
    +
    commentstr, keyword-only, optional

    Comment or description.

    +
    +
    overwritebool, keyword-only, default: False

    Determines whether existing metadata should be overwritten.

    +
    +
    +
    +
    +
    +
    set_metadata_using_spotify(data: dict[str, Any], *, audio_features: dict[str, Any] = None, lyrics: str | dict[str, Any] = None, overwrite: bool = False) None[source]#
    @@ -576,30 +601,6 @@

    Audio#<

    -
    -
    -set_metadata_using_qobuz(data: dict[str, Any], *, artwork_size: str = 'large', comment: str = None, overwrite: bool = False) None[source]#
    -

    Populate tags using data retrieved from the Qobuz API.

    -
    -
    Parameters:
    -
    -
    datadict

    Information about the track in JSON format obtained using -the Qobuz API via minim.qobuz.PrivateAPI.get_track() -or minim.qobuz.PrivateAPI.search().

    -
    -
    artwork_sizestr, keyword-only, default: "large"

    Artwork size.

    -

    Valid values: "large", "small", or -"thumbnail".

    -
    -
    commentstr, keyword-only, optional

    Comment or description.

    -
    -
    overwritebool, keyword-only, default: False

    Determines whether existing metadata should be overwritten.

    -
    -
    -
    -
    -
    - @@ -663,9 +664,9 @@

    Audio#<
  • Audio
  • diff --git a/docs/api/minim.audio.FLACAudio.html b/docs/api/minim.audio.FLACAudio.html index 248550f..aa1497e 100644 --- a/docs/api/minim.audio.FLACAudio.html +++ b/docs/api/minim.audio.FLACAudio.html @@ -9,7 +9,7 @@ FLACAudio - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.audio.MP3Audio.html b/docs/api/minim.audio.MP3Audio.html index 23da4e4..95e4c93 100644 --- a/docs/api/minim.audio.MP3Audio.html +++ b/docs/api/minim.audio.MP3Audio.html @@ -9,7 +9,7 @@ MP3Audio - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.audio.MP4Audio.html b/docs/api/minim.audio.MP4Audio.html index 6844369..0ce2794 100644 --- a/docs/api/minim.audio.MP4Audio.html +++ b/docs/api/minim.audio.MP4Audio.html @@ -9,7 +9,7 @@ MP4Audio - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.audio.OGGAudio.html b/docs/api/minim.audio.OGGAudio.html index f635c8f..10bc290 100644 --- a/docs/api/minim.audio.OGGAudio.html +++ b/docs/api/minim.audio.OGGAudio.html @@ -9,7 +9,7 @@ OggAudio - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.audio.WAVEAudio.html b/docs/api/minim.audio.WAVEAudio.html index ce0c37a..4cdaa87 100644 --- a/docs/api/minim.audio.WAVEAudio.html +++ b/docs/api/minim.audio.WAVEAudio.html @@ -9,7 +9,7 @@ WAVEAudio - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.audio.html b/docs/api/minim.audio.html index 0b651d2..5069b5f 100644 --- a/docs/api/minim.audio.html +++ b/docs/api/minim.audio.html @@ -9,7 +9,7 @@ audio - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.html b/docs/api/minim.html index 5529ac7..19a7ba0 100644 --- a/docs/api/minim.html +++ b/docs/api/minim.html @@ -9,7 +9,7 @@ minim - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.itunes.SearchAPI.html b/docs/api/minim.itunes.SearchAPI.html index c470cb6..d9ee810 100644 --- a/docs/api/minim.itunes.SearchAPI.html +++ b/docs/api/minim.itunes.SearchAPI.html @@ -9,7 +9,7 @@ SearchAPI - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.itunes.html b/docs/api/minim.itunes.html index 45cdfa6..307e3e5 100644 --- a/docs/api/minim.itunes.html +++ b/docs/api/minim.itunes.html @@ -9,7 +9,7 @@ itunes - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.qobuz.PrivateAPI.html b/docs/api/minim.qobuz.PrivateAPI.html index 4ddb27b..4bc474b 100644 --- a/docs/api/minim.qobuz.PrivateAPI.html +++ b/docs/api/minim.qobuz.PrivateAPI.html @@ -9,7 +9,7 @@ PrivateAPI - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.qobuz.html b/docs/api/minim.qobuz.html index 8c9371a..6660c01 100644 --- a/docs/api/minim.qobuz.html +++ b/docs/api/minim.qobuz.html @@ -9,7 +9,7 @@ qobuz - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.spotify.PrivateLyricsService.html b/docs/api/minim.spotify.PrivateLyricsService.html index e1e62c3..48b7a5c 100644 --- a/docs/api/minim.spotify.PrivateLyricsService.html +++ b/docs/api/minim.spotify.PrivateLyricsService.html @@ -9,7 +9,7 @@ PrivateLyricsService - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.spotify.WebAPI.html b/docs/api/minim.spotify.WebAPI.html index 078d012..97cda24 100644 --- a/docs/api/minim.spotify.WebAPI.html +++ b/docs/api/minim.spotify.WebAPI.html @@ -9,7 +9,7 @@ WebAPI - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.spotify.html b/docs/api/minim.spotify.html index d0ea1ca..27fbb13 100644 --- a/docs/api/minim.spotify.html +++ b/docs/api/minim.spotify.html @@ -9,7 +9,7 @@ spotify - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.tidal.API.html b/docs/api/minim.tidal.API.html index 16103f3..998feb5 100644 --- a/docs/api/minim.tidal.API.html +++ b/docs/api/minim.tidal.API.html @@ -9,7 +9,7 @@ API - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.tidal.PrivateAPI.html b/docs/api/minim.tidal.PrivateAPI.html index 6857320..eeea228 100644 --- a/docs/api/minim.tidal.PrivateAPI.html +++ b/docs/api/minim.tidal.PrivateAPI.html @@ -9,7 +9,7 @@ PrivateAPI - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.tidal.html b/docs/api/minim.tidal.html index ef0b328..da998ad 100644 --- a/docs/api/minim.tidal.html +++ b/docs/api/minim.tidal.html @@ -9,7 +9,7 @@ tidal - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/api/minim.utility.multivalue_formatter.html b/docs/api/minim.utility.format_multivalue.html similarity index 79% rename from docs/api/minim.utility.multivalue_formatter.html rename to docs/api/minim.utility.format_multivalue.html index 65632fb..71b3572 100644 --- a/docs/api/minim.utility.multivalue_formatter.html +++ b/docs/api/minim.utility.format_multivalue.html @@ -3,13 +3,13 @@ - + - multivalue_formatter - Minim 1.0.0 documentation + format_multivalue - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • @@ -237,11 +238,11 @@

    -
    -

    multivalue_formatter#

    +
    +

    format_multivalue#

    -
    -minim.utility.multivalue_formatter(value: Any, multivalue: bool, *, primary: bool = False, sep: str | tuple[str] = (', ', ' & ')) str | list[Any][source]#
    +
    +minim.utility.format_multivalue(value: Any, multivalue: bool, *, primary: bool = False, sep: str | tuple[str] = (', ', ' & ')) str | list[Any][source]#

    Format a field value based on whether multivalue for that field is supported.

    @@ -280,15 +281,23 @@

    multivalue_formatter

    @@ -393,7 +394,7 @@

    TIDAL#<

    -
    +
    @@ -479,7 +480,7 @@

    TIDAL#< - + diff --git a/docs/notebooks/user_guide/transferring_music_libraries.html b/docs/notebooks/user_guide/transferring_music_libraries.html index 62effb8..0fab371 100644 --- a/docs/notebooks/user_guide/transferring_music_libraries.html +++ b/docs/notebooks/user_guide/transferring_music_libraries.html @@ -9,7 +9,7 @@ Transferring Music Libraries - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/docs/objects.inv b/docs/objects.inv index 92dcc78..da892a6 100644 Binary files a/docs/objects.inv and b/docs/objects.inv differ diff --git a/docs/py-modindex.html b/docs/py-modindex.html index 60fabdc..670bf88 100644 --- a/docs/py-modindex.html +++ b/docs/py-modindex.html @@ -7,7 +7,7 @@ Python Module Index - Minim 1.0.0 documentation - + @@ -195,8 +195,9 @@
  • utility
  • diff --git a/docs/search.html b/docs/search.html index 9ae25cd..5698cbe 100644 --- a/docs/search.html +++ b/docs/search.html @@ -6,7 +6,7 @@ Search - Minim 1.0.0 documentation - + @@ -194,8 +194,9 @@
  • utility
  • diff --git a/docs/searchindex.js b/docs/searchindex.js index 572212d..66eada6 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["api", "api/minim", "api/minim.audio", "api/minim.audio.Audio", "api/minim.audio.FLACAudio", "api/minim.audio.MP3Audio", "api/minim.audio.MP4Audio", "api/minim.audio.OggAudio", "api/minim.audio.WAVEAudio", "api/minim.itunes", "api/minim.itunes.SearchAPI", "api/minim.qobuz", "api/minim.qobuz.PrivateAPI", "api/minim.spotify", "api/minim.spotify.PrivateLyricsService", "api/minim.spotify.WebAPI", "api/minim.tidal", "api/minim.tidal.API", "api/minim.tidal.PrivateAPI", "api/minim.utility", "api/minim.utility.levenshtein_ratio", "api/minim.utility.multivalue_formatter", "index", "notebooks/getting_started", "notebooks/user_guide/editing_audio_metadata", "notebooks/user_guide/getting_recommendations", "notebooks/user_guide/transferring_music_libraries", "user_guide"], "filenames": ["api.rst", "api/minim.rst", "api/minim.audio.rst", "api/minim.audio.Audio.rst", "api/minim.audio.FLACAudio.rst", "api/minim.audio.MP3Audio.rst", "api/minim.audio.MP4Audio.rst", "api/minim.audio.OggAudio.rst", "api/minim.audio.WAVEAudio.rst", "api/minim.itunes.rst", "api/minim.itunes.SearchAPI.rst", "api/minim.qobuz.rst", "api/minim.qobuz.PrivateAPI.rst", "api/minim.spotify.rst", "api/minim.spotify.PrivateLyricsService.rst", "api/minim.spotify.WebAPI.rst", "api/minim.tidal.rst", "api/minim.tidal.API.rst", "api/minim.tidal.PrivateAPI.rst", "api/minim.utility.rst", "api/minim.utility.levenshtein_ratio.rst", "api/minim.utility.multivalue_formatter.rst", "index.rst", "notebooks/getting_started.ipynb", "notebooks/user_guide/editing_audio_metadata.ipynb", "notebooks/user_guide/getting_recommendations.ipynb", "notebooks/user_guide/transferring_music_libraries.ipynb", "user_guide.rst"], "titles": ["<no title>", "minim", "audio", "Audio", "FLACAudio", "MP3Audio", "MP4Audio", "OggAudio", "WAVEAudio", "itunes", "SearchAPI", "qobuz", "PrivateAPI", "spotify", "PrivateLyricsService", "WebAPI", "tidal", "API", "PrivateAPI", "utility", "levenshtein_ratio", "multivalue_formatter", "Minim", "Getting Started", "Editing Audio Metadata", "Getting Recommendations", "Transferring Music Libraries", "User Guide"], "terms": {"thi": [2, 3, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 23, 24, 25, 26], "modul": [2, 3, 9, 11, 13, 16, 19, 23], "provid": [2, 3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 21, 23, 24, 26], "conveni": [2, 12, 18, 24], "python": [2, 22, 23], "keep": [2, 15], "track": [2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 24, 25, 26], "handl": [2, 26], "metadata": [2, 3, 4, 5, 6, 7, 8, 15, 17, 18, 22, 23, 26, 27], "convert": [2, 3, 4, 5, 6, 7, 8, 22], "between": [2, 3, 4, 5, 6, 7, 8, 10, 15, 22, 26], "differ": [2, 15, 23], "format": [2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 21, 22, 24], "class": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 23, 24, 25, 26], "minim": [3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 17, 18, 20, 21, 24, 25, 26], "arg": [3, 4, 5, 6, 7, 8], "kwarg": [3, 4, 5, 6, 7, 8, 15], "sourc": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 21, 23, 26], "base": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 21, 23, 25], "object": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 23, 24, 25], "gener": [3, 15, 24, 25, 26], "file": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 22, 25], "handler": [3, 4, 5, 6, 7, 8, 24], "subclass": 3, "specif": [3, 15, 23, 24], "contain": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 23, 24], "includ": [3, 10, 15, 18, 24], "flacaudio": [3, 5, 6, 7, 8, 23, 24], "encod": [3, 10, 15, 18, 23], "us": [3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 17, 18, 21, 23, 24, 25, 26], "free": [3, 26], "lossless": [3, 4, 5, 6, 7, 8, 12, 18, 23], "codec": [3, 4, 5, 6, 7, 8, 18, 23, 24], "flac": [3, 4, 5, 6, 7, 8, 12, 18, 23, 24], "mp3audio": [3, 23, 24], "store": [3, 10, 12, 14, 15, 17, 18, 23, 24, 25, 26], "mpeg": 3, "layer": 3, "iii": [3, 18], "mp3": [3, 4, 5, 6, 7, 8, 12, 18, 23, 24], "mp4audio": [3, 4, 5, 7, 8, 23], "advanc": 3, "code": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 23], "aac": [3, 4, 5, 6, 7, 8, 18, 23], "appl": [3, 10, 23, 24], "alac": [3, 4, 5, 6, 7, 8, 18, 23], "4": [3, 15, 23], "part": 3, "14": 3, "mp4": [3, 4, 5, 6, 7, 8, 18, 23], "m4a": [3, 4, 5, 6, 7, 8, 23], "oggaudio": [3, 23], "opu": [3, 4, 5, 6, 7, 8, 23], "vorbi": [3, 4, 5, 6, 7, 8, 23], "an": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 23, 25], "ogg": [3, 4, 5, 6, 7, 8], "waveaudio": [3, 23], "linear": 3, "puls": 3, "lpcm": [3, 4, 5, 6, 7, 8, 23], "waveform": 3, "wave": [3, 4, 5, 6, 7, 8, 23], "can": [3, 12, 14, 15, 17, 18, 22, 23, 24, 25, 26], "instanti": [3, 12, 14, 15, 17, 18, 23, 25, 26], "from": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 23, 24, 25], "list": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 20, 21, 25], "abov": [3, 15, 23, 24, 25, 26], "examin": 3, "its": [3, 10, 12, 14, 15, 17, 18, 23, 24, 26], "extens": [3, 4, 5, 6, 7, 8, 18], "howev": [3, 24, 26], "mai": [3, 15, 18, 26], "instanc": 3, "when": [3, 10, 12, 14, 15, 17, 18, 21, 23, 24, 26], "detect": [3, 12, 23], "fail": [3, 18], "especi": [3, 26], "combin": [3, 12, 15], "i": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 26], "rare": 3, "seen": 3, "As": [3, 12, 14, 18, 23, 24], "alwai": [3, 24], "best": [3, 4, 5, 6, 7, 8, 12, 26], "directli": [3, 18, 24, 26], "one": [3, 14, 15, 17, 18, 23, 24], "creat": [3, 10, 12, 15, 18, 24, 25, 26], "your": [3, 10, 14, 15, 18, 23, 24, 25], "ar": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 21, 23, 25, 26], "known": [3, 23, 24], "paramet": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 21], "str": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 21, 23, 24], "pattern": [3, 4, 5, 6, 7, 8, 24], "tupl": [3, 4, 5, 6, 7, 8, 12, 18, 21], "keyword": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 21, 23, 24, 25], "onli": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 21, 23, 24, 25, 26], "option": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 23], "regular": [3, 4, 5, 6, 7, 8, 24], "express": [3, 4, 5, 6, 7, 8, 24], "search": [3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 17, 18, 24, 26], "correspond": [3, 4, 5, 6, 7, 8, 15, 24, 26], "field": [3, 4, 5, 6, 7, 8, 15, 21, 24], "": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 21, 23, 24, 26], "valid": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18], "valu": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 20, 21, 24], "The": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 23, 24, 25, 26], "support": [3, 4, 5, 6, 7, 8, 10, 15, 18, 21, 23, 26], "artist": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 24, 25, 26], "titl": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 23, 24, 26], "track_numb": [3, 4, 5, 6, 7, 8, 12, 15, 23], "number": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 24, 25, 26], "exampl": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 24, 25, 26], "match": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 24, 26], "filenam": [3, 4, 5, 6, 7, 8, 18, 23, 24], "like": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 23, 24, 26], "taylor": [3, 4, 5, 6, 7, 8], "swift": [3, 4, 5, 6, 7, 8], "cruel": 3, "summer": 3, "d": [3, 4, 5, 6, 7, 8], "04": [3, 5, 6, 23], "man": 3, "13": [3, 10, 17, 23], "you": [3, 4, 5, 8, 10, 12, 14, 15, 18, 23, 24, 25], "need": [3, 15, 23, 24], "calm": 3, "down": [3, 15, 23], "multivalu": [3, 4, 5, 6, 7, 8, 21], "bool": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 21], "determin": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 21, 24], "whether": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 21], "tag": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 21, 23], "If": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 21, 23, 24, 25], "fals": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 21, 23, 24, 25], "item": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 21, 23, 24, 25, 26], "concaten": [3, 4, 5, 6, 7, 8, 21], "separ": [3, 4, 5, 6, 7, 8, 15, 21, 24], "specifi": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 21, 23, 24, 25], "sep": [3, 4, 5, 6, 7, 8, 21], "default": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 21, 23, 24], "all": [3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 21, 23, 24, 26], "first": [3, 4, 5, 6, 7, 8, 10, 12, 15, 18, 21, 23, 24, 25, 26], "n": [3, 4, 5, 6, 7, 8, 23], "1": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 23, 24, 25, 26], "second": [3, 4, 5, 6, 7, 8, 18, 21, 24], "append": [3, 4, 5, 6, 7, 8, 15, 21, 26], "final": [3, 4, 5, 6, 7, 8, 21, 24, 25, 26], "attribut": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 25], "album": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 23, 24, 25, 26], "album_artist": 3, "artwork": [3, 4, 5, 6, 7, 8, 24], "byte": [3, 12, 15, 18, 24], "represent": 3, "url": [3, 10, 12, 14, 15, 17, 18, 23], "lead": 3, "cover": [3, 4, 5, 6, 7, 8, 15, 18, 23, 24, 25], "bit_depth": [3, 12, 23], "int": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18], "bit": [3, 4, 5, 6, 7, 8, 12, 18, 23, 24], "per": 3, "sampl": [3, 23, 24, 26], "bitrat": [3, 12, 23, 24], "b": [3, 4, 5, 6, 7, 8, 23], "channel_count": 3, "channel": [3, 24], "comment": [3, 4, 5, 6, 7, 8, 24], "compil": [3, 4, 5, 6, 7, 8, 15, 18, 24], "song": [3, 10, 12, 15, 23], "variou": [3, 26], "compos": [3, 4, 5, 6, 7, 8, 12, 18, 23, 24], "lyric": [3, 4, 5, 6, 7, 8, 13, 14, 18, 24], "writer": [3, 12], "copyright": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 23, 24], "inform": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 23, 24, 25, 26], "date": [3, 12, 15, 18, 24], "releas": [3, 12, 15, 23], "disc_numb": [3, 15, 23], "disc": [3, 4, 5, 6, 7, 8, 24], "disc_count": 3, "total": [3, 12, 15, 17, 18, 23, 26], "genr": [3, 12, 15, 23, 24, 25], "isrc": [3, 12, 15, 17, 18, 23, 24, 26], "intern": 3, "standard": 3, "record": [3, 10, 12, 23], "sample_r": 3, "rate": [3, 24], "hz": [3, 23], "tempo": [3, 4, 5, 6, 7, 8, 15, 24], "beat": [3, 15], "minut": 3, "bpm": 3, "track_count": [3, 12], "method": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 23, 24], "none": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 23, 24], "preserv": [3, 4, 5, 6, 7, 8], "true": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 23, 24, 26], "current": [3, 4, 5, 6, 7, 8, 12, 15, 18, 23, 26], "anoth": [3, 4, 5, 6, 7, 8, 24, 25], "requir": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 23], "ffmpeg": [3, 4, 5, 6, 7, 8, 23], "automat": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 23, 24], "updat": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 22, 23, 24, 25, 26], "reflect": [3, 4, 5, 6, 7, 8], "new": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 23, 24, 25, 26], "For": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 23, 24, 26], "chang": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 23, 24], "mp4a": [3, 4, 5, 6, 7, 8], "lossi": [3, 4, 5, 6, 7, 8], "wav": [3, 4, 5, 6, 7, 8, 23], "which": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 23, 24, 25], "command": [3, 4, 5, 6, 7, 8, 23], "line": [3, 4, 5, 6, 7, 8, 14, 25], "exclud": [3, 4, 5, 6, 7, 8, 15], "input": [3, 4, 5, 6, 7, 8], "output": [3, 4, 5, 6, 7, 8, 25], "y": [3, 4, 5, 6, 7, 8, 14, 15, 17, 18], "flag": [3, 4, 5, 6, 7, 8, 10], "overwrit": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 24], "c": [3, 4, 5, 6, 7, 8, 23], "v": [3, 4, 5, 6, 7, 8], "copi": [3, 4, 5, 6, 7, 8, 18, 23], "argument": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 23, 24, 25], "art": [3, 4, 5, 6, 7, 8, 18, 24, 25], "256k": [3, 4, 5, 6, 7, 8], "libfdk_aac": [3, 4, 5, 6, 7, 8], "wa": [3, 4, 5, 6, 7, 8, 15, 18], "enabl": [3, 4, 5, 6, 7, 8, 12, 15], "libfdk": [3, 4, 5, 6, 7, 8], "libmp3lam": [3, 4, 5, 6, 7, 8], "q": [3, 4, 5, 6, 7, 8, 15], "0": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 23, 24, 25, 26], "libopu": [3, 4, 5, 6, 7, 8], "vn": [3, 4, 5, 6, 7, 8, 23], "strict": [3, 4, 5, 6, 7, 8, 12, 23], "experiment": [3, 4, 5, 6, 7, 8], "libvorbi": [3, 4, 5, 6, 7, 8], "pcm_s16le": [3, 4, 5, 6, 7, 8], "pcm_s24le": [3, 4, 5, 6, 7, 8], "depth": [3, 4, 5, 6, 7, 8, 12, 23, 24], "origin": [3, 4, 5, 6, 7, 8, 15, 24], "appropri": [3, 4, 5, 6, 7, 8, 25], "kept": [3, 4, 5, 6, 7, 8, 15], "set_metadata_using_itun": [3, 4, 5, 6, 7, 8, 24], "data": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 23, 24, 25, 26], "dict": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 24], "ani": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 21], "album_data": [3, 4, 5, 6, 7, 8, 24], "artwork_s": [3, 4, 5, 6, 7, 8], "1400": [3, 4, 5, 6, 7, 8], "artwork_format": [3, 4, 5, 6, 7, 8], "jpg": [3, 4, 5, 6, 7, 8, 18, 23, 25], "popul": [3, 4, 5, 6, 7, 8, 24], "retriev": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 23, 24], "itun": [3, 4, 5, 6, 7, 8, 10, 22, 24], "api": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 18, 22, 25, 26], "about": [3, 4, 5, 6, 7, 8, 12, 15, 18, 23, 24, 25, 26], "json": [3, 4, 5, 6, 7, 8, 10, 15, 24], "obtain": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 23], "via": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 23, 24], "searchapi": [3, 4, 5, 6, 7, 8, 24], "lookup": [3, 4, 5, 6, 7, 8, 10, 24, 26], "unavail": [3, 4, 5, 6, 7, 8, 15, 23], "resiz": [3, 4, 5, 6, 7, 8], "size": [3, 4, 5, 6, 7, 8, 15, 17, 18, 23, 24], "pixel": [3, 4, 5, 6, 7, 8, 18], "raw": [3, 4, 5, 6, 7, 8], "uncompress": [3, 4, 5, 6, 7, 8], "high": [3, 4, 5, 6, 7, 8, 12, 18], "resolut": [3, 4, 5, 6, 7, 8, 12, 18], "imag": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 23], "regardless": [3, 4, 5, 6, 7, 8], "png": [3, 4, 5, 6, 7, 8], "take": [3, 4, 5, 6, 7, 8, 15, 24], "preced": [3, 4, 5, 6, 7, 8], "exist": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18], "should": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 21], "overwritten": [3, 4, 5, 6, 7, 8], "set_metadata_using_spotifi": [3, 4, 5, 6, 7, 8, 24], "audio_featur": [3, 4, 5, 6, 7, 8, 15, 24], "spotifi": [3, 4, 5, 6, 7, 8, 14, 15, 18, 22, 24], "web": [3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 18, 24, 25, 26], "servic": [3, 4, 5, 6, 7, 8, 13, 14, 15, 18, 22, 24, 26], "webapi": [3, 4, 5, 6, 7, 8, 24, 25, 26], "get_track": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18], "featur": [3, 4, 5, 6, 7, 8, 12, 15, 24, 26], "get_track_audio_featur": [3, 4, 5, 6, 7, 8, 15, 24], "time": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 23, 24], "sync": [3, 4, 5, 6, 7, 8, 14, 18], "privatelyricsservic": [3, 4, 5, 6, 7, 8], "get_lyr": [3, 4, 5, 6, 7, 8, 14], "set_metadata_using_tid": [3, 4, 5, 6, 7, 8, 24], "1280": [3, 4, 5, 6, 7, 8], "tidal": [3, 4, 5, 6, 7, 8, 12, 17, 18, 22, 24], "privateapi": [3, 4, 5, 6, 7, 8, 24, 26], "get_album": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18], "maximum": [3, 4, 5, 6, 7, 8, 12, 15, 18], "80": [3, 4, 5, 6, 7, 8], "get_track_compos": [3, 4, 5, 6, 7, 8, 18, 24], "get_track_contributor": [3, 4, 5, 6, 7, 8, 18], "get_track_credit": [3, 4, 5, 6, 7, 8, 18], "songwrit": [3, 4, 5, 6, 7, 8, 18, 23, 24], "credit": [3, 4, 5, 6, 7, 8, 12, 18, 24], "get_track_lyr": [3, 4, 5, 6, 7, 8, 18, 24], "descript": [3, 4, 5, 6, 7, 8, 12, 15, 18, 23, 26], "set_metadata_using_qobuz": [3, 4, 5, 6, 7, 8], "larg": [3, 4, 5, 6, 7, 8, 12, 15, 18, 23], "qobuz": [3, 4, 5, 6, 7, 8, 12, 22], "small": [3, 4, 5, 6, 7, 8, 12, 15, 18, 23], "thumbnail": [3, 4, 5, 6, 7, 8, 12, 23], "audio": [4, 5, 6, 7, 8, 10, 12, 15, 18, 22, 27], "_vorbiscom": [4, 7], "full": [4, 5, 6, 7, 8, 12, 15, 18], "see": [4, 5, 6, 7, 8, 10, 15, 17, 18, 24, 25, 26], "pathlib": [4, 5, 6, 7, 8, 18, 23, 24], "path": [4, 5, 6, 7, 8, 12, 18, 23, 24], "fearless": 4, "03": [4, 7, 24], "love": 4, "stori": [4, 6, 12, 25], "06": [4, 5, 7, 8, 23], "belong": 4, "me": [4, 8, 23], "write_metadata": [4, 5, 6, 7, 8, 23, 24], "write": [4, 5, 6, 7, 8, 23, 24], "_id3": [5, 8], "red": 5, "knew": 5, "were": [5, 15], "troubl": [5, 25], "22": [5, 18], "mine": 6, "speak": 6, "now": [6, 23, 24], "07": [6, 24], "u": [6, 10, 15, 17, 18, 23, 24, 25], "blank": 7, "space": [7, 10], "style": [7, 25], "shake": 7, "It": [7, 10, 14, 15, 17, 18], "off": [7, 15], "don": [8, 23, 24, 25], "t": [8, 15, 23, 24, 25], "blame": 8, "05": [8, 18], "delic": 8, "look": [8, 10, 18, 24, 26], "what": [8, 15], "made": [8, 15, 23, 25], "do": [8, 23, 24, 26], "complet": [9, 12, 13, 15, 16, 24], "implement": [9, 11, 13, 15, 16, 23, 26], "endpoint": [9, 12, 13, 14, 15, 16, 17, 18, 23, 24], "client": [10, 12, 14, 15, 17, 18, 23, 25, 26], "allow": [10, 12, 15, 18, 24, 26], "varieti": 10, "content": [10, 12, 15, 17, 18], "app": [10, 12, 15, 23], "ibook": 10, "movi": 10, "podcast": [10, 15], "music": [10, 15, 18, 22, 24, 25, 27], "video": [10, 17, 18], "audiobook": [10, 15], "tv": [10, 18, 23], "show": [10, 15, 23, 24], "within": [10, 15], "mac": 10, "also": [10, 12, 14, 15, 17, 18, 23, 24], "id": [10, 12, 14, 15, 17, 18, 23, 24, 25, 26], "request": [10, 12, 14, 15, 17, 18, 23], "map": 10, "librari": [10, 15, 22, 24, 25, 27], "digit": 10, "catalog": [10, 12, 15, 17, 18, 24, 26], "more": [10, 15, 16, 17, 18, 25, 26], "document": [10, 12, 14, 18], "api_url": [10, 12, 15, 17, 18], "term": [10, 12, 14, 18], "countri": [10, 12, 15, 17, 18, 23], "media": [10, 12, 18, 23, 26], "entiti": [10, 15, 18, 23, 26], "limit": [10, 12, 15, 17, 18, 23, 25, 26], "lang": 10, "version": [10, 12, 18, 23, 26], "explicit": [10, 15, 18, 23], "text": [10, 14, 15, 18], "string": [10, 12, 15, 20, 24], "replac": [10, 15, 23, 24], "plu": [10, 18, 23], "charact": [10, 17], "except": [10, 21, 24, 26], "letter": 10, "period": [10, 12], "dash": 10, "underscor": [10, 15], "_": [10, 23, 24], "asterisk": 10, "jack": 10, "johnson": 10, "two": [10, 15, 24, 25], "want": [10, 15, 24, 25], "front": 10, "iso": [10, 14, 15, 17, 18], "obp": 10, "type": [10, 12, 15, 17, 18, 23, 24, 26], "musicvideo": 10, "shortfilm": 10, "tvshow": 10, "softwar": [10, 18], "ebook": 10, "result": [10, 12, 15, 17, 18, 23, 24, 26], "return": [10, 12, 14, 15, 17, 18, 20, 21, 23, 24, 26], "rel": [10, 25], "avail": [10, 12, 14, 15, 17, 18, 24, 25, 26], "tabl": 10, "2": [10, 15, 17, 18, 23, 24, 25], "associ": [10, 12, 14, 15, 17, 18], "movieartist": 10, "name": [10, 12, 15, 17, 18, 23, 24, 26], "allartist": 10, "allartistterm": 10, "Then": [10, 25, 26], "maroon": 10, "5": [10, 12, 15, 25, 26], "instead": [10, 15, 18, 23, 25], "who": 10, "have": [10, 12, 14, 15, 18, 23, 24, 26], "ever": 10, "word": [10, 12, 14], "must": [10, 12, 14, 15, 17, 18, 26], "200": [10, 17, 23], "50": [10, 12, 15, 18, 23, 25], "languag": [10, 12, 14, 15], "english": [10, 15], "japanes": 10, "five": 10, "codenam": 10, "en_u": 10, "ja_jp": 10, "kei": [10, 12, 15, 18], "receiv": 10, "back": [10, 12, 24], "A": [10, 12, 15, 17, 18, 23, 24], "indic": [10, 15], "ye": 10, "To": [10, 12, 15, 17, 18, 23, 24], "short": 10, "film": 10, "25": [10, 12, 24], "jim": 10, "jone": 10, "canada": 10, "ca": [10, 15, 23], "applic": [10, 12, 15, 17, 18, 23, 25], "yelp": 10, "unit": 10, "state": [10, 15], "amg_artist_id": 10, "amg_album_id": 10, "amg_video_id": 10, "bundle_id": 10, "upc": [10, 12, 15, 17, 18, 23, 26], "isbn": 10, "sort": [10, 18], "amg": 10, "ean": [10, 15, 17], "faster": 10, "fewer": 10, "posit": [10, 12, 15, 18, 23, 25], "bundl": 10, "appli": [10, 15, 17], "recent": [10, 12, 15], "up": [10, 12, 15, 18, 25, 26], "909253": 10, "284910350": 10, "468749": 10, "multipl": [10, 15, 17, 26], "5723": 10, "get": [10, 12, 14, 15, 17, 18, 24, 26, 27], "each": [10, 15, 18, 23], "top": [10, 15, 18, 25], "most": [10, 12, 23, 24], "720642462928": 10, "15175": 10, "15176": 10, "15177": 10, "15178": 10, "15183": 10, "15184": 10, "15187": 10, "15190": 10, "15191": 10, "15195": 10, "15197": 10, "15198": 10, "17120": 10, "book": 10, "9780316069359": 10, "com": [10, 18, 23, 25], "yelpiphon": 10, "minimum": [11, 15, 16], "privat": [11, 12, 13, 15, 16, 18, 24, 25, 26], "app_id": [12, 23], "app_secret": [12, 23], "flow": [12, 15, 17, 18, 23, 26], "browser": [12, 14, 18, 23, 26], "user_ag": [12, 18], "email": [12, 15, 18, 23], "password": [12, 23, 26], "auth_token": [12, 23], "save": [12, 14, 15, 17, 18], "collect": [12, 15, 18, 19], "playlist": [12, 15, 18, 25], "perform": [12, 18, 23, 26], "queri": [12, 15, 17, 18, 24], "them": [12, 15, 18, 23, 25, 26], "offici": [12, 15, 18], "been": [12, 14, 15, 18, 23, 24], "watch": [12, 14, 18], "http": [12, 14, 15, 18, 23, 25, 26], "network": [12, 14, 18], "traffic": [12, 14, 18, 23], "design": [12, 14, 15, 18], "publicli": [12, 14, 18], "access": [12, 14, 15, 17, 18, 23, 25, 26], "disabl": [12, 14, 15, 17, 18], "remov": [12, 14, 15, 18, 23], "ensur": [12, 14, 15, 18], "complianc": [12, 14, 18], "while": [12, 15, 18, 24], "necessari": [12, 15, 18, 23, 26], "public": [12, 15, 16, 18, 23, 25, 26], "person": [12, 15, 18], "stream": [12, 15, 18, 26], "activ": [12, 15, 18, 23], "In": [12, 14, 15, 17, 18, 25, 26], "latter": [12, 18], "case": [12, 14, 15, 17, 18, 23, 26], "accompani": [12, 14, 15, 17, 18, 23], "token": [12, 14, 15, 17, 18, 23], "header": [12, 14, 15, 17, 18], "grant": [12, 15], "inher": 12, "unsaf": 12, "sinc": [12, 15, 25], "ha": [12, 23, 24], "mechan": 12, "multifactor": 12, "brute": 12, "forc": 12, "attack": 12, "highli": [12, 15], "encourag": 12, "yourself": 12, "through": [12, 15], "player": [12, 14, 15, 18, 23, 24], "android": [12, 18, 23], "io": [12, 18, 23], "maco": [12, 18, 23], "window": [12, 18, 23], "secret": [12, 15, 17, 18], "constructor": [12, 14, 15, 17, 18, 23, 24, 25], "credenti": [12, 15, 17, 18, 23, 25, 26], "qobuz_private_app_id": 12, "qobuz_private_app_secret": 12, "oper": [12, 14, 15, 17, 18, 22], "system": [12, 14, 15, 17, 18, 25], "environ": [12, 14, 15, 17, 18, 23, 25, 26], "variabl": [12, 14, 15, 17, 18, 23, 25, 26], "thei": [12, 15, 23, 25, 26], "set_flow": [12, 15, 17, 18], "set_auth_token": 12, "respect": [12, 14, 15, 17, 18, 20, 23, 24, 25, 26], "manag": [12, 14, 15, 17, 18], "properti": [12, 14, 15, 17, 18, 24], "acquir": [12, 14, 15, 17, 18], "configur": [12, 14, 15, 17, 18, 25], "load": [12, 14, 15, 17, 18, 24, 25], "next": [12, 14, 15, 17, 18, 23, 24], "behavior": [12, 14, 15, 17, 18, 24], "secur": [12, 14, 15, 17, 18], "concern": [12, 14, 15, 17, 18], "comput": [12, 14, 15, 17, 18, 20], "being": [12, 14, 15, 17, 18], "share": [12, 14, 15, 17, 18], "devic": [12, 14, 15, 17, 18, 23, 25, 26], "author": [12, 17, 23], "open": [12, 15, 18, 23, 25, 26], "login": [12, 23], "page": [12, 15, 17, 18, 23], "playwright": [12, 15, 18], "framework": [12, 15, 18, 23, 26], "microsoft": [12, 15, 18], "account": [12, 15, 18, 23], "agent": [12, 18], "send": [12, 14, 15, 17, 18], "address": [12, 18], "here": [12, 14, 15, 17, 18, 23], "found": [12, 14, 15, 17, 18, 25], "process": [12, 14, 15, 17, 18, 23, 24, 26], "bypass": [12, 14, 15, 17, 18], "newli": [12, 14, 15, 17, 18, 26], "web_url": [12, 18], "set": [12, 14, 15, 17, 18, 25, 26], "album_id": [12, 17, 18, 26], "singl": [12, 15, 17, 24], "0060254735180": 12, "maximum_bit_depth": [12, 23], "media_count": [12, 23], "albums_count": [12, 23], "slug": [12, 23], "pictur": [12, 17, 18, 23], "role": [12, 18], "released_at": [12, 23], "label": [12, 15, 23], "supplier_id": [12, 23], "qobuz_id": [12, 23], "durat": [12, 15, 17, 18, 23], "parental_warn": [12, 23], "popular": [12, 15, 17, 18, 22, 23, 24], "tracks_count": [12, 23, 26], "color": [12, 14, 18, 23], "maximum_channel_count": [12, 23], "maximum_sampling_r": [12, 23], "articl": [12, 18], "release_date_origin": [12, 23], "release_date_download": [12, 23], "release_date_stream": [12, 23], "purchas": [12, 23], "streamabl": [12, 23], "preview": [12, 18, 23, 24], "sampleabl": [12, 23], "download": [12, 15, 18, 23], "display": [12, 23], "purchasable_at": [12, 23], "streamable_at": [12, 23], "hire": [12, 23], "hires_stream": [12, 23], "award": 12, "description_languag": 12, "goodi": 12, "area": 12, "catchlin": 12, "created_at": [12, 23], "genres_list": 12, "is_offici": 12, "maximum_technical_specif": 12, "product_sales_factors_monthli": 12, "product_sales_factors_weekli": 12, "product_sales_factors_yearli": 12, "product_typ": 12, "product_url": 12, "recording_inform": 12, "relative_url": 12, "release_tag": 12, "release_typ": 12, "subtitl": [12, 18], "offset": [12, 15, 17, 18, 23], "audio_info": [12, 23], "replaygain_track_peak": [12, 23], "float": [12, 15, 18, 20], "replaygain_track_gain": [12, 23], "work": [12, 18, 23], "media_numb": [12, 23], "release_date_purchas": [12, 23], "get_featured_album": 12, "seller": 12, "editor": 12, "pick": 12, "ideal": 12, "discographi": 12, "press": [12, 23], "qobuzissim": 12, "harmonia": 12, "mundi": 12, "univers": 12, "classic": [12, 15], "jazz": 12, "jeuness": 12, "chanson": 12, "index": [12, 15, 18], "get_artist": [12, 15, 17, 18], "artist_id": [12, 17, 18, 26], "extra": 12, "tracks_appears_on": 12, "albums_with_last_releas": 12, "effect": 12, "albums_as_primary_artist_count": 12, "albums_as_primary_composer_count": 12, "medium": [12, 18, 23], "extralarg": [12, 23], "mega": [12, 23], "similar_artist_id": 12, "biographi": [12, 18], "summari": [12, 18], "get_label": 12, "label_id": 12, "1153": 12, "get_playlist": [12, 15, 18, 23, 26], "playlist_id": [12, 15], "15732665": 12, "image_rectangle_mini": 12, "featured_artist": 12, "timestamp_posit": 12, "images300": [12, 23], "updated_at": [12, 23], "percent": 12, "image_rectangl": 12, "owner": [12, 15, 23], "users_count": [12, 23], "images150": [12, 23], "is_collabor": [12, 23, 26], "featured_tag_id": 12, "name_json": 12, "genre_tag": 12, "is_discov": 12, "public_at": [12, 23], "is_publ": [12, 23, 26], "is_featur": [12, 23], "null": 12, "playlist_track_id": [12, 23], "get_featured_playlist": [12, 15], "last": [12, 15, 18, 21, 24, 25, 26], "get_user_playlist": [12, 15, 18, 23, 26], "custom": [12, 15, 25], "favorit": [12, 25], "500": [12, 18, 23], "is_publish": 12, "published_to": [12, 23], "welcom": 12, "published_from": [12, 23], "create_playlist": [12, 15, 18, 23, 25, 26], "collabor": [12, 15, 23, 26], "brief": [12, 18], "update_playlist": [12, 18, 23], "privaci": [12, 18], "own": [12, 15, 18], "17737508": 12, "update_playlist_posit": 12, "from_playlist_id": 12, "to_playlist_id": 12, "organ": [12, 24], "move": [12, 15, 18], "swap": 12, "17737509": 12, "add_playlist_track": [12, 23, 26], "track_id": [12, 14, 17, 18], "duplic": 12, "add": [12, 15, 18, 23, 25, 26], "24393122": 12, "24393138": 12, "ad": [12, 15, 18, 23, 26], "move_playlist_track": 12, "insert_befor": [12, 15], "same": [12, 15, 26], "delete_playlist_track": 12, "delet": [12, 15, 18], "delete_playlist": [12, 18, 23], "favorite_playlist": [12, 18], "subscrib": 12, "unfavorite_playlist": [12, 18], "unsubscrib": 12, "hi_r": [12, 18], "new_releas": 12, "10": [12, 15, 17, 18, 23], "categori": [12, 15, 18, 23], "mainartist": [12, 23], "releasenam": [12, 23], "exact": 12, "phrase": 12, "focu": 12, "name_superbloc": 12, "accroch": 12, "genre_id": 12, "root_categori": 12, "abstract": 12, "image_origin": 12, "category_id": [12, 15], "source_imag": 12, "published_at": 12, "section_slug": 12, "description_short": 12, "display_d": 12, "get_track_perform": 12, "unformat": 12, "call": [12, 23], "filter": [12, 15, 18], "special": 12, "composerlyricist": [12, 23], "lyricist": [12, 18], "featuredartist": 12, "produc": [12, 23], "co": [12, 23], "mixer": 12, "musicpublish": 12, "etc": [12, 18, 26], "dictionari": [12, 15, 17, 18], "contributor": [12, 18, 23], "snake": 12, "get_track_file_url": 12, "format_id": 12, "27": 12, "playback": [12, 15, 18], "hi": [12, 18], "re": [12, 18, 23], "qualiti": [12, 18], "constant": 12, "320": [12, 18, 23], "kbp": [12, 18], "6": [12, 15], "cd": [12, 23], "16": [12, 18, 23, 24], "44": [12, 18, 23], "khz": [12, 18], "7": [12, 23], "24": [12, 18, 23], "96": [12, 18], "192": 12, "mime_typ": 12, "restrict": [12, 15], "sampling_r": 12, "get_curated_track": 12, "weekli": 12, "curat": [12, 18], "baselin": 12, "step_pagin": 12, "graphic": 12, "background": [12, 14], "foreground": 12, "generated_at": 12, "expires_on": 12, "get_track_stream": [12, 18], "mime": [12, 18], "get_collection_stream": [12, 18], "get_profil": [12, 15, 18], "profil": [12, 15, 18, 23], "publicid": 12, "firstnam": [12, 18], "lastnam": [12, 18], "display_nam": [12, 15], "country_cod": [12, 17, 18], "language_cod": 12, "zone": 12, "avatar": 12, "ag": [12, 23], "creation_d": 12, "offer": 12, "start_dat": 12, "end_dat": 12, "is_cancel": 12, "household_size_max": 12, "lossy_stream": 12, "lossless_stream": 12, "hires_purchases_stream": 12, "mobile_stream": 12, "offline_stream": 12, "hfp_purchas": 12, "included_format_group_id": 12, "color_schem": 12, "logo": 12, "short_label": 12, "last_upd": 12, "favorite_album": [12, 18, 26], "favorite_artist": [12, 18, 26], "favorite_track": [12, 18, 25], "store_featur": 12, "editori": 12, "club": 12, "wallet": 12, "weeklyq": 12, "autoplai": 12, "inapp_purchase_subscripton": 12, "opt_in": 12, "music_import": 12, "get_favorit": [12, 26], "get_purchas": 12, "favorite_item": [12, 26], "unfavorite_item": 12, "unfavorit": 12, "sp_dc": [14, 15, 23], "access_token": [14, 15, 17, 18, 23], "expiri": [14, 15, 17, 18, 23], "datetim": [14, 15, 17, 18], "power": [14, 23], "musixmatch": 14, "petitlyr": 14, "japan": 14, "interfac": [14, 22], "so": [14, 15, 17, 18, 23, 24, 25, 26], "develop": [14, 18], "cooki": [14, 15, 23], "either": [14, 15, 17, 18, 23, 25], "spotify_sp_dc": [14, 15, 23], "extract": [14, 18], "local": [14, 15, 24], "storag": [14, 23], "after": [14, 15], "log": [14, 23], "exchang": [14, 15, 18], "recommend": [14, 15, 17, 18, 26, 27], "other": [14, 15, 17, 18, 23, 24], "authent": [14, 15, 17, 23, 25, 26], "relat": [14, 15, 17, 18, 23], "expir": [14, 15, 17, 18, 23], "set_sp_dc": 14, "set_access_token": [14, 15, 17, 18], "former": [14, 15, 17, 18], "relev": [14, 15, 17, 18, 26], "refresh": [14, 15, 17, 18, 23], "8601": [14, 15, 17, 18], "m": [14, 15, 17, 18, 23], "dt": [14, 15, 17, 18], "h": [14, 15, 17, 18], "sz": [14, 15, 17, 18, 23], "user": [14, 15, 17, 23, 25, 26], "reauthent": [14, 15, 17, 18], "lyrics_url": 14, "token_url": [14, 15, 17, 18], "session": [14, 15, 17, 18], "timestamp": [14, 15, 17, 18], "0vjijw4gluzamyd2vxmi3b": 14, "synctyp": 14, "starttimem": 14, "syllabl": 14, "endtimem": 14, "providerlyricsid": [14, 18], "providerdisplaynam": 14, "synclyricsuri": 14, "isdensetypefac": 14, "altern": [14, 15, 26], "isrtllanguag": 14, "fullscreenact": 14, "showupsel": 14, "highlighttext": 14, "hasvocalremov": 14, "client_id": [15, 17, 18, 23], "client_secret": [15, 17, 18, 23], "web_play": 15, "port": [15, 23], "8888": [15, 23], "redirect_uri": 15, "refresh_token": [15, 18, 23], "creation": 15, "interact": [15, 25], "control": 15, "visual": [15, 25], "form": 15, "refer": [15, 17, 20], "without": [15, 18, 23, 24], "proof": [15, 18], "pkce": [15, 18, 23, 26], "These": [15, 18], "oauth": [15, 17, 18], "spotify_client_id": [15, 23], "spotify_client_secret": [15, 23], "guid": [15, 17], "how": [15, 17, 24], "advantag": 15, "function": [15, 17, 18], "redirect": [15, 23], "uri": [15, 18, 23], "localhost": [15, 23], "callback": [15, 18, 23], "where": 15, "approach": [15, 23], "resort": 15, "deprec": 15, "unless": 15, "authorization_cod": 15, "client_credenti": [15, 17, 18], "server": [15, 23, 26], "built": 15, "flask": 15, "get_scop": [15, 23, 26], "possibl": [15, 17, 18], "auth_url": [15, 18], "web_player_token_url": 15, "classmethod": 15, "ugc": 15, "upload": 15, "spotify_connect": 15, "connect": 15, "read": [15, 25], "modifi": 15, "plai": 15, "remot": 15, "follow": [15, 18, 23, 25, 26], "listening_histori": 15, "histori": 15, "substr": 15, "e": [15, 23], "market": 15, "4aawyab9vmqn3uq7fjrgti": 15, "3166": [15, 17, 18], "alpha": [15, 17, 18], "prioriti": 15, "over": 15, "neither": 15, "consid": 15, "album_typ": [15, 23], "total_track": [15, 23, 26], "available_market": [15, 23], "external_url": [15, 23], "href": [15, 23], "height": [15, 17, 18, 23, 25], "width": [15, 17, 18, 23, 25], "release_d": [15, 23], "release_date_precis": [15, 23], "reason": 15, "external_id": [15, 23, 26], "previou": [15, 18, 23, 24], "duration_m": [15, 23], "is_play": 15, "linked_from": 15, "preview_url": [15, 23], "is_loc": [15, 23], "sever": 15, "identifi": [15, 23], "comma": 15, "20": 15, "382obepsp2rxgrnsizn5tx": 15, "1a2gtwgtffwp7ksqtwwoyo": 15, "2norn2aes5aonvsu6iwthc": 15, "get_album_track": 15, "000": [15, 23], "get_saved_album": [15, 26], "added_at": [15, 23], "save_album": [15, 26], "remove_saved_album": 15, "check_saved_album": 15, "check": 15, "alreadi": [15, 18, 23, 24], "arrai": 15, "boolean": 15, "get_new_album": 15, "shown": 15, "brows": 15, "tab": 15, "particular": 15, "omit": 15, "se": [15, 23], "album_group": 15, "uniqu": [15, 24], "0tnoyisbd1xyrbk9myaseg": 15, "2cimqhirsu0mqqyyhq0eox": 15, "57dn52uhvrhoxijzpigu3": 15, "1vcwhac5f2us3yhpwwbia6": 15, "get_artist_album": [15, 17, 18], "include_group": 15, "suppli": 15, "promot": 15, "appears_on": 15, "appear": [15, 18, 24], "main": [15, 17, 23, 26], "get_artist_top_track": [15, 18], "get_related_artist": 15, "similar": [15, 17, 18, 20, 25, 26], "given": [15, 17], "analysi": 15, "commun": 15, "listen": 15, "get_audiobook": 15, "uk": 15, "ireland": 15, "zealand": 15, "australia": 15, "7ihfbu1ypacw6ozpafjtq": 15, "html_descript": 15, "edit": [15, 18, 27], "media_typ": 15, "narrat": 15, "publish": 15, "total_chapt": 15, "chapter": 15, "audio_preview_url": 15, "chapter_numb": 15, "resume_point": 15, "fully_plai": 15, "resume_position_m": 15, "episod": [15, 23], "18yvqkdbdrvs24c0ilj2ci": 15, "1hgw3j3nxzo1tp1bttvhpz": 15, "get_audiobook_chapt": 15, "get_saved_audiobook": 15, "save_audiobook": 15, "remove_saved_audiobook": 15, "check_saved_audiobook": 15, "get_categori": 15, "dinner": 15, "desir": [15, 18], "consist": 15, "639": 15, "join": 15, "american": 15, "es_mx": 15, "spanish": 15, "mexico": 15, "icon": 15, "nformat": 15, "get_chapt": 15, "0d5wendkdwbqlrhoaj9g29": 15, "0isxvp0jmcb2adse338gkk": 15, "3zxb8fkzgu0ehalyx6uczu": 15, "get_episod": 15, "512ojhouo1ktjprkbvckyq": 15, "is_externally_host": 15, "total_episod": 15, "77o6bivlym3msb4mmil1jh": 15, "0q86acnrm6v9gyx55sxkwf": 15, "get_saved_episod": 15, "save_episod": 15, "remove_saved_episod": 15, "check_saved_episod": 15, "get_genre_se": 15, "seed": [15, 25], "get_recommend": [15, 25], "acoust": 15, "afrobeat": 15, "get_market": 15, "br": [15, 23], "IT": [15, 23], "get_playback_st": 15, "additional_typ": 15, "progress": 15, "besid": 15, "introduc": 15, "maintain": [15, 23], "might": 15, "futur": 15, "is_act": 15, "is_private_sess": 15, "is_restrict": 15, "volume_perc": 15, "repeat_st": 15, "shuffle_st": 15, "context": 15, "progress_m": 15, "is_plai": 15, "currently_playing_typ": 15, "action": 15, "interrupting_playback": 15, "paus": 15, "resum": 15, "seek": 15, "skipping_next": 15, "skipping_prev": 15, "toggling_repeat_context": 15, "toggling_shuffl": 15, "toggling_repeat_track": 15, "transferring_playback": 15, "transfer_playback": 15, "device_id": 15, "transfer": [15, 27], "start": [15, 24, 25, 26], "although": 15, "accept": 15, "than": [15, 23, 24], "400": 15, "bad": 15, "74aszwbe4lxaubb36ztrgx": 15, "happen": [15, 24], "get_devic": 15, "get_currently_plai": 15, "start_playback": 15, "context_uri": 15, "position_m": 15, "target": [15, 17, 18], "0d1841b0976bae2a3a310dd74c0f3df354899bc8": 15, "1je1imulbxcx1fz0we7opt": 15, "4iv5w9uyedyuva79axb7rh": 15, "1301wleyt98msxvhpzca6m": 15, "zero": 15, "neg": 15, "repres": 15, "sixth": 15, "millisecond": 15, "pass": [15, 23, 24, 25], "greater": 15, "length": 15, "caus": 15, "pause_playback": 15, "skip_to_next": 15, "skip": [15, 18, 23], "queue": 15, "skip_to_previ": 15, "seek_to_posit": 15, "25000": 15, "set_repeat_mod": 15, "repeat": [15, 24], "mode": [15, 18], "turn": 15, "set_playback_volum": 15, "volum": 15, "100": [15, 18, 23, 25], "inclus": 15, "toggle_playback_shuffl": 15, "toggl": 15, "shuffl": 15, "get_recently_plai": 15, "befor": [15, 23, 24, 26], "doesn": 15, "unix": 15, "cursor": [15, 18], "1484811043508": 15, "played_at": 15, "get_queu": 15, "make": [15, 17, 18, 23, 25], "currently_plai": 15, "add_to_queu": 15, "end": 15, "3ceypja9oz9gipac4ash4n": 15, "dot": [15, 23], "non": 15, "reoccur": 15, "parenthes": 15, "drill": 15, "nest": 15, "prefix": 15, "exclam": 15, "mark": 15, "just": 15, "added_bi": [15, 23], "adder": 15, "snapshot_id": [15, 23], "change_playlist_detail": [15, 23], "detail": [15, 17, 26], "cours": 15, "my": [15, 18, 23], "becom": 15, "abl": 15, "displai": [15, 25], "get_playlist_item": [15, 18, 26], "add_playlist_item": [15, 18, 23, 25, 26], "exce": 15, "bodi": 15, "insert": 15, "order": [15, 18], "third": [15, 26], "snapshot": 15, "update_playlist_item": 15, "range_start": 15, "range_length": 15, "reorder": 15, "depend": [15, 23], "clear": 15, "mutual": 15, "exclus": 15, "togeth": 15, "simpli": [15, 23], "9": 15, "amount": 15, "rang": 15, "begin": 15, "subsequ": 15, "against": 15, "remove_playlist_item": 15, "even": [15, 24], "user_id": [15, 18], "smedjan": 15, "empti": 15, "until": 15, "doe": [15, 18, 23, 24, 26], "coolest": 15, "yyyi": 15, "mm": 15, "ddthh": 15, "ss": 15, "tailor": 15, "dai": [15, 23], "revert": 15, "utc": 15, "2014": 15, "23t09": 15, "00": [15, 23, 24], "whose": 15, "am": [15, 23], "messag": [15, 17, 23], "get_category_playlist": 15, "get_playlist_cover_imag": 15, "dimens": 15, "add_playlist_cover_imag": [15, 25], "base64": [15, 25], "jpeg": 15, "payload": 15, "256": [15, 23], "kb": 15, "narrow": 15, "year": 15, "hipster": 15, "certain": 15, "g": [15, 18], "1955": 15, "1960": 15, "past": [15, 23], "week": 15, "lowest": [15, 24], "remast": 15, "doxi": 15, "mile": 15, "davi": 15, "across": [15, 26], "hit": 15, "both": [15, 18, 23], "get_show": 15, "38bs44xjbvvz3no3byf1dj": 15, "5cfcwki5pz28u0uozxkdh": 15, "5as3akmn2k11yfdddsrvaz": 15, "get_show_episod": 15, "get_saved_show": 15, "save_show": 15, "remove_saved_show": 15, "check_saved_show": 15, "11dfghvxanmlkmjxsncbnl": 15, "7oumywpwj422jrcdaszb7p": 15, "4vqporuhp5edpber92t6lq": 15, "2takcwoaazwixqijphix7b": 15, "get_saved_track": [15, 25], "save_track": 15, "remove_saved_track": 15, "check_saved_track": 15, "analysis_url": 15, "danceabl": 15, "energi": 15, "instrument": 15, "live": 15, "loud": 15, "speechi": 15, "time_signatur": 15, "track_href": 15, "valenc": 15, "get_tracks_audio_featur": 15, "get_track_audio_analysi": 15, "low": [15, 18], "level": 15, "describ": 15, "structur": 15, "rhythm": 15, "pitch": 15, "timbr": 15, "audio_analysi": 15, "meta": 15, "analyzer_vers": 15, "platform": 15, "detailed_statu": 15, "status_cod": 15, "analysis_tim": 15, "input_process": 15, "num_sampl": 15, "sample_md5": 15, "offset_second": 15, "window_second": 15, "analysis_sample_r": 15, "analysis_channel": 15, "end_of_fade_in": 15, "start_of_fade_out": 15, "tempo_confid": 15, "time_signature_confid": 15, "key_confid": 15, "mode_confid": 15, "codestr": 15, "code_vers": 15, "echoprintstr": 15, "echoprint_vers": 15, "synchstr": 15, "synch_vers": 15, "rhythmstr": 15, "rhythm_vers": 15, "bar": 15, "confid": 15, "section": [15, 23], "segment": 15, "loudness_start": 15, "loudness_max": 15, "loudness_max_tim": 15, "loudness_end": 15, "tatum": 15, "seed_artist": 15, "seed_genr": 15, "seed_track": [15, 25], "suffici": 15, "pool": 15, "veri": [15, 24], "obscur": 15, "enough": 15, "train": 15, "machin": 15, "learn": 15, "ai": 15, "model": 15, "4nhqugzhttlfvgf5szeslk": 15, "0c6xiddpze81m2q797orda": 15, "unusu": 15, "imposs": 15, "debug": [15, 23], "tunabl": [15, 25], "afterfilterings": 15, "afterrelinkings": 15, "initialpools": 15, "usernam": [15, 18], "explicit_cont": 15, "filter_en": 15, "filter_lock": 15, "product": [15, 23], "get_top_item": 15, "time_rang": 15, "calcul": 15, "affin": 15, "frame": 15, "long_term": 15, "medium_term": 15, "approxim": 15, "month": 15, "short_term": 15, "get_user_profil": [15, 18], "follow_playlist": 15, "unfollow_playlist": [15, 23], "unfollow": [15, 18], "get_followed_artist": [15, 26], "0i2xqvxqhscxjhhk6ayyr": 15, "follow_peopl": [15, 26], "sent": 15, "unfollow_peopl": 15, "check_followed_peopl": 15, "check_playlist_follow": 15, "jmperezperez": 15, "thelinmichael": 15, "wizzler": 15, "robust": 16, "expos": 17, "build": [17, 24, 25], "tidal_client_id": [17, 23], "tidal_client_secret": [17, 23], "regist": [17, 23], "set_auflow": 17, "251380836": [17, 18], "barcodeid": 17, "released": [17, 18, 23], "imagecov": 17, "videocov": [17, 18, 23], "numberofvolum": [17, 18], "numberoftrack": [17, 18, 23, 26], "numberofvideo": [17, 18, 23], "mediametadata": [17, 18, 23], "275646830": [17, 18], "resourc": [17, 23, 25], "statu": [17, 18, 23], "success": [17, 23], "failur": 17, "get_album_item": [17, 18], "pagin": [17, 18], "artifacttyp": 17, "tracknumb": [17, 18, 23], "volumenumb": [17, 18, 23], "get_album_by_barcode_id": 17, "barcode_id": 17, "barcod": 17, "196589525444": 17, "get_similar_album": [17, 18, 25], "1566": [17, 18], "7804": [17, 18], "get_similar_artist": [17, 18, 25], "251380837": [17, 18], "251380838": [17, 18], "get_track_by_isrc": 17, "usual": 17, "compris": 17, "12": 17, "alphanumer": 17, "ussm12209515": 17, "get_similar_track": [17, 25], "get_video": [17, 18], "video_id": [17, 18], "75623239": [17, 18], "59727844": [17, 18], "beyonc\u00e9": [17, 18], "worldwid": 17, "r_usr": 18, "tidal_private_client_id": 18, "tidal_private_client_secret": 18, "desktop": [18, 23], "device_cod": 18, "manual": [18, 25], "termin": 18, "w_usr": 18, "w_sub": 18, "temporarili": 18, "block": 18, "ip": 18, "too": 18, "quickli": 18, "login_url": 18, "redirect_url": 18, "resources_url": 18, "streamreadi": [18, 23], "adsupportedstreamreadi": [18, 23], "djreadi": [18, 23], "stemreadi": [18, 23], "streamstartd": [18, 23], "allowstream": [18, 23], "premiumstreamingonli": [18, 23], "vibrantcolor": [18, 23], "audioqu": [18, 23], "audiomod": [18, 23], "totalnumberofitem": 18, "replaygain": [18, 23], "peak": [18, 23], "mix": [18, 23, 25], "track_mix": [18, 23], "get_album_credit": 18, "get_album_review": 18, "review": 18, "synopsi": 18, "lastupd": [18, 23], "get_favorite_album": [18, 26], "order_direct": 18, "desc": 18, "direct": 18, "asc": 18, "on_artifact_not_found": 18, "unfavorite_album": 18, "artisttyp": [18, 23], "artistrol": [18, 23], "categoryid": [18, 23], "artist_mix": [18, 23], "subset": 18, "epsandsingl": 18, "get_artist_video": 18, "imagepath": 18, "imageid": 18, "adsurl": 18, "adsprepaywallonli": 18, "get_artist_mix_id": 18, "mix_id": 18, "000ec0b01da1ddd752ec5dee553d48": 18, "get_artist_radio": 18, "inspir": 18, "ident": 18, "get_mix_item": 18, "get_artist_biographi": 18, "biograph": 18, "get_artist_link": 18, "link": 18, "websit": 18, "sitenam": 18, "banner": 18, "relationtyp": 18, "similar_artist": 18, "get_favorite_artist": [18, 26], "unfavorite_artist": 18, "get_blocked_artist": 18, "block_artist": 18, "radio": 18, "unblock_artist": 18, "unblock": 18, "get_country_cod": 18, "get_imag": 18, "uuid": [18, 23, 26], "anim": 18, "d3c4372b": 18, "a652": 18, "40e0": 18, "bdb1": 18, "fc8d032708f6": 18, "userprofil": 18, "get_favorite_mix": 18, "datead": 18, "mixtyp": 18, "subtitletextinfo": 18, "detailimag": 18, "master": 18, "titletextinfo": 18, "lastmodifiedat": 18, "favorite_mix": 18, "000dd748ceabd5508947c6a5d3880a": 18, "unfavorite_mix": 18, "get_album_pag": 18, "device_typ": 18, "phone": 18, "mobil": 18, "smart": 18, "submodul": 18, "get_artist_pag": 18, "get_mix_pag": 18, "get_video_pag": 18, "playlist_uuid": 18, "36ea71a8": 18, "445e": 18, "41a4": 18, "82ab": 18, "6628c581535d": 18, "creator": [18, 23], "publicplaylist": 18, "squareimag": [18, 23], "promotedartist": [18, 23], "lastitemaddedat": [18, 23], "get_playlist_etag": 18, "etag": 18, "1698984074453": 18, "get_playlist_recommend": 18, "folder_id": 18, "root": 18, "4261748a": 18, "4287": 18, "4758": 18, "aaab": 18, "6d5be3e99e52": 18, "folder": 18, "place": 18, "under": 18, "move_playlist": 18, "e09ab9c": 18, "2e87": 18, "41b8": 18, "b404": 18, "3cd712bf706e": 18, "contentbehavior": [18, 23], "sharinglevel": [18, 23], "trn": [18, 23], "followinfo": [18, 23], "nroffollow": [18, 23], "tidalresourcenam": [18, 23], "followtyp": [18, 23], "userid": 18, "get_personal_playlist": 18, "folder_uuid": 18, "itemtyp": 18, "addedat": 18, "parent": [18, 23, 24, 25], "readi": [18, 23], "set_playlist_privaci": [18, 23], "from_playlist_uuid": 18, "on_dupl": 18, "move_playlist_item": 18, "from_index": 18, "to_index": 18, "delete_playlist_item": 18, "get_personal_playlist_fold": 18, "flatten": 18, "include_onli": 18, "date_upd": 18, "createdat": 18, "create_playlist_fold": 18, "delete_playlist_fold": 18, "92b3c1ea": 18, "245a": 18, "4e5a": 18, "a5a4": 18, "c215f7a65b9f": 18, "tophit": 18, "collection_id": 18, "audio_qu": 18, "video_qu": 18, "max_resolut": 18, "2160": 18, "playback_mod": 18, "asset_present": 18, "streaming_session_id": 18, "immers": 18, "hifi": 18, "plan": 18, "price": 18, "dolbi": 18, "atmo": 18, "64": [18, 23], "1411": 18, "9216": 18, "mqa": 18, "audio_onli": 18, "vertic": 18, "offlin": 18, "asset": [18, 23, 25], "present": 18, "30": [18, 24], "get_video_stream": 18, "tommi": 18, "wright": 18, "kelman": 18, "duran": 18, "teriu": 18, "dream": 18, "de": [18, 23], "diamant": 18, "mike": [18, 25], "dean": 18, "trackid": [18, 23], "lyricsprovid": 18, "providercommontrackid": 18, "isrighttoleft": 18, "get_track_mix_id": 18, "tidal_id": 18, "0017159e6a1f34ae3d981792d72ecf": 18, "get_track_playback_info": 18, "hc": 18, "en": 18, "360004255778": 18, "info": 18, "assetpresent": 18, "manifestmimetyp": 18, "manifesthash": 18, "manifest": 18, "albumreplaygain": 18, "albumpeakamplitud": 18, "trackreplaygain": 18, "trackpeakamplitud": 18, "get_track_recommend": 18, "suggested_track": 18, "get_favorite_track": 18, "unfavorite_track": 18, "countrycod": 18, "fullnam": 18, "nicknam": 18, "citi": 18, "postalcod": 18, "usstat": 18, "phonenumb": 18, "birthdai": 18, "channelid": 18, "parentid": 18, "acceptedeula": 18, "facebookuid": 18, "appleuid": 18, "googleuid": 18, "accountlinkcr": 18, "emailverifi": 18, "newus": 18, "get_sess": 18, "sessionid": 18, "partnerid": 18, "authorizedforofflin": 18, "authorizedforofflined": 18, "get_favorite_id": 18, "172311284": 18, "numberoffollow": 18, "prompt": [18, 23], "primari": [18, 21], "secondari": 18, "updatedtim": 18, "supportedcontenttyp": 18, "profiletyp": 18, "get_user_follow": 18, "peopl": [18, 26], "imfollow": 18, "follow_us": 18, "unfollow_us": 18, "get_blocked_us": 18, "block_us": 18, "unblock_us": 18, "get_video_playback_info": 18, "videoid": 18, "streamtyp": 18, "videoqu": 18, "get_favorite_video": 18, "favorite_video": 18, "unfavorite_video": 18, "util": [20, 21, 24], "ndarrai": 20, "levenshtein": [20, 24], "ratio": [20, 24], "measur": 20, "compar": 20, "numpi": [20, 24], "instal": 20, "otherwis": [20, 24], "lightweight": 22, "3": [22, 23, 24, 25], "packag": 23, "pip": 23, "come": [23, 25], "pypi": 23, "conda": 23, "forg": 23, "onc": 23, "pep": 23, "541": 23, "resolv": [23, 24], "grab": 23, "repositori": 23, "git": 23, "clone": 23, "github": 23, "bbye98": 23, "enter": [23, 24], "directori": [23, 24], "virtual": 23, "prevent": 23, "conflict": 23, "requirements_minim": 23, "txt": 23, "env": 23, "f": [23, 24, 25, 26], "yml": 23, "venv": 23, "bin": 23, "posix": 23, "bash": 23, "zsh": 23, "script": 23, "bat": 23, "cmd": 23, "ex": 23, "ps1": 23, "powershel": 23, "alongsid": 23, "step": [23, 26], "r": [23, 24], "virtualenv": 23, "linux": 23, "done": 23, "try": [23, 26], "import": [23, 24, 25, 26], "error": 23, "modulenotfounderror": 23, "No": 23, "rais": 23, "successfulli": 23, "out": [23, 24, 25], "box": 23, "few": 23, "addit": [23, 26], "prerequisit": 23, "cach": 23, "client_itun": [23, 24], "client_qobuz": [23, 26], "protect": 23, "qobuz_email": 23, "qobuz_password": 23, "post": 23, "spawn": 23, "normal": 23, "launch": 23, "find": [23, 25, 26], "chromium": 23, "f12": 23, "devtool": 23, "navig": 23, "firefox": 23, "shift": 23, "f9": 23, "inspector": 23, "nagiv": 23, "client_spotify_lyr": 23, "choic": [23, 25], "spotify_port": 23, "client_spotifi": [23, 24, 25, 26], "scope": [23, 25, 26], "get_authorization_scop": 23, "autom": 23, "click": 23, "agre": 23, "jot": 23, "client_tid": [23, 24, 25, 26], "client_tidal_priv": 23, "proxi": 23, "tool": 23, "intercept": 23, "instruct": 23, "consol": 23, "edm": 23, "group": 23, "galanti": [23, 25], "musicartist": 23, "wrappertyp": 23, "artistnam": [23, 24], "artistlinkurl": 23, "543322169": 23, "uo": 23, "artistid": 23, "amgartistid": 23, "2616267": 23, "primarygenrenam": 23, "danc": 23, "primarygenreid": 23, "17": 23, "static": 23, "8dcf30e5c8e30281ecbb13b0886426c8": 23, "127": 23, "865362": 23, "4stqvofp9vemcemlw50sbu": 23, "3382444": 23, "pop": 23, "v1": 23, "640": 23, "scdn": 23, "ab6761610000e5eb7bda087d6fb48d481efd3344": 23, "ab676161000051747bda087d6fb48d481efd3344": 23, "160": 23, "ab6761610000f1787bda087d6fb48d481efd3344": 23, "67": 23, "4676988": 23, "a627e21c": 23, "60f7": 23, "4e90": 23, "b2bb": 23, "e50b178c4f0b": 23, "1024x256": 23, "1024": 23, "1080x720": 23, "1080": 23, "720": 23, "160x107": 23, "107": 23, "160x160": 23, "320x214": 23, "214": 23, "320x320": 23, "480x480": 23, "480": 23, "640x428": 23, "428": 23, "750x500": 23, "750": 23, "750x750": 23, "www": 23, "72": 23, "11": [23, 24], "engin": 23, "team": 23, "000202a7e72fd90d0c0df2ed56ddea": 23, "everybodi": 23, "talk": 23, "neon": 23, "tree": 23, "kind": 23, "315816847": 23, "collectionid": [23, 24], "578054990": 23, "578054997": 23, "glee": 23, "cast": 23, "collectionnam": 23, "season": 23, "vol": 23, "tracknam": [23, 24], "collectioncensorednam": 23, "trackcensorednam": 23, "artistviewurl": 23, "collectionviewurl": 23, "trackviewurl": 23, "previewurl": 23, "ssl": 23, "audiopreview125": 23, "v4": 23, "86": 23, "4b": 23, "3f": 23, "864b3f23": 23, "9155": 23, "9ce8": 23, "c1c0": 23, "fc115a8af80a": 23, "mzaf_13828074306318913858": 23, "p": 23, "artworkurl30": 23, "is1": 23, "mzstatic": 23, "thumb": 23, "music115": 23, "57": 23, "6d": 23, "4e": 23, "576d4e7a": 23, "7860": 23, "595a": 23, "5ccd": 23, "05e965413df5": 23, "886443746404": 23, "30x30bb": 23, "artworkurl60": 23, "60x60bb": 23, "artworkurl100": 23, "100x100bb": 23, "collectionpric": 23, "99": 23, "trackpric": 23, "29": 23, "2012": 23, "05t12": 23, "00z": [23, 24], "collectionexplicit": 23, "notexplicit": 23, "trackexplicit": 23, "disccount": 23, "discnumb": 23, "trackcount": 23, "tracktimemilli": 23, "179280": 23, "usa": 23, "currenc": 23, "usd": 23, "isstream": 23, "track_qobuz": 23, "2022": [23, 24], "arko": 23, "boom": 23, "todd": 23, "15899504": 23, "fc": 23, "7v": 23, "ilfmuz10e7vfc_230": 23, "ilfmuz10e7vfc_50": 23, "ilfmuz10e7vfc_600": 23, "0859766309663": 23, "1665180000": 23, "4026379": 23, "95": 23, "speedi": 23, "178369185": 23, "536": 23, "133": 23, "0070ef": 23, "hip": 23, "hop": 23, "rap": 23, "ilfmuz10e7vfc": 23, "1689231600": 23, "08": 23, "15899505": 23, "tcagm2280786": 23, "178369187": 23, "track_spotifi": 23, "0rpddszuhfncuwnjxkosji": 23, "au": 23, "AT": 23, "BE": 23, "bo": 23, "bg": 23, "cl": 23, "cr": 23, "cy": 23, "cz": 23, "dk": 23, "ec": 23, "ee": 23, "sv": 23, "fi": 23, "fr": 23, "gr": 23, "gt": 23, "hn": 23, "hk": 23, "hu": 23, "ie": 23, "lv": 23, "lt": 23, "lu": 23, "mt": 23, "nl": 23, "nz": 23, "ni": 23, "NO": 23, "pa": 23, "py": 23, "pe": 23, "ph": 23, "pl": 23, "pt": 23, "sg": 23, "sk": 23, "ch": 23, "tw": 23, "tr": 23, "ui": 23, "gb": 23, "li": [23, 26], "mc": 23, "th": 23, "ro": 23, "il": 23, "za": 23, "sa": 23, "ae": 23, "bh": 23, "qa": 23, "om": 23, "kw": 23, "eg": 23, "tn": 23, "lb": 23, "jo": 23, "IN": 23, "BY": 23, "kz": 23, "md": 23, "ua": 23, "al": 23, "ba": 23, "hr": 23, "mk": 23, "si": 23, "kr": 23, "bd": 23, "pk": 23, "lk": 23, "gh": 23, "ke": 23, "ng": 23, "tz": 23, "ug": 23, "bb": 23, "bz": 23, "bt": 23, "bw": 23, "bf": 23, "cv": 23, "cw": 23, "dm": 23, "fj": 23, "gm": 23, "gd": 23, "gw": 23, "gy": 23, "ht": 23, "jm": 23, "ki": 23, "l": 23, "lr": 23, "mw": 23, "mv": 23, "ml": 23, "mh": 23, "fm": 23, "na": 23, "nr": 23, "ne": 23, "pw": 23, "pg": 23, "w": 23, "st": 23, "sn": 23, "sc": 23, "sl": 23, "sb": 23, "kn": 23, "lc": 23, "vc": 23, "sr": 23, "tl": 23, "TO": 23, "tt": 23, "az": 23, "bn": 23, "bi": 23, "kh": 23, "cm": 23, "td": 23, "km": 23, "gq": 23, "ga": 23, "gn": 23, "kg": 23, "la": 23, "mo": 23, "mr": 23, "mn": 23, "np": [23, 24], "rw": 23, "tg": 23, "uz": 23, "zw": 23, "bj": 23, "mg": 23, "mu": 23, "mz": 23, "ao": 23, "ci": 23, "dj": 23, "zm": 23, "cg": 23, "iq": 23, "tj": 23, "ve": 23, "xk": 23, "0urfz92jmjwdbzbb7hebir": 23, "ab67616d0000b2734a6c0376235e5aa44e59d2c2": 23, "300": 23, "ab67616d00001e024a6c0376235e5aa44e59d2c2": 23, "ab67616d000048514a6c0376235e5aa44e59d2c2": 23, "01": 23, "177280": 23, "usum71119189": 23, "2iumqdfgzchihs3b9e9ewq": 23, "81": 23, "14492425": 23, "451": 23, "due": 23, "demand": 23, "right": [23, 26], "holder": 23, "prohibit": 23, "track_tidal_priv": 23, "177": 23, "999969": 23, "17t00": 23, "0000": 23, "55": 23, "mercuri": 23, "2011": 23, "umg": 23, "inc": 23, "stereo": 23, "3665225": 23, "e6f17398": 23, "759e": 23, "45a0": 23, "9673": 23, "6ded6811e199": 23, "14492422": 23, "1c2d7c90": 23, "034e": 23, "485a": 23, "be1f": 23, "24a669c7e6e": 23, "f8af88": 23, "0019768c833a193c29829e5bf473fc": 23, "we": [23, 24, 25, 26], "playlist_qobuz": 23, "ilfmuz10e7vfc_150": 23, "1701053442": 23, "ilfmuz10e7vfc_300": 23, "1701053443": 23, "18171379": 23, "52": 23, "3865979203": 23, "playlist_spotifi": 23, "3vsxl8ftlyoqgewazcz5d": 23, "primary_color": 23, "myw0ndk1ngnlmze0m2e1otbkmtg0otdkn2m4mgi1nmi3zji5ymmxytgz": 23, "2023": [23, 24, 25, 26], "27t02": 23, "45z": 23, "video_thumbnail": 23, "playlist_tidal_priv": 23, "e9f6aff1": 23, "f39e": 23, "462b": 23, "90c4": 23, "41686877a555": 23, "unrestrict": 23, "8e75fac4": 23, "cf24": 23, "45c8": 23, "8bd2": 23, "98ab69f7f74b": 23, "eefe947a": 23, "5cdb": 23, "40ee": 23, "8057": 23, "213941ff48d5": 23, "45": 23, "504": 23, "46": 23, "085": 23, "mutagen": 23, "common": 23, "test": [23, 24], "middle_c": 23, "notat": 23, "getattr": 23, "attr": 23, "print": [23, 24], "capit": [23, 24], "middl": 23, "squar": 23, "game": 23, "similarli": 23, "setattr": 23, "261": 23, "63": 23, "forget": [23, 24], "convers": [23, 24], "middle_c_alac": 23, "116kb": 23, "02": 23, "930": 23, "3kbit": 23, "speed": [23, 24], "177x": 23, "point": [23, 24], "novemb": [24, 25, 26], "glob": 24, "audio_fil": 24, "suffix": 24, "dive": 24, "def": 24, "print_metadata": 24, "__dict__": 24, "startswith": 24, "upper": 24, "els": 24, "below": [24, 26], "highlight": 24, "involv": 24, "spektrem_shin": 24, "0x7fb5cdaeb790": 24, "let": 24, "spektrem": 24, "shine": 24, "count": 24, "1030107": 24, "44100": 24, "had": 24, "pull": 24, "At": 24, "yet": 24, "written": 24, "compat": 24, "1032kb": 24, "09": 24, "280": 24, "9kbit": 24, "68": 24, "5x": 24, "With": 24, "280593": 24, "persist": 24, "typic": 24, "accur": 24, "good": 24, "idea": 24, "select": [24, 25, 26], "closest": 24, "choos": 24, "distanc": 24, "levenshtein_ratio": 24, "lower": 24, "itunes_result": 24, "itunes_track": 24, "argmax": 24, "itunes_album": 24, "2013": 24, "gfted": 24, "06t12": 24, "electron": 24, "fill": 24, "By": 24, "set_metadata_us": 24, "spotify_result": 24, "spotify_track": [24, 26], "gb2ld0901581": 24, "128": 24, "correct": [24, 26], "get_track_compo": 24, "tidal_result": 24, "tidal_track": [24, 26], "tidal_compos": 24, "tidal_lyr": 24, "did": 24, "sometim": [24, 26], "tobu_back_to_y": 24, "0x7fb6744afdd0": 24, "tobu": 24, "tom": 24, "burkovski": 24, "nc": 24, "06t07": 24, "hous": [24, 25], "gb2ld2210368": 24, "1104053": 24, "poorli": 24, "miss": 24, "fix": 24, "three": 24, "25t12": 24, "98": 24, "voil\u00e0": 24, "twice": 24, "becaus": 24, "There": 24, "eleg": 24, "solut": 24, "problem": 24, "unfortun": [24, 26], "19": [25, 26], "help": 25, "discov": 25, "leverag": 25, "suggest": 25, "b64encod": 25, "random": 25, "ipython": 25, "html": 25, "ifram": 25, "ipywidget": 25, "gridspeclayout": 25, "sure": 25, "0jz9tvoltzjagqiyc4hyzx": 25, "avicii": 25, "0bmb3nzquhbfi6nm4setvu": 25, "cash": 25, "surrend": 25, "1pq8ywty9v2ivzwj7gyxxb": 25, "mako": 25, "our": 25, "70iflb5egla8wufwgxborz": 25, "william": 25, "fallin": 25, "6jspbxzld2yemjtjz2gqot": 25, "passion": 25, "pit": 25, "76b6ljxtolasgxlanjnndr": 25, "sick": 25, "individu": 25, "2v65y3px4dkrhy1djlxd9p": 25, "swedish": 25, "mafia": 25, "worri": 25, "child": 25, "feat": 25, "john": 25, "martin": 25, "1gpf8iwqqj8qoevjhfiidu": 25, "zedd": 25, "matthew": 25, "koma": 25, "miriam": 25, "bryant": 25, "randomli": 25, "recommended_track": 25, "k": 25, "spotify_playlist": [25, 26], "global": 25, "_dh": 25, "minim_mix_smal": 25, "rb": 25, "nifti": 25, "emb": 25, "grid": 25, "len": 25, "enumer": 25, "framebord": 25, "lazi": 25, "152": 25, "510": 25, "divmod": 25, "procedur": [25, 26], "51073951": 25, "62082351": 25, "32553484": 25, "147258423": 25, "109273852": 25, "237059212": 25, "17271290": 25, "27171015": 25, "similar_track": 25, "div": 25, "pad": 25, "bottom": 25, "overflow": 25, "hidden": 25, "max": 25, "src": 25, "layout": 25, "gridifi": 25, "allowfullscreen": 25, "absolut": 25, "left": 25, "1px": 25, "min": 25, "margin": 25, "auto": 25, "tunemymus": 26, "assum": 26, "destin": 26, "challeng": 26, "often": 26, "difficult": 26, "barebon": 26, "pair": 26, "fine": 26, "tune": 26, "complex": 26, "those": 26, "remix": 26, "qobuz_playlist_id": 26, "17865119": 26, "qobuz_playlist": 26, "new_spotify_playlist": 26, "equival": 26, "simpl": 26, "spotify_track_uri": 26, "qobuz_track": 26, "new_tidal_playlist": 26, "confirm": 26, "tidal_track_id": 26, "spotify_playlist_id": 26, "3rw9qy60ceh6dfjauwdxmh": 26, "new_qobuz_playlist": 26, "thankfulli": 26, "qobuz_track_id": 26, "tidal_playlist_uuid": 26, "40052e73": 26, "58d4": 26, "4abb": 26, "bc1c": 26, "abace76d2f15": 26, "tidal_playlist": 26, "tidal_playlist_item": 26, "qobuz_favorit": 26, "qobuz_favorite_album": 26, "qobuz_favorite_artist": 26, "align": 26, "spotify_album_id": 26, "qobuz_album": 26, "spotify_album": 26, "indexerror": 26, "break": 26, "follow_artist": 26, "spotify_artist_id": 26, "qobuz_artist": 26, "spotify_artist": 26, "tidal_album_id": 26, "tidal_album": 26, "lstrip": 26, "tidal_artist_id": 26, "tidal_artist": 26, "spotify_favorite_album": 26, "spotify_favorite_artist": 26, "qobuz_album_id": 26, "qobuz_artist_id": 26, "tidal_favorite_album": 26, "tidal_favorite_artist": 26}, "objects": {"": [[1, 0, 0, "-", "minim"]], "minim": [[2, 0, 0, "-", "audio"], [9, 0, 0, "-", "itunes"], [11, 0, 0, "-", "qobuz"], [13, 0, 0, "-", "spotify"], [16, 0, 0, "-", "tidal"], [19, 0, 0, "-", "utility"]], "minim.audio": [[3, 1, 1, "", "Audio"], [4, 1, 1, "", "FLACAudio"], [5, 1, 1, "", "MP3Audio"], [6, 1, 1, "", "MP4Audio"], [7, 1, 1, "", "OggAudio"], [8, 1, 1, "", "WAVEAudio"]], "minim.audio.Audio": [[3, 2, 1, "", "convert"], [3, 2, 1, "", "set_metadata_using_itunes"], [3, 2, 1, "", "set_metadata_using_qobuz"], [3, 2, 1, "", "set_metadata_using_spotify"], [3, 2, 1, "", "set_metadata_using_tidal"]], "minim.audio.FLACAudio": [[4, 2, 1, "", "convert"], [4, 2, 1, "", "set_metadata_using_itunes"], [4, 2, 1, "", "set_metadata_using_qobuz"], [4, 2, 1, "", "set_metadata_using_spotify"], [4, 2, 1, "", "set_metadata_using_tidal"], [4, 2, 1, "", "write_metadata"]], "minim.audio.MP3Audio": [[5, 2, 1, "", "convert"], [5, 2, 1, "", "set_metadata_using_itunes"], [5, 2, 1, "", "set_metadata_using_qobuz"], [5, 2, 1, "", "set_metadata_using_spotify"], [5, 2, 1, "", "set_metadata_using_tidal"], [5, 2, 1, "", "write_metadata"]], "minim.audio.MP4Audio": [[6, 2, 1, "", "convert"], [6, 2, 1, "", "set_metadata_using_itunes"], [6, 2, 1, "", "set_metadata_using_qobuz"], [6, 2, 1, "", "set_metadata_using_spotify"], [6, 2, 1, "", "set_metadata_using_tidal"], [6, 2, 1, "", "write_metadata"]], "minim.audio.OggAudio": [[7, 2, 1, "", "convert"], [7, 2, 1, "", "set_metadata_using_itunes"], [7, 2, 1, "", "set_metadata_using_qobuz"], [7, 2, 1, "", "set_metadata_using_spotify"], [7, 2, 1, "", "set_metadata_using_tidal"], [7, 2, 1, "", "write_metadata"]], "minim.audio.WAVEAudio": [[8, 2, 1, "", "convert"], [8, 2, 1, "", "set_metadata_using_itunes"], [8, 2, 1, "", "set_metadata_using_qobuz"], [8, 2, 1, "", "set_metadata_using_spotify"], [8, 2, 1, "", "set_metadata_using_tidal"], [8, 2, 1, "", "write_metadata"]], "minim.itunes": [[10, 1, 1, "", "SearchAPI"]], "minim.itunes.SearchAPI": [[10, 2, 1, "", "lookup"], [10, 2, 1, "", "search"]], "minim.qobuz": [[12, 1, 1, "", "PrivateAPI"]], "minim.qobuz.PrivateAPI": [[12, 2, 1, "", "add_playlist_tracks"], [12, 2, 1, "", "create_playlist"], [12, 2, 1, "", "delete_playlist"], [12, 2, 1, "", "delete_playlist_tracks"], [12, 2, 1, "", "favorite_items"], [12, 2, 1, "", "favorite_playlist"], [12, 2, 1, "", "get_album"], [12, 2, 1, "", "get_artist"], [12, 2, 1, "", "get_collection_streams"], [12, 2, 1, "", "get_curated_tracks"], [12, 2, 1, "", "get_favorites"], [12, 2, 1, "", "get_featured_albums"], [12, 2, 1, "", "get_featured_playlists"], [12, 2, 1, "", "get_label"], [12, 2, 1, "", "get_playlist"], [12, 2, 1, "", "get_profile"], [12, 2, 1, "", "get_purchases"], [12, 2, 1, "", "get_track"], [12, 2, 1, "", "get_track_file_url"], [12, 2, 1, "", "get_track_performers"], [12, 2, 1, "", "get_track_stream"], [12, 2, 1, "", "get_user_playlists"], [12, 2, 1, "", "move_playlist_tracks"], [12, 2, 1, "", "search"], [12, 2, 1, "", "set_auth_token"], [12, 2, 1, "", "set_flow"], [12, 2, 1, "", "unfavorite_items"], [12, 2, 1, "", "unfavorite_playlist"], [12, 2, 1, "", "update_playlist"], [12, 2, 1, "", "update_playlist_position"]], "minim.spotify": [[14, 1, 1, "", "PrivateLyricsService"], [15, 1, 1, "", "WebAPI"]], "minim.spotify.PrivateLyricsService": [[14, 2, 1, "", "get_lyrics"], [14, 2, 1, "", "set_access_token"], [14, 2, 1, "", "set_sp_dc"]], "minim.spotify.WebAPI": [[15, 2, 1, "", "add_playlist_cover_image"], [15, 2, 1, "", "add_playlist_items"], [15, 2, 1, "", "add_to_queue"], [15, 2, 1, "", "change_playlist_details"], [15, 2, 1, "", "check_followed_people"], [15, 2, 1, "", "check_playlist_followers"], [15, 2, 1, "", "check_saved_albums"], [15, 2, 1, "", "check_saved_audiobooks"], [15, 2, 1, "", "check_saved_episodes"], [15, 2, 1, "", "check_saved_shows"], [15, 2, 1, "", "check_saved_tracks"], [15, 2, 1, "", "create_playlist"], [15, 2, 1, "", "follow_people"], [15, 2, 1, "", "follow_playlist"], [15, 2, 1, "", "get_album"], [15, 2, 1, "", "get_album_tracks"], [15, 2, 1, "", "get_albums"], [15, 2, 1, "", "get_artist"], [15, 2, 1, "", "get_artist_albums"], [15, 2, 1, "", "get_artist_top_tracks"], [15, 2, 1, "", "get_artists"], [15, 2, 1, "", "get_audiobook"], [15, 2, 1, "", "get_audiobook_chapters"], [15, 2, 1, "", "get_audiobooks"], [15, 2, 1, "", "get_categories"], [15, 2, 1, "", "get_category"], [15, 2, 1, "", "get_category_playlists"], [15, 2, 1, "", "get_chapter"], [15, 2, 1, "", "get_chapters"], [15, 2, 1, "", "get_currently_playing"], [15, 2, 1, "", "get_devices"], [15, 2, 1, "", "get_episode"], [15, 2, 1, "", "get_episodes"], [15, 2, 1, "", "get_featured_playlists"], [15, 2, 1, "", "get_followed_artists"], [15, 2, 1, "", "get_genre_seeds"], [15, 2, 1, "", "get_markets"], [15, 2, 1, "", "get_new_albums"], [15, 2, 1, "", "get_playback_state"], [15, 2, 1, "", "get_playlist"], [15, 2, 1, "", "get_playlist_cover_image"], [15, 2, 1, "", "get_playlist_items"], [15, 2, 1, "", "get_playlists"], [15, 2, 1, "", "get_profile"], [15, 2, 1, "", "get_queue"], [15, 2, 1, "", "get_recently_played"], [15, 2, 1, "", "get_recommendations"], [15, 2, 1, "", "get_related_artists"], [15, 2, 1, "", "get_saved_albums"], [15, 2, 1, "", "get_saved_audiobooks"], [15, 2, 1, "", "get_saved_episodes"], [15, 2, 1, "", "get_saved_shows"], [15, 2, 1, "", "get_saved_tracks"], [15, 2, 1, "", "get_scopes"], [15, 2, 1, "", "get_show"], [15, 2, 1, "", "get_show_episodes"], [15, 2, 1, "", "get_shows"], [15, 2, 1, "", "get_top_items"], [15, 2, 1, "", "get_track"], [15, 2, 1, "", "get_track_audio_analysis"], [15, 2, 1, "", "get_track_audio_features"], [15, 2, 1, "", "get_tracks"], [15, 2, 1, "", "get_tracks_audio_features"], [15, 2, 1, "", "get_user_playlists"], [15, 2, 1, "", "get_user_profile"], [15, 2, 1, "", "pause_playback"], [15, 2, 1, "", "remove_playlist_items"], [15, 2, 1, "", "remove_saved_albums"], [15, 2, 1, "", "remove_saved_audiobooks"], [15, 2, 1, "", "remove_saved_episodes"], [15, 2, 1, "", "remove_saved_shows"], [15, 2, 1, "", "remove_saved_tracks"], [15, 2, 1, "", "save_albums"], [15, 2, 1, "", "save_audiobooks"], [15, 2, 1, "", "save_episodes"], [15, 2, 1, "", "save_shows"], [15, 2, 1, "", "save_tracks"], [15, 2, 1, "", "search"], [15, 2, 1, "", "seek_to_position"], [15, 2, 1, "", "set_access_token"], [15, 2, 1, "", "set_flow"], [15, 2, 1, "", "set_playback_volume"], [15, 2, 1, "", "set_repeat_mode"], [15, 2, 1, "", "skip_to_next"], [15, 2, 1, "", "skip_to_previous"], [15, 2, 1, "", "start_playback"], [15, 2, 1, "", "toggle_playback_shuffle"], [15, 2, 1, "", "transfer_playback"], [15, 2, 1, "", "unfollow_people"], [15, 2, 1, "", "unfollow_playlist"], [15, 2, 1, "", "update_playlist_items"]], "minim.tidal": [[17, 1, 1, "", "API"], [18, 1, 1, "", "PrivateAPI"]], "minim.tidal.API": [[17, 2, 1, "", "get_album"], [17, 2, 1, "", "get_album_by_barcode_id"], [17, 2, 1, "", "get_album_items"], [17, 2, 1, "", "get_albums"], [17, 2, 1, "", "get_artist"], [17, 2, 1, "", "get_artist_albums"], [17, 2, 1, "", "get_artists"], [17, 2, 1, "", "get_similar_albums"], [17, 2, 1, "", "get_similar_artists"], [17, 2, 1, "", "get_similar_tracks"], [17, 2, 1, "", "get_track"], [17, 2, 1, "", "get_track_by_isrc"], [17, 2, 1, "", "get_tracks"], [17, 2, 1, "", "get_video"], [17, 2, 1, "", "get_videos"], [17, 2, 1, "", "search"], [17, 2, 1, "", "set_access_token"], [17, 2, 1, "", "set_flow"]], "minim.tidal.PrivateAPI": [[18, 2, 1, "", "add_playlist_items"], [18, 2, 1, "", "block_artist"], [18, 2, 1, "", "block_user"], [18, 2, 1, "", "create_playlist"], [18, 2, 1, "", "create_playlist_folder"], [18, 2, 1, "", "delete_playlist"], [18, 2, 1, "", "delete_playlist_folder"], [18, 2, 1, "", "delete_playlist_item"], [18, 2, 1, "", "favorite_albums"], [18, 2, 1, "", "favorite_artists"], [18, 2, 1, "", "favorite_mixes"], [18, 2, 1, "", "favorite_playlists"], [18, 2, 1, "", "favorite_tracks"], [18, 2, 1, "", "favorite_videos"], [18, 2, 1, "", "follow_user"], [18, 2, 1, "", "get_album"], [18, 2, 1, "", "get_album_credits"], [18, 2, 1, "", "get_album_items"], [18, 2, 1, "", "get_album_page"], [18, 2, 1, "", "get_album_review"], [18, 2, 1, "", "get_artist"], [18, 2, 1, "", "get_artist_albums"], [18, 2, 1, "", "get_artist_biography"], [18, 2, 1, "", "get_artist_links"], [18, 2, 1, "", "get_artist_mix_id"], [18, 2, 1, "", "get_artist_page"], [18, 2, 1, "", "get_artist_radio"], [18, 2, 1, "", "get_artist_top_tracks"], [18, 2, 1, "", "get_artist_videos"], [18, 2, 1, "", "get_blocked_artists"], [18, 2, 1, "", "get_blocked_users"], [18, 2, 1, "", "get_collection_streams"], [18, 2, 1, "", "get_country_code"], [18, 2, 1, "", "get_favorite_albums"], [18, 2, 1, "", "get_favorite_artists"], [18, 2, 1, "", "get_favorite_ids"], [18, 2, 1, "", "get_favorite_mixes"], [18, 2, 1, "", "get_favorite_tracks"], [18, 2, 1, "", "get_favorite_videos"], [18, 2, 1, "", "get_image"], [18, 2, 1, "", "get_mix_items"], [18, 2, 1, "", "get_mix_page"], [18, 2, 1, "", "get_personal_playlist_folders"], [18, 2, 1, "", "get_personal_playlists"], [18, 2, 1, "", "get_playlist"], [18, 2, 1, "", "get_playlist_etag"], [18, 2, 1, "", "get_playlist_items"], [18, 2, 1, "", "get_playlist_recommendations"], [18, 2, 1, "", "get_profile"], [18, 2, 1, "", "get_session"], [18, 2, 1, "", "get_similar_albums"], [18, 2, 1, "", "get_similar_artists"], [18, 2, 1, "", "get_track"], [18, 2, 1, "", "get_track_composers"], [18, 2, 1, "", "get_track_contributors"], [18, 2, 1, "", "get_track_credits"], [18, 2, 1, "", "get_track_lyrics"], [18, 2, 1, "", "get_track_mix_id"], [18, 2, 1, "", "get_track_playback_info"], [18, 2, 1, "", "get_track_recommendations"], [18, 2, 1, "", "get_track_stream"], [18, 2, 1, "", "get_user_followers"], [18, 2, 1, "", "get_user_following"], [18, 2, 1, "", "get_user_playlist"], [18, 2, 1, "", "get_user_playlists"], [18, 2, 1, "", "get_user_profile"], [18, 2, 1, "", "get_video"], [18, 2, 1, "", "get_video_page"], [18, 2, 1, "", "get_video_playback_info"], [18, 2, 1, "", "get_video_stream"], [18, 2, 1, "", "move_playlist"], [18, 2, 1, "", "move_playlist_item"], [18, 2, 1, "", "search"], [18, 2, 1, "", "set_access_token"], [18, 2, 1, "", "set_flow"], [18, 2, 1, "", "set_playlist_privacy"], [18, 2, 1, "", "unblock_artist"], [18, 2, 1, "", "unblock_user"], [18, 2, 1, "", "unfavorite_albums"], [18, 2, 1, "", "unfavorite_artists"], [18, 2, 1, "", "unfavorite_mixes"], [18, 2, 1, "", "unfavorite_playlist"], [18, 2, 1, "", "unfavorite_tracks"], [18, 2, 1, "", "unfavorite_videos"], [18, 2, 1, "", "unfollow_user"], [18, 2, 1, "", "update_playlist"]], "minim.utility": [[20, 3, 1, "", "levenshtein_ratio"], [21, 3, 1, "", "multivalue_formatter"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "function", "Python function"]}, "titleterms": {"minim": [1, 22, 23], "audio": [2, 3, 23, 24], "file": [2, 23, 24], "object": 2, "softwar": [3, 4, 5, 6, 7, 8], "depend": [3, 4, 5, 6, 7, 8], "flacaudio": 4, "mp3audio": 5, "mp4audio": 6, "oggaudio": 7, "waveaudio": 8, "itun": [9, 23], "searchapi": [10, 23], "qobuz": [11, 23, 26], "privateapi": [12, 18, 23], "sampl": [12, 14, 15, 17, 18], "respons": [12, 14, 15, 17, 18], "user": [12, 18, 27], "authent": [12, 18], "subscript": [12, 18], "spotifi": [13, 23, 25, 26], "privatelyricsservic": [14, 23], "webapi": [15, 23], "author": [15, 18], "scope": [15, 18], "tidal": [16, 23, 25, 26], "api": [17, 23, 24], "util": 19, "function": [19, 24], "levenshtein_ratio": 20, "multivalue_formatt": 21, "get": [23, 25], "start": 23, "instal": 23, "usag": 23, "music": [23, 26], "servic": 23, "search": 23, "privat": 23, "lyric": 23, "web": 23, "exampl": 23, "artist": 23, "track": 23, "creat": 23, "modifi": 23, "delet": 23, "person": 23, "playlist": [23, 26], "handler": 23, "load": 23, "edit": [23, 24], "convert": [23, 24], "between": 23, "format": 23, "metadata": 24, "setup": 24, "instanti": 24, "client": 24, "find": 24, "defin": 24, "helper": 24, "tag": 24, "an": 24, "exist": 24, "recommend": 25, "transfer": 26, "librari": 26, "prerequisit": 26, "move": 26, "from": 26, "To": 26, "synchron": 26, "favorit": 26, "guid": 27}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"audio": [[2, "module-minim.audio"]], "Audio file objects": [[2, "audio-file-objects"]], "minim": [[1, "module-minim"]], "User Guide": [[27, "user-guide"]], "qobuz": [[11, "module-minim.qobuz"]], "Qobuz": [[11, "id1"]], "itunes": [[9, "module-minim.itunes"]], "iTunes": [[9, "id1"]], "SearchAPI": [[10, "searchapi"]], "FLACAudio": [[4, "flacaudio"]], "Software dependency": [[4, null], [5, null], [3, null], [7, null], [8, null], [6, null]], "MP3Audio": [[5, "mp3audio"]], "Audio": [[3, "audio"]], "OggAudio": [[7, "oggaudio"]], "WAVEAudio": [[8, "waveaudio"]], "MP4Audio": [[6, "mp4audio"]], "PrivateAPI": [[12, "privateapi"], [18, "privateapi"]], "Sample response": [[12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [14, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null]], "User authentication": [[12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [18, null]], "Subscription": [[12, null], [12, null], [12, null]], "PrivateLyricsService": [[14, "privatelyricsservice"]], "spotify": [[13, "module-minim.spotify"]], "Spotify": [[13, "id1"], [25, "spotify"]], "levenshtein_ratio": [[20, "levenshtein-ratio"]], "utility": [[19, "module-minim.utility"]], "Utility functions": [[19, "utility-functions"]], "Authorization scope": [[18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null]], "User authentication and authorization scope": [[18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null]], "User authentication, authorization scope, and\n subscription": [[18, null], [18, null], [18, null], [18, null], [18, null]], "User authentication and subscription": [[18, null]], "WebAPI": [[15, "webapi"]], "Sample": [[15, null], [15, null], [15, null], [15, null], [15, null], [15, null]], "tidal": [[16, "module-minim.tidal"]], "TIDAL": [[16, "id1"], [25, "tidal"]], "API": [[17, "api"]], "Minim": [[22, "minim"]], "multivalue_formatter": [[21, "multivalue-formatter"]], "Getting Started": [[23, "getting-started"]], "Installation": [[23, "installation"]], "Usage": [[23, "usage"]], "Music service APIs": [[23, "music-service-apis"]], "iTunes Search API (minim.itunes.SearchAPI)": [[23, "itunes-search-api-minim-itunes-searchapi"]], "Private Qobuz API (minim.qobuz.PrivateAPI)": [[23, "private-qobuz-api-minim-qobuz-privateapi"]], "Private Spotify Lyrics Service (minim.spotify.PrivateLyricsService)": [[23, "private-spotify-lyrics-service-minim-spotify-privatelyricsservice"]], "Spotify Web API (minim.spotify.WebAPI)": [[23, "spotify-web-api-minim-spotify-webapi"]], "TIDAL API (minim.tidal.API)": [[23, "tidal-api-minim-tidal-api"]], "Private TIDAL API (minim.tidal.PrivateAPI)": [[23, "private-tidal-api-minim-tidal-privateapi"]], "Examples": [[23, "examples"], [23, "id9"]], "Searching for artists": [[23, "searching-for-artists"]], "iTunes Search API": [[23, "itunes-search-api"], [23, "id1"]], "Private Qobuz API": [[23, "private-qobuz-api"], [23, "id2"], [23, "id6"]], "Spotify Web API": [[23, "spotify-web-api"], [23, "id3"], [23, "id7"]], "TIDAL API": [[23, "tidal-api"], [23, "id4"]], "Private TIDAL API": [[23, "private-tidal-api"], [23, "id5"], [23, "id8"]], "Searching for tracks": [[23, "searching-for-tracks"]], "Creating, modifying, and deleting a personal playlist": [[23, "creating-modifying-and-deleting-a-personal-playlist"]], "Audio file handlers": [[23, "audio-file-handlers"]], "Loading and editing audio files": [[23, "loading-and-editing-audio-files"]], "Converting between audio formats": [[23, "converting-between-audio-formats"]], "Getting Recommendations": [[25, "getting-recommendations"]], "Editing Audio Metadata": [[24, "editing-audio-metadata"]], "Setup": [[24, "setup"]], "Instantiating API clients": [[24, "instantiating-api-clients"]], "Finding audio files": [[24, "finding-audio-files"]], "Defining helper functions": [[24, "defining-helper-functions"]], "Converting and tagging an audio file with no metadata": [[24, "converting-and-tagging-an-audio-file-with-no-metadata"]], "Tagging an audio file with existing metadata": [[24, "tagging-an-audio-file-with-existing-metadata"]], "Transferring Music Libraries": [[26, "transferring-music-libraries"]], "Prerequisites": [[26, "prerequisites"]], "Moving playlists": [[26, "moving-playlists"]], "From Qobuz": [[26, "from-qobuz"], [26, "id4"]], "To Spotify": [[26, "to-spotify"], [26, "id3"], [26, "id5"], [26, "id12"]], "To TIDAL": [[26, "to-tidal"], [26, "id1"], [26, "id6"], [26, "id9"]], "From Spotify": [[26, "from-spotify"], [26, "id7"]], "To Qobuz": [[26, "to-qobuz"], [26, "id2"], [26, "id8"], [26, "id11"]], "From TIDAL": [[26, "from-tidal"], [26, "id10"]], "Synchronizing favorites": [[26, "synchronizing-favorites"]]}, "indexentries": {"minim": [[1, "module-minim"]], "module": [[1, "module-minim"], [2, "module-minim.audio"], [9, "module-minim.itunes"], [11, "module-minim.qobuz"], [13, "module-minim.spotify"], [16, "module-minim.tidal"], [19, "module-minim.utility"]], "minim.audio": [[2, "module-minim.audio"]], "audio (class in minim.audio)": [[3, "minim.audio.Audio"]], "convert() (minim.audio.audio method)": [[3, "minim.audio.Audio.convert"]], "set_metadata_using_itunes() (minim.audio.audio method)": [[3, "minim.audio.Audio.set_metadata_using_itunes"]], "set_metadata_using_qobuz() (minim.audio.audio method)": [[3, "minim.audio.Audio.set_metadata_using_qobuz"]], "set_metadata_using_spotify() (minim.audio.audio method)": [[3, "minim.audio.Audio.set_metadata_using_spotify"]], "set_metadata_using_tidal() (minim.audio.audio method)": [[3, "minim.audio.Audio.set_metadata_using_tidal"]], "flacaudio (class in minim.audio)": [[4, "minim.audio.FLACAudio"]], "convert() (minim.audio.flacaudio method)": [[4, "minim.audio.FLACAudio.convert"]], "set_metadata_using_itunes() (minim.audio.flacaudio method)": [[4, "minim.audio.FLACAudio.set_metadata_using_itunes"]], "set_metadata_using_qobuz() (minim.audio.flacaudio method)": [[4, "minim.audio.FLACAudio.set_metadata_using_qobuz"]], "set_metadata_using_spotify() (minim.audio.flacaudio method)": [[4, "minim.audio.FLACAudio.set_metadata_using_spotify"]], "set_metadata_using_tidal() (minim.audio.flacaudio method)": [[4, "minim.audio.FLACAudio.set_metadata_using_tidal"]], "write_metadata() (minim.audio.flacaudio method)": [[4, "minim.audio.FLACAudio.write_metadata"]], "mp3audio (class in minim.audio)": [[5, "minim.audio.MP3Audio"]], "convert() (minim.audio.mp3audio method)": [[5, "minim.audio.MP3Audio.convert"]], "set_metadata_using_itunes() (minim.audio.mp3audio method)": [[5, "minim.audio.MP3Audio.set_metadata_using_itunes"]], "set_metadata_using_qobuz() (minim.audio.mp3audio method)": [[5, "minim.audio.MP3Audio.set_metadata_using_qobuz"]], "set_metadata_using_spotify() (minim.audio.mp3audio method)": [[5, "minim.audio.MP3Audio.set_metadata_using_spotify"]], "set_metadata_using_tidal() (minim.audio.mp3audio method)": [[5, "minim.audio.MP3Audio.set_metadata_using_tidal"]], "write_metadata() (minim.audio.mp3audio method)": [[5, "minim.audio.MP3Audio.write_metadata"]], "mp4audio (class in minim.audio)": [[6, "minim.audio.MP4Audio"]], "convert() (minim.audio.mp4audio method)": [[6, "minim.audio.MP4Audio.convert"]], "set_metadata_using_itunes() (minim.audio.mp4audio method)": [[6, "minim.audio.MP4Audio.set_metadata_using_itunes"]], "set_metadata_using_qobuz() (minim.audio.mp4audio method)": [[6, "minim.audio.MP4Audio.set_metadata_using_qobuz"]], "set_metadata_using_spotify() (minim.audio.mp4audio method)": [[6, "minim.audio.MP4Audio.set_metadata_using_spotify"]], "set_metadata_using_tidal() (minim.audio.mp4audio method)": [[6, "minim.audio.MP4Audio.set_metadata_using_tidal"]], "write_metadata() (minim.audio.mp4audio method)": [[6, "minim.audio.MP4Audio.write_metadata"]], "oggaudio (class in minim.audio)": [[7, "minim.audio.OggAudio"]], "convert() (minim.audio.oggaudio method)": [[7, "minim.audio.OggAudio.convert"]], "set_metadata_using_itunes() (minim.audio.oggaudio method)": [[7, "minim.audio.OggAudio.set_metadata_using_itunes"]], "set_metadata_using_qobuz() (minim.audio.oggaudio method)": [[7, "minim.audio.OggAudio.set_metadata_using_qobuz"]], "set_metadata_using_spotify() (minim.audio.oggaudio method)": [[7, "minim.audio.OggAudio.set_metadata_using_spotify"]], "set_metadata_using_tidal() (minim.audio.oggaudio method)": [[7, "minim.audio.OggAudio.set_metadata_using_tidal"]], "write_metadata() (minim.audio.oggaudio method)": [[7, "minim.audio.OggAudio.write_metadata"]], "waveaudio (class in minim.audio)": [[8, "minim.audio.WAVEAudio"]], "convert() (minim.audio.waveaudio method)": [[8, "minim.audio.WAVEAudio.convert"]], "set_metadata_using_itunes() (minim.audio.waveaudio method)": [[8, "minim.audio.WAVEAudio.set_metadata_using_itunes"]], "set_metadata_using_qobuz() (minim.audio.waveaudio method)": [[8, "minim.audio.WAVEAudio.set_metadata_using_qobuz"]], "set_metadata_using_spotify() (minim.audio.waveaudio method)": [[8, "minim.audio.WAVEAudio.set_metadata_using_spotify"]], "set_metadata_using_tidal() (minim.audio.waveaudio method)": [[8, "minim.audio.WAVEAudio.set_metadata_using_tidal"]], "write_metadata() (minim.audio.waveaudio method)": [[8, "minim.audio.WAVEAudio.write_metadata"]], "minim.itunes": [[9, "module-minim.itunes"]], "searchapi (class in minim.itunes)": [[10, "minim.itunes.SearchAPI"]], "lookup() (minim.itunes.searchapi method)": [[10, "minim.itunes.SearchAPI.lookup"]], "search() (minim.itunes.searchapi method)": [[10, "minim.itunes.SearchAPI.search"]], "minim.qobuz": [[11, "module-minim.qobuz"]], "privateapi (class in minim.qobuz)": [[12, "minim.qobuz.PrivateAPI"]], "add_playlist_tracks() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.add_playlist_tracks"]], "create_playlist() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.create_playlist"]], "delete_playlist() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.delete_playlist"]], "delete_playlist_tracks() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.delete_playlist_tracks"]], "favorite_items() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.favorite_items"]], "favorite_playlist() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.favorite_playlist"]], "get_album() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_album"]], "get_artist() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_artist"]], "get_collection_streams() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_collection_streams"]], "get_curated_tracks() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_curated_tracks"]], "get_favorites() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_favorites"]], "get_featured_albums() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_featured_albums"]], "get_featured_playlists() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_featured_playlists"]], "get_label() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_label"]], "get_playlist() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_playlist"]], "get_profile() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_profile"]], "get_purchases() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_purchases"]], "get_track() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_track"]], "get_track_file_url() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_track_file_url"]], "get_track_performers() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_track_performers"]], "get_track_stream() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_track_stream"]], "get_user_playlists() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.get_user_playlists"]], "move_playlist_tracks() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.move_playlist_tracks"]], "search() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.search"]], "set_auth_token() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.set_auth_token"]], "set_flow() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.set_flow"]], "unfavorite_items() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.unfavorite_items"]], "unfavorite_playlist() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.unfavorite_playlist"]], "update_playlist() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.update_playlist"]], "update_playlist_position() (minim.qobuz.privateapi method)": [[12, "minim.qobuz.PrivateAPI.update_playlist_position"]], "minim.spotify": [[13, "module-minim.spotify"]], "privatelyricsservice (class in minim.spotify)": [[14, "minim.spotify.PrivateLyricsService"]], "get_lyrics() (minim.spotify.privatelyricsservice method)": [[14, "minim.spotify.PrivateLyricsService.get_lyrics"]], "set_access_token() (minim.spotify.privatelyricsservice method)": [[14, "minim.spotify.PrivateLyricsService.set_access_token"]], "set_sp_dc() (minim.spotify.privatelyricsservice method)": [[14, "minim.spotify.PrivateLyricsService.set_sp_dc"]], "webapi (class in minim.spotify)": [[15, "minim.spotify.WebAPI"]], "add_playlist_cover_image() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.add_playlist_cover_image"]], "add_playlist_items() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.add_playlist_items"]], "add_to_queue() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.add_to_queue"]], "change_playlist_details() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.change_playlist_details"]], "check_followed_people() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.check_followed_people"]], "check_playlist_followers() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.check_playlist_followers"]], "check_saved_albums() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.check_saved_albums"]], "check_saved_audiobooks() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.check_saved_audiobooks"]], "check_saved_episodes() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.check_saved_episodes"]], "check_saved_shows() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.check_saved_shows"]], "check_saved_tracks() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.check_saved_tracks"]], "create_playlist() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.create_playlist"]], "follow_people() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.follow_people"]], "follow_playlist() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.follow_playlist"]], "get_album() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_album"]], "get_album_tracks() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_album_tracks"]], "get_albums() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_albums"]], "get_artist() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_artist"]], "get_artist_albums() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_artist_albums"]], "get_artist_top_tracks() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_artist_top_tracks"]], "get_artists() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_artists"]], "get_audiobook() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_audiobook"]], "get_audiobook_chapters() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_audiobook_chapters"]], "get_audiobooks() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_audiobooks"]], "get_categories() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_categories"]], "get_category() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_category"]], "get_category_playlists() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_category_playlists"]], "get_chapter() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_chapter"]], "get_chapters() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_chapters"]], "get_currently_playing() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_currently_playing"]], "get_devices() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_devices"]], "get_episode() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_episode"]], "get_episodes() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_episodes"]], "get_featured_playlists() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_featured_playlists"]], "get_followed_artists() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_followed_artists"]], "get_genre_seeds() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_genre_seeds"]], "get_markets() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_markets"]], "get_new_albums() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_new_albums"]], "get_playback_state() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_playback_state"]], "get_playlist() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_playlist"]], "get_playlist_cover_image() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_playlist_cover_image"]], "get_playlist_items() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_playlist_items"]], "get_playlists() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_playlists"]], "get_profile() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_profile"]], "get_queue() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_queue"]], "get_recently_played() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_recently_played"]], "get_recommendations() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_recommendations"]], "get_related_artists() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_related_artists"]], "get_saved_albums() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_saved_albums"]], "get_saved_audiobooks() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_saved_audiobooks"]], "get_saved_episodes() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_saved_episodes"]], "get_saved_shows() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_saved_shows"]], "get_saved_tracks() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_saved_tracks"]], "get_scopes() (minim.spotify.webapi class method)": [[15, "minim.spotify.WebAPI.get_scopes"]], "get_show() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_show"]], "get_show_episodes() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_show_episodes"]], "get_shows() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_shows"]], "get_top_items() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_top_items"]], "get_track() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_track"]], "get_track_audio_analysis() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_track_audio_analysis"]], "get_track_audio_features() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_track_audio_features"]], "get_tracks() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_tracks"]], "get_tracks_audio_features() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_tracks_audio_features"]], "get_user_playlists() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_user_playlists"]], "get_user_profile() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.get_user_profile"]], "pause_playback() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.pause_playback"]], "remove_playlist_items() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.remove_playlist_items"]], "remove_saved_albums() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.remove_saved_albums"]], "remove_saved_audiobooks() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.remove_saved_audiobooks"]], "remove_saved_episodes() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.remove_saved_episodes"]], "remove_saved_shows() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.remove_saved_shows"]], "remove_saved_tracks() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.remove_saved_tracks"]], "save_albums() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.save_albums"]], "save_audiobooks() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.save_audiobooks"]], "save_episodes() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.save_episodes"]], "save_shows() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.save_shows"]], "save_tracks() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.save_tracks"]], "search() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.search"]], "seek_to_position() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.seek_to_position"]], "set_access_token() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.set_access_token"]], "set_flow() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.set_flow"]], "set_playback_volume() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.set_playback_volume"]], "set_repeat_mode() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.set_repeat_mode"]], "skip_to_next() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.skip_to_next"]], "skip_to_previous() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.skip_to_previous"]], "start_playback() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.start_playback"]], "toggle_playback_shuffle() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.toggle_playback_shuffle"]], "transfer_playback() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.transfer_playback"]], "unfollow_people() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.unfollow_people"]], "unfollow_playlist() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.unfollow_playlist"]], "update_playlist_items() (minim.spotify.webapi method)": [[15, "minim.spotify.WebAPI.update_playlist_items"]], "minim.tidal": [[16, "module-minim.tidal"]], "api (class in minim.tidal)": [[17, "minim.tidal.API"]], "get_album() (minim.tidal.api method)": [[17, "minim.tidal.API.get_album"]], "get_album_by_barcode_id() (minim.tidal.api method)": [[17, "minim.tidal.API.get_album_by_barcode_id"]], "get_album_items() (minim.tidal.api method)": [[17, "minim.tidal.API.get_album_items"]], "get_albums() (minim.tidal.api method)": [[17, "minim.tidal.API.get_albums"]], "get_artist() (minim.tidal.api method)": [[17, "minim.tidal.API.get_artist"]], "get_artist_albums() (minim.tidal.api method)": [[17, "minim.tidal.API.get_artist_albums"]], "get_artists() (minim.tidal.api method)": [[17, "minim.tidal.API.get_artists"]], "get_similar_albums() (minim.tidal.api method)": [[17, "minim.tidal.API.get_similar_albums"]], "get_similar_artists() (minim.tidal.api method)": [[17, "minim.tidal.API.get_similar_artists"]], "get_similar_tracks() (minim.tidal.api method)": [[17, "minim.tidal.API.get_similar_tracks"]], "get_track() (minim.tidal.api method)": [[17, "minim.tidal.API.get_track"]], "get_track_by_isrc() (minim.tidal.api method)": [[17, "minim.tidal.API.get_track_by_isrc"]], "get_tracks() (minim.tidal.api method)": [[17, "minim.tidal.API.get_tracks"]], "get_video() (minim.tidal.api method)": [[17, "minim.tidal.API.get_video"]], "get_videos() (minim.tidal.api method)": [[17, "minim.tidal.API.get_videos"]], "search() (minim.tidal.api method)": [[17, "minim.tidal.API.search"]], "set_access_token() (minim.tidal.api method)": [[17, "minim.tidal.API.set_access_token"]], "set_flow() (minim.tidal.api method)": [[17, "minim.tidal.API.set_flow"]], "privateapi (class in minim.tidal)": [[18, "minim.tidal.PrivateAPI"]], "add_playlist_items() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.add_playlist_items"]], "block_artist() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.block_artist"]], "block_user() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.block_user"]], "create_playlist() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.create_playlist"]], "create_playlist_folder() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.create_playlist_folder"]], "delete_playlist() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.delete_playlist"]], "delete_playlist_folder() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.delete_playlist_folder"]], "delete_playlist_item() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.delete_playlist_item"]], "favorite_albums() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.favorite_albums"]], "favorite_artists() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.favorite_artists"]], "favorite_mixes() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.favorite_mixes"]], "favorite_playlists() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.favorite_playlists"]], "favorite_tracks() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.favorite_tracks"]], "favorite_videos() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.favorite_videos"]], "follow_user() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.follow_user"]], "get_album() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_album"]], "get_album_credits() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_album_credits"]], "get_album_items() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_album_items"]], "get_album_page() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_album_page"]], "get_album_review() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_album_review"]], "get_artist() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_artist"]], "get_artist_albums() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_artist_albums"]], "get_artist_biography() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_artist_biography"]], "get_artist_links() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_artist_links"]], "get_artist_mix_id() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_artist_mix_id"]], "get_artist_page() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_artist_page"]], "get_artist_radio() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_artist_radio"]], "get_artist_top_tracks() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_artist_top_tracks"]], "get_artist_videos() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_artist_videos"]], "get_blocked_artists() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_blocked_artists"]], "get_blocked_users() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_blocked_users"]], "get_collection_streams() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_collection_streams"]], "get_country_code() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_country_code"]], "get_favorite_albums() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_favorite_albums"]], "get_favorite_artists() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_favorite_artists"]], "get_favorite_ids() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_favorite_ids"]], "get_favorite_mixes() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_favorite_mixes"]], "get_favorite_tracks() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_favorite_tracks"]], "get_favorite_videos() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_favorite_videos"]], "get_image() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_image"]], "get_mix_items() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_mix_items"]], "get_mix_page() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_mix_page"]], "get_personal_playlist_folders() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_personal_playlist_folders"]], "get_personal_playlists() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_personal_playlists"]], "get_playlist() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_playlist"]], "get_playlist_etag() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_playlist_etag"]], "get_playlist_items() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_playlist_items"]], "get_playlist_recommendations() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_playlist_recommendations"]], "get_profile() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_profile"]], "get_session() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_session"]], "get_similar_albums() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_similar_albums"]], "get_similar_artists() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_similar_artists"]], "get_track() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_track"]], "get_track_composers() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_track_composers"]], "get_track_contributors() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_track_contributors"]], "get_track_credits() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_track_credits"]], "get_track_lyrics() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_track_lyrics"]], "get_track_mix_id() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_track_mix_id"]], "get_track_playback_info() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_track_playback_info"]], "get_track_recommendations() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_track_recommendations"]], "get_track_stream() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_track_stream"]], "get_user_followers() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_user_followers"]], "get_user_following() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_user_following"]], "get_user_playlist() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_user_playlist"]], "get_user_playlists() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_user_playlists"]], "get_user_profile() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_user_profile"]], "get_video() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_video"]], "get_video_page() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_video_page"]], "get_video_playback_info() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_video_playback_info"]], "get_video_stream() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.get_video_stream"]], "move_playlist() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.move_playlist"]], "move_playlist_item() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.move_playlist_item"]], "search() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.search"]], "set_access_token() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.set_access_token"]], "set_flow() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.set_flow"]], "set_playlist_privacy() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.set_playlist_privacy"]], "unblock_artist() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.unblock_artist"]], "unblock_user() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.unblock_user"]], "unfavorite_albums() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.unfavorite_albums"]], "unfavorite_artists() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.unfavorite_artists"]], "unfavorite_mixes() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.unfavorite_mixes"]], "unfavorite_playlist() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.unfavorite_playlist"]], "unfavorite_tracks() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.unfavorite_tracks"]], "unfavorite_videos() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.unfavorite_videos"]], "unfollow_user() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.unfollow_user"]], "update_playlist() (minim.tidal.privateapi method)": [[18, "minim.tidal.PrivateAPI.update_playlist"]], "minim.utility": [[19, "module-minim.utility"]], "levenshtein_ratio() (in module minim.utility)": [[20, "minim.utility.levenshtein_ratio"]], "multivalue_formatter() (in module minim.utility)": [[21, "minim.utility.multivalue_formatter"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["api", "api/minim", "api/minim.audio", "api/minim.audio.Audio", "api/minim.audio.FLACAudio", "api/minim.audio.MP3Audio", "api/minim.audio.MP4Audio", "api/minim.audio.OggAudio", "api/minim.audio.WAVEAudio", "api/minim.itunes", "api/minim.itunes.SearchAPI", "api/minim.qobuz", "api/minim.qobuz.PrivateAPI", "api/minim.spotify", "api/minim.spotify.PrivateLyricsService", "api/minim.spotify.WebAPI", "api/minim.tidal", "api/minim.tidal.API", "api/minim.tidal.PrivateAPI", "api/minim.utility", "api/minim.utility.format_multivalue", "api/minim.utility.gestalt_ratio", "api/minim.utility.levenshtein_ratio", "index", "notebooks/getting_started", "notebooks/user_guide/editing_audio_metadata", "notebooks/user_guide/getting_recommendations", "notebooks/user_guide/transferring_music_libraries", "user_guide"], "filenames": ["api.rst", "api/minim.rst", "api/minim.audio.rst", "api/minim.audio.Audio.rst", "api/minim.audio.FLACAudio.rst", "api/minim.audio.MP3Audio.rst", "api/minim.audio.MP4Audio.rst", "api/minim.audio.OggAudio.rst", "api/minim.audio.WAVEAudio.rst", "api/minim.itunes.rst", "api/minim.itunes.SearchAPI.rst", "api/minim.qobuz.rst", "api/minim.qobuz.PrivateAPI.rst", "api/minim.spotify.rst", "api/minim.spotify.PrivateLyricsService.rst", "api/minim.spotify.WebAPI.rst", "api/minim.tidal.rst", "api/minim.tidal.API.rst", "api/minim.tidal.PrivateAPI.rst", "api/minim.utility.rst", "api/minim.utility.format_multivalue.rst", "api/minim.utility.gestalt_ratio.rst", "api/minim.utility.levenshtein_ratio.rst", "index.rst", "notebooks/getting_started.ipynb", "notebooks/user_guide/editing_audio_metadata.ipynb", "notebooks/user_guide/getting_recommendations.ipynb", "notebooks/user_guide/transferring_music_libraries.ipynb", "user_guide.rst"], "titles": ["<no title>", "minim", "audio", "Audio", "FLACAudio", "MP3Audio", "MP4Audio", "OggAudio", "WAVEAudio", "itunes", "SearchAPI", "qobuz", "PrivateAPI", "spotify", "PrivateLyricsService", "WebAPI", "tidal", "API", "PrivateAPI", "utility", "format_multivalue", "gestalt_ratio", "levenshtein_ratio", "Minim", "Getting Started", "Editing Audio Metadata", "Getting Recommendations", "Transferring Music Libraries", "User Guide"], "terms": {"thi": [2, 3, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 24, 25, 26, 27], "modul": [2, 3, 9, 11, 13, 16, 19, 24], "provid": [2, 3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 20, 24, 25, 27], "conveni": [2, 12, 18, 25], "python": [2, 23, 24], "keep": [2, 15], "track": [2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 25, 26, 27], "handl": [2, 27], "metadata": [2, 3, 4, 5, 6, 7, 8, 15, 17, 18, 23, 24, 27, 28], "convert": [2, 3, 4, 5, 6, 7, 8, 23], "between": [2, 3, 4, 5, 6, 7, 8, 10, 15, 23, 27], "differ": [2, 15, 24], "format": [2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 23, 25], "class": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 24, 25, 26, 27], "minim": [3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 17, 18, 20, 21, 22, 25, 26, 27], "arg": [3, 4, 5, 6, 7, 8], "kwarg": [3, 4, 5, 6, 7, 8, 15], "sourc": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 21, 22, 24, 27], "base": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 24, 26], "object": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 24, 25, 26], "gener": [3, 15, 25, 26, 27], "file": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 23, 26], "handler": [3, 4, 5, 6, 7, 8, 25], "subclass": 3, "specif": [3, 15, 24, 25], "contain": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 24, 25], "includ": [3, 10, 15, 18, 25], "flacaudio": [3, 5, 6, 7, 8, 24, 25], "encod": [3, 10, 15, 18, 24], "us": [3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 17, 18, 20, 24, 25, 26, 27], "free": [3, 27], "lossless": [3, 4, 5, 6, 7, 8, 12, 18, 24], "codec": [3, 4, 5, 6, 7, 8, 18, 24, 25], "flac": [3, 4, 5, 6, 7, 8, 12, 18, 24, 25], "mp3audio": [3, 24, 25], "store": [3, 10, 12, 14, 15, 17, 18, 24, 25, 26, 27], "mpeg": 3, "layer": 3, "iii": [3, 18], "mp3": [3, 4, 5, 6, 7, 8, 12, 18, 24, 25], "mp4audio": [3, 4, 5, 7, 8, 24], "advanc": 3, "code": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 24], "aac": [3, 4, 5, 6, 7, 8, 18, 24], "appl": [3, 10, 24, 25], "alac": [3, 4, 5, 6, 7, 8, 18, 24], "4": [3, 15, 24], "part": 3, "14": 3, "mp4": [3, 4, 5, 6, 7, 8, 18, 24], "m4a": [3, 4, 5, 6, 7, 8, 24], "oggaudio": [3, 24], "opu": [3, 4, 5, 6, 7, 8, 24], "vorbi": [3, 4, 5, 6, 7, 8, 24], "an": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 24, 26], "ogg": [3, 4, 5, 6, 7, 8], "waveaudio": [3, 24], "linear": 3, "puls": 3, "lpcm": [3, 4, 5, 6, 7, 8, 24], "waveform": 3, "wave": [3, 4, 5, 6, 7, 8, 24], "can": [3, 12, 14, 15, 17, 18, 23, 24, 25, 26, 27], "instanti": [3, 12, 14, 15, 17, 18, 24, 26, 27], "from": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 24, 25, 26], "list": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 20, 21, 22, 26], "abov": [3, 15, 24, 25, 26, 27], "examin": 3, "its": [3, 10, 12, 14, 15, 17, 18, 24, 25, 27], "extens": [3, 4, 5, 6, 7, 8, 18], "howev": [3, 25, 27], "mai": [3, 15, 18, 27], "instanc": 3, "when": [3, 10, 12, 14, 15, 17, 18, 20, 24, 25, 27], "detect": [3, 12, 24], "fail": [3, 18], "especi": [3, 27], "combin": [3, 12, 15], "i": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "rare": 3, "seen": 3, "As": [3, 12, 14, 18, 24, 25], "alwai": [3, 25], "best": [3, 4, 5, 6, 7, 8, 12, 27], "directli": [3, 18, 25, 27], "one": [3, 14, 15, 17, 18, 24, 25], "creat": [3, 10, 12, 15, 18, 25, 26, 27], "your": [3, 10, 14, 15, 18, 24, 25, 26], "ar": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 24, 26, 27], "known": [3, 24, 25], "paramet": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 21, 22], "str": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 21, 22, 24, 25], "pattern": [3, 4, 5, 6, 7, 8, 25], "tupl": [3, 4, 5, 6, 7, 8, 12, 18, 20], "keyword": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 24, 25, 26], "onli": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 24, 25, 26, 27], "option": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 24], "regular": [3, 4, 5, 6, 7, 8, 25], "express": [3, 4, 5, 6, 7, 8, 25], "search": [3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 17, 18, 25, 27], "correspond": [3, 4, 5, 6, 7, 8, 15, 25, 27], "field": [3, 4, 5, 6, 7, 8, 15, 20, 25], "": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 24, 25, 27], "valid": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18], "valu": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 20, 25], "The": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 24, 25, 26, 27], "support": [3, 4, 5, 6, 7, 8, 10, 15, 18, 20, 24, 27], "artist": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 25, 26, 27], "titl": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 24, 25, 27], "track_numb": [3, 4, 5, 6, 7, 8, 12, 15, 24], "number": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 25, 26, 27], "exampl": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 25, 26, 27], "match": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 25, 27], "filenam": [3, 4, 5, 6, 7, 8, 18, 24, 25], "like": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 24, 25, 27], "taylor": [3, 4, 5, 6, 7, 8], "swift": [3, 4, 5, 6, 7, 8], "cruel": 3, "summer": 3, "d": [3, 4, 5, 6, 7, 8], "04": [3, 5, 6, 24], "man": 3, "13": [3, 10, 17, 25], "you": [3, 4, 5, 8, 10, 12, 14, 15, 18, 24, 25, 26], "need": [3, 15, 24, 25], "calm": 3, "down": [3, 15, 24], "multivalu": [3, 4, 5, 6, 7, 8, 20], "bool": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20], "determin": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 20, 25], "whether": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20], "tag": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 20, 24], "If": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 21, 22, 24, 25, 26], "fals": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 20, 24, 25, 26], "item": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 20, 24, 25, 26, 27], "concaten": [3, 4, 5, 6, 7, 8, 20], "separ": [3, 4, 5, 6, 7, 8, 15, 20, 25], "specifi": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 24, 25, 26], "sep": [3, 4, 5, 6, 7, 8, 20], "default": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20, 24, 25], "all": [3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 20, 24, 25, 27], "first": [3, 4, 5, 6, 7, 8, 10, 12, 15, 18, 20, 24, 25, 26, 27], "n": [3, 4, 5, 6, 7, 8, 24], "1": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 24, 25, 26, 27], "second": [3, 4, 5, 6, 7, 8, 18, 20, 25], "append": [3, 4, 5, 6, 7, 8, 15, 20, 27], "final": [3, 4, 5, 6, 7, 8, 20, 25, 26, 27], "attribut": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 26], "album": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 24, 25, 26, 27], "album_artist": 3, "artwork": [3, 4, 5, 6, 7, 8, 25], "byte": [3, 12, 15, 18, 25], "represent": 3, "url": [3, 10, 12, 14, 15, 17, 18, 24], "lead": 3, "cover": [3, 4, 5, 6, 7, 8, 15, 18, 24, 25, 26], "bit_depth": [3, 12, 24], "int": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18], "bit": [3, 4, 5, 6, 7, 8, 12, 18, 24, 25], "per": 3, "sampl": [3, 24, 25, 27], "bitrat": [3, 12, 24, 25], "b": [3, 4, 5, 6, 7, 8, 24], "channel_count": 3, "channel": [3, 25], "comment": [3, 4, 5, 6, 7, 8, 25], "compil": [3, 4, 5, 6, 7, 8, 15, 18, 25], "song": [3, 10, 12, 15, 24], "variou": [3, 27], "compos": [3, 4, 5, 6, 7, 8, 12, 18, 24, 25], "lyric": [3, 4, 5, 6, 7, 8, 13, 14, 18, 25], "writer": [3, 12], "copyright": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 24, 25], "inform": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 24, 25, 26, 27], "date": [3, 12, 15, 18, 25], "releas": [3, 12, 15, 24], "disc_numb": [3, 15, 24], "disc": [3, 4, 5, 6, 7, 8, 25], "disc_count": 3, "total": [3, 12, 15, 17, 18, 24, 27], "genr": [3, 12, 15, 24, 25, 26], "isrc": [3, 12, 15, 17, 18, 24, 25, 27], "intern": 3, "standard": 3, "record": [3, 10, 12, 24], "sample_r": 3, "rate": [3, 25], "hz": [3, 24], "tempo": [3, 4, 5, 6, 7, 8, 15, 25], "beat": [3, 15], "minut": 3, "bpm": [3, 24], "track_count": [3, 12], "method": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 24, 25], "none": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 24, 25], "preserv": [3, 4, 5, 6, 7, 8], "true": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 24, 25, 27], "current": [3, 4, 5, 6, 7, 8, 12, 15, 18, 24, 27], "anoth": [3, 4, 5, 6, 7, 8, 25, 26], "requir": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 24], "ffmpeg": [3, 4, 5, 6, 7, 8, 24], "automat": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 24, 25], "updat": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 23, 24, 25, 26, 27], "reflect": [3, 4, 5, 6, 7, 8], "new": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 24, 25, 26, 27], "For": [3, 4, 5, 6, 7, 8, 10, 12, 15, 17, 18, 24, 25, 27], "chang": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 24, 25], "mp4a": [3, 4, 5, 6, 7, 8], "lossi": [3, 4, 5, 6, 7, 8], "wav": [3, 4, 5, 6, 7, 8, 24], "which": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 24, 25, 26], "command": [3, 4, 5, 6, 7, 8, 24], "line": [3, 4, 5, 6, 7, 8, 14, 26], "exclud": [3, 4, 5, 6, 7, 8, 15], "input": [3, 4, 5, 6, 7, 8], "output": [3, 4, 5, 6, 7, 8, 26], "y": [3, 4, 5, 6, 7, 8, 14, 15, 17, 18], "flag": [3, 4, 5, 6, 7, 8, 10], "overwrit": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 25], "c": [3, 4, 5, 6, 7, 8, 24], "v": [3, 4, 5, 6, 7, 8], "copi": [3, 4, 5, 6, 7, 8, 18, 24], "argument": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 24, 25, 26], "art": [3, 4, 5, 6, 7, 8, 18, 25, 26], "256k": [3, 4, 5, 6, 7, 8], "libfdk_aac": [3, 4, 5, 6, 7, 8], "wa": [3, 4, 5, 6, 7, 8, 15, 18], "enabl": [3, 4, 5, 6, 7, 8, 12, 15], "libfdk": [3, 4, 5, 6, 7, 8], "libmp3lam": [3, 4, 5, 6, 7, 8], "q": [3, 4, 5, 6, 7, 8, 15], "0": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 24, 25, 26, 27], "libopu": [3, 4, 5, 6, 7, 8], "vn": [3, 4, 5, 6, 7, 8, 24], "strict": [3, 4, 5, 6, 7, 8, 12, 24], "experiment": [3, 4, 5, 6, 7, 8], "libvorbi": [3, 4, 5, 6, 7, 8], "pcm_s16le": [3, 4, 5, 6, 7, 8], "pcm_s24le": [3, 4, 5, 6, 7, 8], "depth": [3, 4, 5, 6, 7, 8, 12, 24, 25], "origin": [3, 4, 5, 6, 7, 8, 15, 25], "appropri": [3, 4, 5, 6, 7, 8, 26], "kept": [3, 4, 5, 6, 7, 8, 15], "set_metadata_using_itun": [3, 4, 5, 6, 7, 8, 25], "data": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 24, 25, 26, 27], "dict": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 25], "ani": [3, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 18, 20], "album_data": [3, 4, 5, 6, 7, 8, 25], "artwork_s": [3, 4, 5, 6, 7, 8], "1400": [3, 4, 5, 6, 7, 8], "artwork_format": [3, 4, 5, 6, 7, 8], "jpg": [3, 4, 5, 6, 7, 8, 18, 24, 26], "popul": [3, 4, 5, 6, 7, 8, 25], "retriev": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 24, 25], "itun": [3, 4, 5, 6, 7, 8, 10, 23, 25], "api": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 18, 23, 26, 27], "about": [3, 4, 5, 6, 7, 8, 12, 15, 18, 24, 25, 26, 27], "json": [3, 4, 5, 6, 7, 8, 10, 15, 25], "obtain": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 24], "via": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 24, 25], "searchapi": [3, 4, 5, 6, 7, 8, 25], "lookup": [3, 4, 5, 6, 7, 8, 10, 25, 27], "unavail": [3, 4, 5, 6, 7, 8, 15, 24], "resiz": [3, 4, 5, 6, 7, 8], "size": [3, 4, 5, 6, 7, 8, 15, 17, 18, 24, 25], "pixel": [3, 4, 5, 6, 7, 8, 18], "raw": [3, 4, 5, 6, 7, 8], "uncompress": [3, 4, 5, 6, 7, 8], "high": [3, 4, 5, 6, 7, 8, 12, 18], "resolut": [3, 4, 5, 6, 7, 8, 12, 18], "imag": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 24], "regardless": [3, 4, 5, 6, 7, 8], "png": [3, 4, 5, 6, 7, 8], "take": [3, 4, 5, 6, 7, 8, 15, 25], "preced": [3, 4, 5, 6, 7, 8], "exist": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18], "should": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 20], "overwritten": [3, 4, 5, 6, 7, 8], "set_metadata_using_spotifi": [3, 4, 5, 6, 7, 8, 25], "audio_featur": [3, 4, 5, 6, 7, 8, 15, 25], "spotifi": [3, 4, 5, 6, 7, 8, 14, 15, 18, 23, 25], "web": [3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 18, 25, 26, 27], "servic": [3, 4, 5, 6, 7, 8, 13, 14, 15, 18, 23, 25, 27], "webapi": [3, 4, 5, 6, 7, 8, 25, 26, 27], "get_track": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18], "featur": [3, 4, 5, 6, 7, 8, 12, 15, 25, 27], "get_track_audio_featur": [3, 4, 5, 6, 7, 8, 15, 25], "time": [3, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 24, 25], "sync": [3, 4, 5, 6, 7, 8, 14, 18], "privatelyricsservic": [3, 4, 5, 6, 7, 8], "get_lyr": [3, 4, 5, 6, 7, 8, 14], "set_metadata_using_tid": [3, 4, 5, 6, 7, 8, 25], "1280": [3, 4, 5, 6, 7, 8], "tidal": [3, 4, 5, 6, 7, 8, 12, 17, 18, 23, 25], "privateapi": [3, 4, 5, 6, 7, 8, 25, 27], "get_album": [3, 4, 5, 6, 7, 8, 12, 15, 17, 18], "maximum": [3, 4, 5, 6, 7, 8, 12, 15, 18], "80": [3, 4, 5, 6, 7, 8], "get_track_compos": [3, 4, 5, 6, 7, 8, 18, 25], "get_track_contributor": [3, 4, 5, 6, 7, 8, 18], "get_track_credit": [3, 4, 5, 6, 7, 8, 18], "songwrit": [3, 4, 5, 6, 7, 8, 18, 24, 25], "credit": [3, 4, 5, 6, 7, 8, 12, 18, 25], "get_track_lyr": [3, 4, 5, 6, 7, 8, 18, 25], "descript": [3, 4, 5, 6, 7, 8, 12, 15, 18, 24, 27], "set_metadata_using_qobuz": [3, 4, 5, 6, 7, 8], "larg": [3, 4, 5, 6, 7, 8, 12, 15, 18, 24], "qobuz": [3, 4, 5, 6, 7, 8, 12, 23], "small": [3, 4, 5, 6, 7, 8, 12, 15, 18, 24], "thumbnail": [3, 4, 5, 6, 7, 8, 12, 24], "audio": [4, 5, 6, 7, 8, 10, 12, 15, 18, 23, 28], "_vorbiscom": [4, 7], "full": [4, 5, 6, 7, 8, 12, 15, 18], "see": [4, 5, 6, 7, 8, 10, 15, 17, 18, 25, 26, 27], "pathlib": [4, 5, 6, 7, 8, 18, 24, 25], "path": [4, 5, 6, 7, 8, 12, 18, 24, 25], "fearless": 4, "03": [4, 7, 25], "love": 4, "stori": [4, 6, 12, 26], "06": [4, 5, 7, 8, 24, 25], "belong": 4, "me": [4, 8, 24], "write_metadata": [4, 5, 6, 7, 8, 24, 25], "write": [4, 5, 6, 7, 8, 24, 25], "_id3": [5, 8], "red": 5, "knew": 5, "were": [5, 15], "troubl": [5, 26], "22": [5, 18, 24], "mine": 6, "speak": 6, "now": [6, 24, 25], "07": [6, 25], "u": [6, 10, 15, 17, 18, 24, 25, 26], "blank": 7, "space": [7, 10], "style": [7, 26], "shake": 7, "It": [7, 10, 14, 15, 17, 18], "off": [7, 15], "don": [8, 24, 25, 26], "t": [8, 15, 24, 25, 26], "blame": 8, "05": [8, 18, 24], "delic": 8, "look": [8, 10, 18, 25, 27], "what": [8, 15], "made": [8, 15, 24, 26], "do": [8, 24, 25, 27], "complet": [9, 12, 13, 15, 16, 25], "implement": [9, 11, 13, 15, 16, 24, 27], "endpoint": [9, 12, 13, 14, 15, 16, 17, 18, 24, 25], "client": [10, 12, 14, 15, 17, 18, 24, 26, 27], "allow": [10, 12, 15, 18, 25, 27], "varieti": 10, "content": [10, 12, 15, 17, 18], "app": [10, 12, 15, 24], "ibook": 10, "movi": 10, "podcast": [10, 15], "music": [10, 15, 18, 23, 25, 26, 28], "video": [10, 17, 18], "audiobook": [10, 15], "tv": [10, 18, 24], "show": [10, 15, 24, 25], "within": [10, 15], "mac": 10, "also": [10, 12, 14, 15, 17, 18, 24, 25], "id": [10, 12, 14, 15, 17, 18, 24, 25, 26, 27], "request": [10, 12, 14, 15, 17, 18, 24], "map": 10, "librari": [10, 15, 23, 25, 26, 28], "digit": 10, "catalog": [10, 12, 15, 17, 18, 25, 27], "more": [10, 15, 16, 17, 18, 26, 27], "document": [10, 12, 14, 18], "api_url": [10, 12, 15, 17, 18], "term": [10, 12, 14, 18], "countri": [10, 12, 15, 17, 18, 24], "media": [10, 12, 18, 24, 27], "entiti": [10, 15, 18, 24, 27], "limit": [10, 12, 15, 17, 18, 24, 26, 27], "lang": 10, "version": [10, 12, 18, 24, 27], "explicit": [10, 15, 18, 24], "text": [10, 14, 15, 18], "string": [10, 12, 15, 21, 22, 25], "replac": [10, 15, 24, 25], "plu": [10, 18, 24], "charact": [10, 17], "except": [10, 20, 25, 27], "letter": 10, "period": [10, 12], "dash": 10, "underscor": [10, 15], "_": [10, 24, 25], "asterisk": 10, "jack": 10, "johnson": 10, "two": [10, 15, 25, 26], "want": [10, 15, 25, 26], "front": 10, "iso": [10, 14, 15, 17, 18], "obp": 10, "type": [10, 12, 15, 17, 18, 24, 25, 27], "musicvideo": 10, "shortfilm": 10, "tvshow": 10, "softwar": [10, 18], "ebook": 10, "result": [10, 12, 15, 17, 18, 24, 25, 27], "return": [10, 12, 14, 15, 17, 18, 20, 21, 22, 24, 25, 27], "rel": [10, 26], "avail": [10, 12, 14, 15, 17, 18, 25, 26, 27], "tabl": 10, "2": [10, 15, 17, 18, 24, 25, 26], "associ": [10, 12, 14, 15, 17, 18], "movieartist": 10, "name": [10, 12, 15, 17, 18, 24, 25, 27], "allartist": 10, "allartistterm": 10, "Then": [10, 26, 27], "maroon": 10, "5": [10, 12, 15, 26, 27], "instead": [10, 15, 18, 24, 26], "who": 10, "have": [10, 12, 14, 15, 18, 24, 25, 27], "ever": 10, "word": [10, 12, 14], "must": [10, 12, 14, 15, 17, 18, 27], "200": [10, 17, 24], "50": [10, 12, 15, 18, 24, 26], "languag": [10, 12, 14, 15], "english": [10, 15], "japanes": 10, "five": 10, "codenam": 10, "en_u": 10, "ja_jp": 10, "kei": [10, 12, 15, 18], "receiv": 10, "back": [10, 12, 25], "A": [10, 12, 15, 17, 18, 24, 25], "indic": [10, 15], "ye": 10, "To": [10, 12, 15, 17, 18, 24, 25], "short": 10, "film": 10, "25": [10, 12, 25], "jim": 10, "jone": 10, "canada": 10, "ca": [10, 15, 24], "applic": [10, 12, 15, 17, 18, 24, 26], "yelp": 10, "unit": 10, "state": [10, 15], "amg_artist_id": 10, "amg_album_id": 10, "amg_video_id": 10, "bundle_id": 10, "upc": [10, 12, 15, 17, 18, 24, 27], "isbn": 10, "sort": [10, 18], "amg": 10, "ean": [10, 15, 17], "faster": 10, "fewer": 10, "posit": [10, 12, 15, 18, 24, 26], "bundl": 10, "appli": [10, 15, 17], "recent": [10, 12, 15], "up": [10, 12, 15, 18, 26, 27], "909253": 10, "284910350": 10, "468749": 10, "multipl": [10, 15, 17, 27], "5723": 10, "get": [10, 12, 14, 15, 17, 18, 25, 27, 28], "each": [10, 15, 18, 24], "top": [10, 15, 18, 24, 26], "most": [10, 12, 24, 25], "720642462928": 10, "15175": 10, "15176": 10, "15177": 10, "15178": 10, "15183": 10, "15184": 10, "15187": 10, "15190": 10, "15191": 10, "15195": 10, "15197": 10, "15198": 10, "17120": 10, "book": 10, "9780316069359": 10, "com": [10, 18, 24, 26], "yelpiphon": 10, "minimum": [11, 15, 16], "privat": [11, 12, 13, 15, 16, 18, 25, 26, 27], "app_id": [12, 24], "app_secret": [12, 24], "flow": [12, 15, 17, 18, 24, 27], "browser": [12, 14, 18, 24, 27], "user_ag": [12, 18], "email": [12, 15, 18, 24], "password": [12, 24, 27], "auth_token": [12, 24], "save": [12, 14, 15, 17, 18], "collect": [12, 15, 18, 19], "playlist": [12, 15, 18, 26], "perform": [12, 18, 24, 27], "queri": [12, 15, 17, 18, 25], "them": [12, 15, 18, 24, 26, 27], "offici": [12, 15, 18], "been": [12, 14, 15, 18, 24, 25], "watch": [12, 14, 18], "http": [12, 14, 15, 18, 24, 26, 27], "network": [12, 14, 18], "traffic": [12, 14, 18, 24], "design": [12, 14, 15, 18], "publicli": [12, 14, 18], "access": [12, 14, 15, 17, 18, 24, 26, 27], "disabl": [12, 14, 15, 17, 18], "remov": [12, 14, 15, 18, 24], "ensur": [12, 14, 15, 18], "complianc": [12, 14, 18], "while": [12, 15, 18, 25], "necessari": [12, 15, 18, 24, 27], "public": [12, 15, 16, 18, 24, 26, 27], "person": [12, 15, 18], "stream": [12, 15, 18, 27], "activ": [12, 15, 18, 24], "In": [12, 14, 15, 17, 18, 26, 27], "latter": [12, 18], "case": [12, 14, 15, 17, 18, 24, 27], "accompani": [12, 14, 15, 17, 18, 24], "token": [12, 14, 15, 17, 18, 24], "header": [12, 14, 15, 17, 18], "grant": [12, 15], "inher": 12, "unsaf": 12, "sinc": [12, 15, 26], "ha": [12, 24, 25], "mechan": 12, "multifactor": 12, "brute": 12, "forc": 12, "attack": 12, "highli": [12, 15], "encourag": 12, "yourself": 12, "through": [12, 15], "player": [12, 14, 15, 18, 24, 25], "android": [12, 18, 24], "io": [12, 18, 24], "maco": [12, 18, 24], "window": [12, 18, 24], "secret": [12, 15, 17, 18], "constructor": [12, 14, 15, 17, 18, 24, 25, 26], "credenti": [12, 15, 17, 18, 24, 26, 27], "qobuz_private_app_id": 12, "qobuz_private_app_secret": 12, "oper": [12, 14, 15, 17, 18, 23], "system": [12, 14, 15, 17, 18, 26], "environ": [12, 14, 15, 17, 18, 24, 26, 27], "variabl": [12, 14, 15, 17, 18, 24, 26, 27], "thei": [12, 15, 24, 26, 27], "set_flow": [12, 15, 17, 18], "set_auth_token": 12, "respect": [12, 14, 15, 17, 18, 21, 22, 24, 25, 26, 27], "manag": [12, 14, 15, 17, 18], "properti": [12, 14, 15, 17, 18, 25], "acquir": [12, 14, 15, 17, 18], "configur": [12, 14, 15, 17, 18, 26], "load": [12, 14, 15, 17, 18, 25, 26], "next": [12, 14, 15, 17, 18, 24, 25], "behavior": [12, 14, 15, 17, 18, 25], "secur": [12, 14, 15, 17, 18], "concern": [12, 14, 15, 17, 18], "comput": [12, 14, 15, 17, 18, 21, 22], "being": [12, 14, 15, 17, 18], "share": [12, 14, 15, 17, 18], "devic": [12, 14, 15, 17, 18, 24, 26, 27], "author": [12, 17, 24], "open": [12, 15, 18, 24, 26, 27], "login": [12, 24], "page": [12, 15, 17, 18, 24], "playwright": [12, 15, 18], "framework": [12, 15, 18, 24, 27], "microsoft": [12, 15, 18], "account": [12, 15, 18, 24], "agent": [12, 18], "send": [12, 14, 15, 17, 18], "address": [12, 18], "here": [12, 14, 15, 17, 18, 24], "found": [12, 14, 15, 17, 18, 26], "process": [12, 14, 15, 17, 18, 24, 25, 27], "bypass": [12, 14, 15, 17, 18], "newli": [12, 14, 15, 17, 18, 27], "web_url": [12, 18], "set": [12, 14, 15, 17, 18, 26, 27], "album_id": [12, 17, 18, 27], "singl": [12, 15, 17, 25], "0060254735180": 12, "maximum_bit_depth": [12, 24], "media_count": [12, 24], "albums_count": [12, 24], "slug": [12, 24], "pictur": [12, 17, 18, 24], "role": [12, 18], "released_at": [12, 24], "label": [12, 15, 24], "supplier_id": [12, 24], "qobuz_id": [12, 24], "durat": [12, 15, 17, 18, 24], "parental_warn": [12, 24], "popular": [12, 15, 17, 18, 23, 24, 25], "tracks_count": [12, 24, 27], "color": [12, 14, 18, 24], "maximum_channel_count": [12, 24], "maximum_sampling_r": [12, 24], "articl": [12, 18], "release_date_origin": [12, 24], "release_date_download": [12, 24], "release_date_stream": [12, 24], "purchas": [12, 24], "streamabl": [12, 24], "preview": [12, 18, 24, 25], "sampleabl": [12, 24], "download": [12, 15, 18, 24], "display": [12, 24], "purchasable_at": [12, 24], "streamable_at": [12, 24], "hire": [12, 24], "hires_stream": [12, 24], "award": 12, "description_languag": 12, "goodi": 12, "area": 12, "catchlin": 12, "created_at": [12, 24], "genres_list": 12, "is_offici": 12, "maximum_technical_specif": 12, "product_sales_factors_monthli": 12, "product_sales_factors_weekli": 12, "product_sales_factors_yearli": 12, "product_typ": 12, "product_url": 12, "recording_inform": 12, "relative_url": 12, "release_tag": 12, "release_typ": 12, "subtitl": [12, 18], "offset": [12, 15, 17, 18, 24], "audio_info": [12, 24], "replaygain_track_peak": [12, 24], "float": [12, 15, 18, 21, 22], "replaygain_track_gain": [12, 24], "work": [12, 18, 24], "media_numb": [12, 24], "release_date_purchas": [12, 24], "get_featured_album": 12, "seller": 12, "editor": 12, "pick": 12, "ideal": [12, 24], "discographi": 12, "press": [12, 24], "qobuzissim": 12, "harmonia": 12, "mundi": 12, "univers": 12, "classic": [12, 15], "jazz": 12, "jeuness": 12, "chanson": 12, "index": [12, 15, 18], "get_artist": [12, 15, 17, 18], "artist_id": [12, 17, 18, 27], "extra": 12, "tracks_appears_on": 12, "albums_with_last_releas": 12, "effect": 12, "albums_as_primary_artist_count": 12, "albums_as_primary_composer_count": 12, "medium": [12, 18, 24], "extralarg": [12, 24], "mega": [12, 24], "similar_artist_id": 12, "biographi": [12, 18], "summari": [12, 18], "get_label": 12, "label_id": 12, "1153": 12, "get_playlist": [12, 15, 18, 24, 27], "playlist_id": [12, 15], "15732665": 12, "image_rectangle_mini": 12, "featured_artist": 12, "timestamp_posit": 12, "images300": [12, 24], "updated_at": [12, 24], "percent": 12, "image_rectangl": 12, "owner": [12, 15, 24], "users_count": [12, 24], "images150": [12, 24], "is_collabor": [12, 24, 27], "featured_tag_id": 12, "name_json": 12, "genre_tag": 12, "is_discov": 12, "public_at": [12, 24], "is_publ": [12, 24, 27], "is_featur": [12, 24], "null": 12, "playlist_track_id": [12, 24], "get_featured_playlist": [12, 15], "last": [12, 15, 18, 20, 25, 26, 27], "get_user_playlist": [12, 15, 18, 24, 27], "custom": [12, 15, 26], "favorit": [12, 26], "500": [12, 18, 24], "is_publish": 12, "published_to": [12, 24], "welcom": 12, "published_from": [12, 24], "create_playlist": [12, 15, 18, 24, 26, 27], "collabor": [12, 15, 24, 27], "brief": [12, 18], "update_playlist": [12, 18, 24], "privaci": [12, 18], "own": [12, 15, 18], "17737508": 12, "update_playlist_posit": 12, "from_playlist_id": 12, "to_playlist_id": 12, "organ": [12, 25], "move": [12, 15, 18], "swap": 12, "17737509": 12, "add_playlist_track": [12, 24, 27], "track_id": [12, 14, 17, 18], "duplic": 12, "add": [12, 15, 18, 24, 26, 27], "24393122": 12, "24393138": 12, "ad": [12, 15, 18, 24, 27], "move_playlist_track": 12, "insert_befor": [12, 15], "same": [12, 15, 27], "delete_playlist_track": 12, "delet": [12, 15, 18], "delete_playlist": [12, 18, 24], "favorite_playlist": [12, 18], "subscrib": 12, "unfavorite_playlist": [12, 18], "unsubscrib": 12, "hi_r": [12, 18], "new_releas": 12, "10": [12, 15, 17, 18, 24], "categori": [12, 15, 18, 24], "mainartist": [12, 24], "releasenam": [12, 24], "exact": 12, "phrase": 12, "focu": 12, "name_superbloc": 12, "accroch": 12, "genre_id": 12, "root_categori": 12, "abstract": 12, "image_origin": 12, "category_id": [12, 15], "source_imag": 12, "published_at": 12, "section_slug": 12, "description_short": 12, "display_d": 12, "get_track_perform": 12, "unformat": 12, "call": [12, 24], "filter": [12, 15, 18], "special": 12, "composerlyricist": [12, 24], "lyricist": [12, 18], "featuredartist": 12, "produc": [12, 24], "co": [12, 24], "mixer": 12, "musicpublish": 12, "etc": [12, 18, 27], "dictionari": [12, 15, 17, 18], "contributor": [12, 18, 24], "snake": 12, "get_track_file_url": 12, "format_id": 12, "27": [12, 24, 25], "playback": [12, 15, 18], "hi": [12, 18], "re": [12, 18, 24], "qualiti": [12, 18], "constant": 12, "320": [12, 18, 24], "kbp": [12, 18], "6": [12, 15], "cd": [12, 24], "16": [12, 18, 24, 25], "44": [12, 18, 24], "khz": [12, 18], "7": [12, 24], "24": [12, 18, 24], "96": [12, 18], "192": 12, "mime_typ": 12, "restrict": [12, 15], "sampling_r": 12, "get_curated_track": 12, "weekli": 12, "curat": [12, 18], "baselin": 12, "step_pagin": 12, "graphic": 12, "background": [12, 14], "foreground": 12, "generated_at": 12, "expires_on": 12, "get_track_stream": [12, 18], "mime": [12, 18], "get_collection_stream": [12, 18], "get_profil": [12, 15, 18], "profil": [12, 15, 18, 24], "publicid": 12, "firstnam": [12, 18], "lastnam": [12, 18], "display_nam": [12, 15], "country_cod": [12, 17, 18], "language_cod": 12, "zone": 12, "avatar": 12, "ag": [12, 24], "creation_d": 12, "offer": 12, "start_dat": 12, "end_dat": 12, "is_cancel": 12, "household_size_max": 12, "lossy_stream": 12, "lossless_stream": 12, "hires_purchases_stream": 12, "mobile_stream": 12, "offline_stream": 12, "hfp_purchas": 12, "included_format_group_id": 12, "color_schem": 12, "logo": 12, "short_label": 12, "last_upd": 12, "favorite_album": [12, 18, 27], "favorite_artist": [12, 18, 27], "favorite_track": [12, 18, 26], "store_featur": 12, "editori": 12, "club": 12, "wallet": 12, "weeklyq": 12, "autoplai": 12, "inapp_purchase_subscripton": 12, "opt_in": 12, "music_import": 12, "get_favorit": [12, 27], "get_purchas": 12, "favorite_item": [12, 27], "unfavorite_item": 12, "unfavorit": 12, "sp_dc": [14, 15, 24], "access_token": [14, 15, 17, 18, 24], "expiri": [14, 15, 17, 18, 24], "datetim": [14, 15, 17, 18], "power": [14, 24], "musixmatch": 14, "petitlyr": 14, "japan": 14, "interfac": [14, 23], "so": [14, 15, 17, 18, 24, 25, 26, 27], "develop": [14, 18], "cooki": [14, 15, 24], "either": [14, 15, 17, 18, 24, 26], "spotify_sp_dc": [14, 15, 24], "extract": [14, 18], "local": [14, 15, 25], "storag": [14, 24], "after": [14, 15], "log": [14, 24], "exchang": [14, 15, 18], "recommend": [14, 15, 17, 18, 27, 28], "other": [14, 15, 17, 18, 24, 25], "authent": [14, 15, 17, 24, 26, 27], "relat": [14, 15, 17, 18, 24], "expir": [14, 15, 17, 18, 24], "set_sp_dc": 14, "set_access_token": [14, 15, 17, 18], "former": [14, 15, 17, 18], "relev": [14, 15, 17, 18, 27], "refresh": [14, 15, 17, 18, 24], "8601": [14, 15, 17, 18], "m": [14, 15, 17, 18, 24], "dt": [14, 15, 17, 18], "h": [14, 15, 17, 18], "sz": [14, 15, 17, 18, 24], "user": [14, 15, 17, 24, 26, 27], "reauthent": [14, 15, 17, 18], "lyrics_url": 14, "token_url": [14, 15, 17, 18], "session": [14, 15, 17, 18], "timestamp": [14, 15, 17, 18], "0vjijw4gluzamyd2vxmi3b": 14, "synctyp": 14, "starttimem": 14, "syllabl": 14, "endtimem": 14, "providerlyricsid": [14, 18], "providerdisplaynam": 14, "synclyricsuri": 14, "isdensetypefac": 14, "altern": [14, 15, 27], "isrtllanguag": 14, "fullscreenact": 14, "showupsel": 14, "highlighttext": 14, "hasvocalremov": 14, "client_id": [15, 17, 18, 24], "client_secret": [15, 17, 18, 24], "web_play": 15, "port": [15, 24], "8888": [15, 24], "redirect_uri": 15, "refresh_token": [15, 18, 24], "creation": 15, "interact": [15, 26], "control": 15, "visual": [15, 26], "form": 15, "refer": [15, 17, 21, 22], "without": [15, 18, 24, 25], "proof": [15, 18], "pkce": [15, 18, 24, 27], "These": [15, 18], "oauth": [15, 17, 18], "spotify_client_id": [15, 24], "spotify_client_secret": [15, 24], "guid": [15, 17], "how": [15, 17, 25], "advantag": 15, "function": [15, 17, 18], "redirect": [15, 24], "uri": [15, 18, 24], "localhost": [15, 24], "callback": [15, 18, 24], "where": 15, "approach": [15, 24], "resort": 15, "deprec": 15, "unless": 15, "authorization_cod": 15, "client_credenti": [15, 17, 18], "server": [15, 24, 27], "built": 15, "flask": 15, "get_scop": [15, 24, 27], "possibl": [15, 17, 18], "auth_url": [15, 18], "web_player_token_url": 15, "classmethod": 15, "ugc": 15, "upload": 15, "spotify_connect": 15, "connect": 15, "read": [15, 26], "modifi": 15, "plai": 15, "remot": 15, "follow": [15, 18, 24, 26, 27], "listening_histori": 15, "histori": 15, "substr": 15, "e": [15, 24], "market": 15, "4aawyab9vmqn3uq7fjrgti": 15, "3166": [15, 17, 18], "alpha": [15, 17, 18], "prioriti": 15, "over": 15, "neither": 15, "consid": 15, "album_typ": [15, 24], "total_track": [15, 24, 27], "available_market": [15, 24], "external_url": [15, 24], "href": [15, 24], "height": [15, 17, 18, 24, 26], "width": [15, 17, 18, 24, 26], "release_d": [15, 24], "release_date_precis": [15, 24], "reason": 15, "external_id": [15, 24, 27], "previou": [15, 18, 24, 25], "duration_m": [15, 24], "is_play": 15, "linked_from": 15, "preview_url": [15, 24], "is_loc": [15, 24], "sever": 15, "identifi": [15, 24], "comma": 15, "20": 15, "382obepsp2rxgrnsizn5tx": 15, "1a2gtwgtffwp7ksqtwwoyo": 15, "2norn2aes5aonvsu6iwthc": 15, "get_album_track": 15, "000": [15, 24], "get_saved_album": [15, 27], "added_at": [15, 24], "save_album": [15, 27], "remove_saved_album": 15, "check_saved_album": 15, "check": 15, "alreadi": [15, 18, 24, 25], "arrai": 15, "boolean": 15, "get_new_album": 15, "shown": 15, "brows": 15, "tab": 15, "particular": 15, "omit": 15, "se": [15, 24], "album_group": 15, "uniqu": [15, 25], "0tnoyisbd1xyrbk9myaseg": 15, "2cimqhirsu0mqqyyhq0eox": 15, "57dn52uhvrhoxijzpigu3": 15, "1vcwhac5f2us3yhpwwbia6": 15, "get_artist_album": [15, 17, 18], "include_group": 15, "suppli": 15, "promot": 15, "appears_on": 15, "appear": [15, 18, 25], "main": [15, 17, 24, 27], "get_artist_top_track": [15, 18], "get_related_artist": 15, "similar": [15, 17, 18, 21, 22, 26, 27], "given": [15, 17], "analysi": 15, "commun": 15, "listen": 15, "get_audiobook": 15, "uk": 15, "ireland": 15, "zealand": 15, "australia": 15, "7ihfbu1ypacw6ozpafjtq": 15, "html_descript": 15, "edit": [15, 18, 28], "media_typ": 15, "narrat": 15, "publish": 15, "total_chapt": 15, "chapter": 15, "audio_preview_url": 15, "chapter_numb": 15, "resume_point": 15, "fully_plai": 15, "resume_position_m": 15, "episod": [15, 24], "18yvqkdbdrvs24c0ilj2ci": 15, "1hgw3j3nxzo1tp1bttvhpz": 15, "get_audiobook_chapt": 15, "get_saved_audiobook": 15, "save_audiobook": 15, "remove_saved_audiobook": 15, "check_saved_audiobook": 15, "get_categori": 15, "dinner": 15, "desir": [15, 18], "consist": 15, "639": 15, "join": 15, "american": 15, "es_mx": 15, "spanish": 15, "mexico": 15, "icon": 15, "nformat": 15, "get_chapt": 15, "0d5wendkdwbqlrhoaj9g29": 15, "0isxvp0jmcb2adse338gkk": 15, "3zxb8fkzgu0ehalyx6uczu": 15, "get_episod": 15, "512ojhouo1ktjprkbvckyq": 15, "is_externally_host": 15, "total_episod": 15, "77o6bivlym3msb4mmil1jh": 15, "0q86acnrm6v9gyx55sxkwf": 15, "get_saved_episod": 15, "save_episod": 15, "remove_saved_episod": 15, "check_saved_episod": 15, "get_genre_se": 15, "seed": [15, 26], "get_recommend": [15, 26], "acoust": 15, "afrobeat": 15, "get_market": 15, "br": [15, 24], "IT": [15, 24], "get_playback_st": 15, "additional_typ": 15, "progress": 15, "besid": 15, "introduc": 15, "maintain": [15, 24], "might": 15, "futur": 15, "is_act": 15, "is_private_sess": 15, "is_restrict": 15, "volume_perc": 15, "repeat_st": 15, "shuffle_st": 15, "context": 15, "progress_m": 15, "is_plai": 15, "currently_playing_typ": 15, "action": 15, "interrupting_playback": 15, "paus": 15, "resum": 15, "seek": 15, "skipping_next": 15, "skipping_prev": 15, "toggling_repeat_context": 15, "toggling_shuffl": 15, "toggling_repeat_track": 15, "transferring_playback": 15, "transfer_playback": 15, "device_id": 15, "transfer": [15, 28], "start": [15, 25, 26, 27], "although": 15, "accept": 15, "than": [15, 24, 25], "400": 15, "bad": 15, "74aszwbe4lxaubb36ztrgx": 15, "happen": [15, 25], "get_devic": 15, "get_currently_plai": 15, "start_playback": 15, "context_uri": 15, "position_m": 15, "target": [15, 17, 18], "0d1841b0976bae2a3a310dd74c0f3df354899bc8": 15, "1je1imulbxcx1fz0we7opt": 15, "4iv5w9uyedyuva79axb7rh": 15, "1301wleyt98msxvhpzca6m": 15, "zero": 15, "neg": 15, "repres": 15, "sixth": 15, "millisecond": 15, "pass": [15, 24, 25, 26], "greater": 15, "length": 15, "caus": 15, "pause_playback": 15, "skip_to_next": 15, "skip": [15, 18, 24], "queue": 15, "skip_to_previ": 15, "seek_to_posit": 15, "25000": 15, "set_repeat_mod": 15, "repeat": [15, 25], "mode": [15, 18], "turn": 15, "set_playback_volum": 15, "volum": 15, "100": [15, 18, 24, 26], "inclus": 15, "toggle_playback_shuffl": 15, "toggl": 15, "shuffl": 15, "get_recently_plai": 15, "befor": [15, 24, 25, 27], "doesn": 15, "unix": 15, "cursor": [15, 18], "1484811043508": 15, "played_at": 15, "get_queu": 15, "make": [15, 17, 18, 24, 26], "currently_plai": 15, "add_to_queu": 15, "end": 15, "3ceypja9oz9gipac4ash4n": 15, "dot": [15, 24], "non": 15, "reoccur": 15, "parenthes": 15, "drill": 15, "nest": 15, "prefix": 15, "exclam": 15, "mark": 15, "just": 15, "added_bi": [15, 24], "adder": 15, "snapshot_id": [15, 24], "change_playlist_detail": [15, 24], "detail": [15, 17, 27], "cours": 15, "my": [15, 18, 24], "becom": 15, "abl": 15, "displai": [15, 26], "get_playlist_item": [15, 18, 27], "add_playlist_item": [15, 18, 24, 26, 27], "exce": 15, "bodi": 15, "insert": 15, "order": [15, 18], "third": [15, 27], "snapshot": 15, "update_playlist_item": 15, "range_start": 15, "range_length": 15, "reorder": 15, "depend": [15, 24], "clear": 15, "mutual": 15, "exclus": 15, "togeth": 15, "simpli": [15, 24], "9": 15, "amount": 15, "rang": 15, "begin": 15, "subsequ": 15, "against": 15, "remove_playlist_item": 15, "even": [15, 25], "user_id": [15, 18], "smedjan": 15, "empti": 15, "until": 15, "doe": [15, 18, 24, 25, 27], "coolest": 15, "yyyi": 15, "mm": 15, "ddthh": 15, "ss": 15, "tailor": 15, "dai": [15, 24], "revert": 15, "utc": 15, "2014": 15, "23t09": 15, "00": [15, 24, 25], "whose": 15, "am": [15, 24], "messag": [15, 17, 24], "get_category_playlist": 15, "get_playlist_cover_imag": 15, "dimens": 15, "add_playlist_cover_imag": [15, 26], "base64": [15, 26], "jpeg": 15, "payload": 15, "256": [15, 24], "kb": 15, "narrow": 15, "year": 15, "hipster": 15, "certain": 15, "g": [15, 18], "1955": 15, "1960": 15, "past": [15, 24], "week": 15, "lowest": [15, 25], "remast": 15, "doxi": 15, "mile": 15, "davi": 15, "across": [15, 27], "hit": [15, 24], "both": [15, 18, 24], "get_show": 15, "38bs44xjbvvz3no3byf1dj": 15, "5cfcwki5pz28u0uozxkdh": 15, "5as3akmn2k11yfdddsrvaz": 15, "get_show_episod": 15, "get_saved_show": 15, "save_show": 15, "remove_saved_show": 15, "check_saved_show": 15, "11dfghvxanmlkmjxsncbnl": 15, "7oumywpwj422jrcdaszb7p": 15, "4vqporuhp5edpber92t6lq": 15, "2takcwoaazwixqijphix7b": 15, "get_saved_track": [15, 26], "save_track": 15, "remove_saved_track": 15, "check_saved_track": 15, "analysis_url": 15, "danceabl": 15, "energi": 15, "instrument": 15, "live": 15, "loud": 15, "speechi": 15, "time_signatur": 15, "track_href": 15, "valenc": 15, "get_tracks_audio_featur": 15, "get_track_audio_analysi": 15, "low": [15, 18], "level": 15, "describ": 15, "structur": 15, "rhythm": 15, "pitch": 15, "timbr": 15, "audio_analysi": 15, "meta": 15, "analyzer_vers": 15, "platform": 15, "detailed_statu": 15, "status_cod": 15, "analysis_tim": 15, "input_process": 15, "num_sampl": 15, "sample_md5": 15, "offset_second": 15, "window_second": 15, "analysis_sample_r": 15, "analysis_channel": 15, "end_of_fade_in": 15, "start_of_fade_out": 15, "tempo_confid": 15, "time_signature_confid": 15, "key_confid": 15, "mode_confid": 15, "codestr": 15, "code_vers": 15, "echoprintstr": 15, "echoprint_vers": 15, "synchstr": 15, "synch_vers": 15, "rhythmstr": 15, "rhythm_vers": 15, "bar": 15, "confid": 15, "section": [15, 24], "segment": 15, "loudness_start": 15, "loudness_max": 15, "loudness_max_tim": 15, "loudness_end": 15, "tatum": 15, "seed_artist": 15, "seed_genr": 15, "seed_track": [15, 26], "suffici": 15, "pool": 15, "veri": [15, 25], "obscur": 15, "enough": 15, "train": 15, "machin": 15, "learn": 15, "ai": 15, "model": 15, "4nhqugzhttlfvgf5szeslk": 15, "0c6xiddpze81m2q797orda": 15, "unusu": 15, "imposs": 15, "debug": [15, 24], "tunabl": [15, 26], "afterfilterings": 15, "afterrelinkings": 15, "initialpools": 15, "usernam": [15, 18], "explicit_cont": 15, "filter_en": 15, "filter_lock": 15, "product": [15, 24], "get_top_item": 15, "time_rang": 15, "calcul": 15, "affin": 15, "frame": 15, "long_term": 15, "medium_term": 15, "approxim": 15, "month": 15, "short_term": 15, "get_user_profil": [15, 18], "follow_playlist": 15, "unfollow_playlist": [15, 24], "unfollow": [15, 18], "get_followed_artist": [15, 27], "0i2xqvxqhscxjhhk6ayyr": 15, "follow_peopl": [15, 27], "sent": 15, "unfollow_peopl": 15, "check_followed_peopl": 15, "check_playlist_follow": 15, "jmperezperez": 15, "thelinmichael": 15, "wizzler": 15, "robust": 16, "expos": 17, "build": [17, 25, 26], "tidal_client_id": [17, 24], "tidal_client_secret": [17, 24], "regist": [17, 24], "set_auflow": 17, "251380836": [17, 18], "barcodeid": 17, "released": [17, 18, 24], "imagecov": 17, "videocov": [17, 18, 24], "numberofvolum": [17, 18], "numberoftrack": [17, 18, 24, 27], "numberofvideo": [17, 18, 24], "mediametadata": [17, 18, 24], "275646830": [17, 18], "resourc": [17, 24, 26], "statu": [17, 18, 24], "success": [17, 24], "failur": 17, "get_album_item": [17, 18], "pagin": [17, 18], "artifacttyp": 17, "tracknumb": [17, 18, 24], "volumenumb": [17, 18, 24], "get_album_by_barcode_id": 17, "barcode_id": 17, "barcod": 17, "196589525444": 17, "get_similar_album": [17, 18, 26], "1566": [17, 18], "7804": [17, 18], "get_similar_artist": [17, 18, 26], "251380837": [17, 18], "251380838": [17, 18], "get_track_by_isrc": 17, "usual": 17, "compris": 17, "12": [17, 24], "alphanumer": 17, "ussm12209515": 17, "get_similar_track": [17, 26], "get_video": [17, 18], "video_id": [17, 18], "75623239": [17, 18], "59727844": [17, 18], "beyonc\u00e9": [17, 18], "worldwid": 17, "r_usr": 18, "tidal_private_client_id": 18, "tidal_private_client_secret": 18, "desktop": [18, 24], "device_cod": 18, "manual": [18, 26], "termin": 18, "w_usr": 18, "w_sub": 18, "temporarili": 18, "block": 18, "ip": 18, "too": 18, "quickli": 18, "login_url": 18, "redirect_url": 18, "resources_url": 18, "streamreadi": [18, 24], "adsupportedstreamreadi": [18, 24], "djreadi": [18, 24], "stemreadi": [18, 24], "streamstartd": [18, 24], "allowstream": [18, 24], "premiumstreamingonli": [18, 24], "vibrantcolor": [18, 24], "audioqu": [18, 24], "audiomod": [18, 24], "totalnumberofitem": 18, "replaygain": [18, 24], "peak": [18, 24], "mix": [18, 24, 26], "track_mix": [18, 24], "get_album_credit": 18, "get_album_review": 18, "review": 18, "synopsi": 18, "lastupd": [18, 24], "get_favorite_album": [18, 27], "order_direct": 18, "desc": 18, "direct": 18, "asc": 18, "on_artifact_not_found": 18, "unfavorite_album": 18, "artisttyp": [18, 24], "artistrol": [18, 24], "categoryid": [18, 24], "artist_mix": [18, 24], "subset": 18, "epsandsingl": 18, "get_artist_video": 18, "imagepath": 18, "imageid": 18, "adsurl": 18, "adsprepaywallonli": 18, "get_artist_mix_id": 18, "mix_id": 18, "000ec0b01da1ddd752ec5dee553d48": 18, "get_artist_radio": 18, "inspir": 18, "ident": 18, "get_mix_item": 18, "get_artist_biographi": 18, "biograph": 18, "get_artist_link": 18, "link": 18, "websit": 18, "sitenam": 18, "banner": 18, "relationtyp": 18, "similar_artist": 18, "get_favorite_artist": [18, 27], "unfavorite_artist": 18, "get_blocked_artist": 18, "block_artist": 18, "radio": 18, "unblock_artist": 18, "unblock": 18, "get_country_cod": 18, "get_imag": 18, "uuid": [18, 24, 27], "anim": 18, "d3c4372b": 18, "a652": 18, "40e0": 18, "bdb1": 18, "fc8d032708f6": 18, "userprofil": 18, "get_favorite_mix": 18, "datead": 18, "mixtyp": 18, "subtitletextinfo": 18, "detailimag": 18, "master": 18, "titletextinfo": 18, "lastmodifiedat": 18, "favorite_mix": 18, "000dd748ceabd5508947c6a5d3880a": 18, "unfavorite_mix": 18, "get_album_pag": 18, "device_typ": 18, "phone": 18, "mobil": 18, "smart": 18, "submodul": 18, "get_artist_pag": 18, "get_mix_pag": 18, "get_video_pag": 18, "playlist_uuid": 18, "36ea71a8": 18, "445e": 18, "41a4": 18, "82ab": 18, "6628c581535d": 18, "creator": [18, 24], "publicplaylist": 18, "squareimag": [18, 24], "promotedartist": [18, 24], "lastitemaddedat": [18, 24], "get_playlist_etag": 18, "etag": 18, "1698984074453": 18, "get_playlist_recommend": 18, "folder_id": 18, "root": 18, "4261748a": 18, "4287": 18, "4758": 18, "aaab": 18, "6d5be3e99e52": 18, "folder": 18, "place": 18, "under": 18, "move_playlist": 18, "e09ab9c": 18, "2e87": 18, "41b8": 18, "b404": 18, "3cd712bf706e": 18, "contentbehavior": [18, 24], "sharinglevel": [18, 24], "trn": [18, 24], "followinfo": [18, 24], "nroffollow": [18, 24], "tidalresourcenam": [18, 24], "followtyp": [18, 24], "userid": 18, "get_personal_playlist": 18, "folder_uuid": 18, "itemtyp": 18, "addedat": 18, "parent": [18, 24, 25, 26], "readi": [18, 24], "set_playlist_privaci": [18, 24], "from_playlist_uuid": 18, "on_dupl": 18, "move_playlist_item": 18, "from_index": 18, "to_index": 18, "delete_playlist_item": 18, "get_personal_playlist_fold": 18, "flatten": 18, "include_onli": 18, "date_upd": 18, "createdat": 18, "create_playlist_fold": 18, "delete_playlist_fold": 18, "92b3c1ea": 18, "245a": 18, "4e5a": 18, "a5a4": 18, "c215f7a65b9f": 18, "tophit": 18, "collection_id": 18, "audio_qu": 18, "video_qu": 18, "max_resolut": 18, "2160": 18, "playback_mod": 18, "asset_present": 18, "streaming_session_id": 18, "immers": 18, "hifi": 18, "plan": 18, "price": 18, "dolbi": 18, "atmo": 18, "64": [18, 24], "1411": 18, "9216": 18, "mqa": 18, "audio_onli": 18, "vertic": 18, "offlin": 18, "asset": [18, 24, 26], "present": 18, "30": [18, 25], "get_video_stream": 18, "tommi": 18, "wright": 18, "kelman": 18, "duran": 18, "teriu": 18, "dream": 18, "de": [18, 24], "diamant": 18, "mike": [18, 26], "dean": 18, "trackid": [18, 24], "lyricsprovid": 18, "providercommontrackid": 18, "isrighttoleft": 18, "get_track_mix_id": 18, "tidal_id": 18, "0017159e6a1f34ae3d981792d72ecf": 18, "get_track_playback_info": 18, "hc": 18, "en": 18, "360004255778": 18, "info": 18, "assetpresent": 18, "manifestmimetyp": 18, "manifesthash": 18, "manifest": 18, "albumreplaygain": 18, "albumpeakamplitud": 18, "trackreplaygain": 18, "trackpeakamplitud": 18, "get_track_recommend": 18, "suggested_track": 18, "get_favorite_track": 18, "unfavorite_track": 18, "countrycod": 18, "fullnam": 18, "nicknam": 18, "citi": 18, "postalcod": 18, "usstat": 18, "phonenumb": 18, "birthdai": 18, "channelid": 18, "parentid": 18, "acceptedeula": 18, "facebookuid": 18, "appleuid": 18, "googleuid": 18, "accountlinkcr": 18, "emailverifi": 18, "newus": 18, "get_sess": 18, "sessionid": 18, "partnerid": 18, "authorizedforofflin": 18, "authorizedforofflined": 18, "get_favorite_id": 18, "172311284": 18, "numberoffollow": 18, "prompt": [18, 24], "primari": [18, 20], "secondari": 18, "updatedtim": 18, "supportedcontenttyp": 18, "profiletyp": 18, "get_user_follow": 18, "peopl": [18, 27], "imfollow": 18, "follow_us": 18, "unfollow_us": 18, "get_blocked_us": 18, "block_us": 18, "unblock_us": 18, "get_video_playback_info": 18, "videoid": 18, "streamtyp": 18, "videoqu": 18, "get_favorite_video": 18, "favorite_video": 18, "unfavorite_video": 18, "util": [20, 21, 22, 25], "ndarrai": [21, 22], "levenshtein": [22, 25], "ratio": [21, 22, 25], "measur": [21, 22], "compar": [21, 22], "numpi": [21, 22, 25], "instal": [21, 22], "otherwis": [21, 22, 25], "lightweight": 23, "3": [23, 24, 25, 26], "packag": 24, "pip": 24, "come": [24, 26], "pypi": 24, "conda": 24, "forg": 24, "onc": 24, "pep": 24, "541": 24, "resolv": [24, 25], "grab": 24, "repositori": 24, "git": 24, "clone": 24, "github": 24, "bbye98": 24, "enter": [24, 25], "directori": [24, 25], "virtual": 24, "prevent": 24, "conflict": 24, "requirements_minim": 24, "txt": 24, "env": 24, "f": [24, 25, 26, 27], "yml": 24, "venv": 24, "bin": 24, "posix": 24, "bash": 24, "zsh": 24, "script": 24, "bat": 24, "cmd": 24, "ex": 24, "ps1": 24, "powershel": 24, "alongsid": 24, "step": [24, 27], "r": [24, 25], "virtualenv": 24, "linux": 24, "done": 24, "try": [24, 27], "import": [24, 25, 26, 27], "error": 24, "modulenotfounderror": 24, "No": 24, "rais": 24, "successfulli": 24, "out": [24, 25, 26], "box": 24, "few": 24, "addit": [24, 27], "prerequisit": 24, "cach": 24, "client_itun": [24, 25], "client_qobuz": [24, 27], "protect": 24, "qobuz_email": 24, "qobuz_password": 24, "post": 24, "spawn": 24, "normal": 24, "launch": 24, "find": [24, 26, 27], "chromium": 24, "f12": 24, "devtool": 24, "navig": 24, "firefox": 24, "shift": 24, "f9": 24, "inspector": 24, "nagiv": 24, "client_spotify_lyr": 24, "choic": [24, 26], "spotify_port": 24, "client_spotifi": [24, 25, 26, 27], "scope": [24, 26, 27], "get_authorization_scop": 24, "autom": 24, "click": 24, "agre": 24, "jot": 24, "client_tid": [24, 25, 26, 27], "client_tidal_priv": 24, "proxi": 24, "tool": 24, "intercept": 24, "instruct": 24, "consol": 24, "edm": 24, "group": 24, "galanti": [24, 26], "musicartist": 24, "wrappertyp": 24, "artistnam": [24, 25], "artistlinkurl": 24, "543322169": 24, "uo": 24, "artistid": 24, "amgartistid": 24, "2616267": 24, "primarygenrenam": 24, "danc": 24, "primarygenreid": 24, "17": 24, "static": 24, "8dcf30e5c8e30281ecbb13b0886426c8": 24, "127": 24, "865362": 24, "4stqvofp9vemcemlw50sbu": 24, "3382444": [], "pop": 24, "v1": 24, "640": 24, "scdn": 24, "ab6761610000e5eb7bda087d6fb48d481efd3344": 24, "ab676161000051747bda087d6fb48d481efd3344": 24, "160": 24, "ab6761610000f1787bda087d6fb48d481efd3344": 24, "67": [], "4676988": 24, "a627e21c": 24, "60f7": 24, "4e90": 24, "b2bb": 24, "e50b178c4f0b": 24, "1024x256": 24, "1024": 24, "1080x720": 24, "1080": 24, "720": 24, "160x107": 24, "107": 24, "160x160": 24, "320x214": 24, "214": 24, "320x320": 24, "480x480": 24, "480": 24, "640x428": 24, "428": 24, "750x500": 24, "750": 24, "750x750": 24, "www": 24, "72": 24, "11": [24, 25], "engin": 24, "team": 24, "000202a7e72fd90d0c0df2ed56ddea": 24, "everybodi": 24, "talk": 24, "neon": 24, "tree": 24, "kind": 24, "315816847": [], "collectionid": [24, 25], "578054990": [], "578054997": [], "glee": [], "cast": [], "collectionnam": 24, "season": [], "vol": 24, "tracknam": [24, 25], "collectioncensorednam": 24, "trackcensorednam": 24, "artistviewurl": 24, "collectionviewurl": 24, "trackviewurl": 24, "previewurl": 24, "ssl": 24, "audiopreview125": [], "v4": 24, "86": [], "4b": [], "3f": [], "864b3f23": [], "9155": [], "9ce8": [], "c1c0": [], "fc115a8af80a": [], "mzaf_13828074306318913858": [], "p": 24, "artworkurl30": 24, "is1": 24, "mzstatic": 24, "thumb": 24, "music115": [], "57": 24, "6d": [], "4e": [], "576d4e7a": [], "7860": [], "595a": [], "5ccd": [], "05e965413df5": [], "886443746404": [], "30x30bb": 24, "artworkurl60": 24, "60x60bb": 24, "artworkurl100": 24, "100x100bb": 24, "collectionpric": 24, "99": 24, "trackpric": 24, "29": 24, "2012": 24, "05t12": [], "00z": [24, 25], "collectionexplicit": 24, "notexplicit": 24, "trackexplicit": 24, "disccount": 24, "discnumb": 24, "trackcount": 24, "tracktimemilli": 24, "179280": [], "usa": 24, "currenc": 24, "usd": 24, "isstream": 24, "track_qobuz": 24, "2022": [24, 25], "arko": 24, "boom": 24, "todd": 24, "15899504": 24, "fc": 24, "7v": 24, "ilfmuz10e7vfc_230": 24, "ilfmuz10e7vfc_50": 24, "ilfmuz10e7vfc_600": 24, "0859766309663": 24, "1665180000": 24, "4026379": 24, "95": 24, "speedi": 24, "178369185": 24, "536": 24, "133": 24, "0070ef": 24, "hip": 24, "hop": 24, "rap": 24, "ilfmuz10e7vfc": 24, "1689231600": 24, "08": 24, "15899505": 24, "tcagm2280786": 24, "178369187": 24, "track_spotifi": 24, "0rpddszuhfncuwnjxkosji": 24, "au": 24, "AT": 24, "BE": 24, "bo": 24, "bg": 24, "cl": 24, "cr": 24, "cy": 24, "cz": 24, "dk": 24, "ec": 24, "ee": 24, "sv": 24, "fi": 24, "fr": 24, "gr": 24, "gt": 24, "hn": 24, "hk": 24, "hu": 24, "ie": 24, "lv": 24, "lt": 24, "lu": 24, "mt": 24, "nl": 24, "nz": 24, "ni": 24, "NO": 24, "pa": 24, "py": 24, "pe": 24, "ph": 24, "pl": 24, "pt": 24, "sg": 24, "sk": 24, "ch": 24, "tw": 24, "tr": 24, "ui": 24, "gb": 24, "li": [24, 27], "mc": 24, "th": 24, "ro": 24, "il": 24, "za": 24, "sa": 24, "ae": 24, "bh": 24, "qa": 24, "om": 24, "kw": 24, "eg": 24, "tn": 24, "lb": 24, "jo": 24, "IN": 24, "BY": 24, "kz": 24, "md": 24, "ua": 24, "al": 24, "ba": 24, "hr": 24, "mk": 24, "si": 24, "kr": 24, "bd": 24, "pk": 24, "lk": 24, "gh": 24, "ke": 24, "ng": 24, "tz": 24, "ug": 24, "bb": 24, "bz": 24, "bt": 24, "bw": 24, "bf": 24, "cv": 24, "cw": 24, "dm": 24, "fj": 24, "gm": 24, "gd": 24, "gw": 24, "gy": 24, "ht": 24, "jm": 24, "ki": 24, "l": 24, "lr": 24, "mw": 24, "mv": 24, "ml": 24, "mh": 24, "fm": 24, "na": 24, "nr": 24, "ne": 24, "pw": 24, "pg": 24, "w": 24, "st": 24, "sn": 24, "sc": 24, "sl": 24, "sb": 24, "kn": 24, "lc": 24, "vc": 24, "sr": 24, "tl": 24, "TO": 24, "tt": 24, "az": 24, "bn": 24, "bi": 24, "kh": 24, "cm": 24, "td": 24, "km": 24, "gq": 24, "ga": 24, "gn": 24, "kg": 24, "la": 24, "mo": 24, "mr": 24, "mn": 24, "np": [24, 25], "rw": 24, "tg": 24, "uz": 24, "zw": 24, "bj": 24, "mg": 24, "mu": 24, "mz": 24, "ao": 24, "ci": 24, "dj": 24, "zm": 24, "cg": 24, "iq": 24, "tj": 24, "ve": 24, "xk": 24, "0urfz92jmjwdbzbb7hebir": 24, "ab67616d0000b2734a6c0376235e5aa44e59d2c2": 24, "300": 24, "ab67616d00001e024a6c0376235e5aa44e59d2c2": 24, "ab67616d000048514a6c0376235e5aa44e59d2c2": 24, "01": 24, "177280": 24, "usum71119189": 24, "2iumqdfgzchihs3b9e9ewq": 24, "81": [], "14492425": 24, "451": 24, "due": 24, "demand": 24, "right": [24, 27], "holder": 24, "prohibit": 24, "track_tidal_priv": 24, "177": 24, "999969": 24, "17t00": 24, "0000": 24, "55": 24, "mercuri": 24, "2011": 24, "umg": 24, "inc": 24, "stereo": 24, "3665225": 24, "e6f17398": 24, "759e": 24, "45a0": 24, "9673": 24, "6ded6811e199": 24, "14492422": 24, "1c2d7c90": 24, "034e": 24, "485a": 24, "be1f": 24, "24a669c7e6e": 24, "f8af88": 24, "0019768c833a193c29829e5bf473fc": 24, "we": [24, 25, 26, 27], "playlist_qobuz": 24, "ilfmuz10e7vfc_150": 24, "1701053442": [], "ilfmuz10e7vfc_300": 24, "1701053443": [], "18171379": [], "52": [], "3865979203": [], "playlist_spotifi": 24, "3vsxl8ftlyoqgewazcz5d": [], "primary_color": 24, "myw0ndk1ngnlmze0m2e1otbkmtg0otdkn2m4mgi1nmi3zji5ymmxytgz": [], "2023": [24, 25, 26, 27], "27t02": [], "45z": [], "video_thumbnail": 24, "playlist_tidal_priv": 24, "e9f6aff1": [], "f39e": [], "462b": [], "90c4": [], "41686877a555": [], "unrestrict": 24, "8e75fac4": [], "cf24": [], "45c8": [], "8bd2": [], "98ab69f7f74b": [], "eefe947a": [], "5cdb": [], "40ee": [], "8057": [], "213941ff48d5": [], "45": [], "504": [], "46": [], "085": [], "mutagen": 24, "common": 24, "test": [24, 25], "middle_c": 24, "notat": 24, "getattr": 24, "attr": 24, "print": [24, 25], "capit": [24, 25], "middl": 24, "squar": 24, "game": 24, "similarli": 24, "setattr": 24, "261": 24, "63": 24, "forget": [24, 25], "convers": [24, 25], "middle_c_alac": 24, "116kb": 24, "02": [], "930": [], "3kbit": [], "speed": [24, 25], "177x": [], "point": [24, 25], "novemb": [25, 26, 27], "glob": 25, "audio_fil": 25, "suffix": 25, "dive": 25, "def": 25, "print_metadata": 25, "__dict__": 25, "startswith": 25, "upper": 25, "els": 25, "below": [25, 27], "highlight": 25, "involv": 25, "spektrem_shin": 25, "0x7fb5cdaeb790": [], "let": 25, "spektrem": 25, "shine": 25, "count": 25, "1030107": 25, "44100": 25, "had": 25, "pull": 25, "At": 25, "yet": 25, "written": 25, "compat": 25, "1032kb": 25, "09": [], "280": [], "9kbit": 25, "68": 24, "5x": [], "With": 25, "280593": 25, "persist": 25, "typic": 25, "accur": 25, "good": 25, "idea": 25, "select": [25, 26, 27], "closest": 25, "choos": 25, "distanc": 25, "levenshtein_ratio": 25, "lower": 25, "itunes_result": 25, "itunes_track": 25, "argmax": 25, "itunes_album": 25, "2013": 25, "gfted": 25, "06t12": 25, "electron": 25, "fill": 25, "By": 25, "set_metadata_us": 25, "spotify_result": 25, "spotify_track": [25, 27], "gb2ld0901581": 25, "128": 25, "correct": [25, 27], "get_track_compo": 25, "tidal_result": 25, "tidal_track": [25, 27], "tidal_compos": 25, "tidal_lyr": 25, "did": 25, "sometim": [25, 27], "tobu_back_to_y": 25, "0x7fb6744afdd0": [], "tobu": 25, "tom": 25, "burkovski": 25, "nc": 25, "06t07": 25, "hous": [25, 26], "gb2ld2210368": 25, "1104053": 25, "poorli": 25, "miss": 25, "fix": 25, "three": 25, "25t12": 25, "98": 25, "voil\u00e0": 25, "twice": 25, "becaus": 25, "There": 25, "eleg": 25, "solut": 25, "problem": 25, "unfortun": [25, 27], "19": [26, 27], "help": 26, "discov": 26, "leverag": 26, "suggest": 26, "b64encod": 26, "random": 26, "ipython": 26, "html": 26, "ifram": 26, "ipywidget": 26, "gridspeclayout": 26, "sure": 26, "0jz9tvoltzjagqiyc4hyzx": 26, "avicii": 26, "0bmb3nzquhbfi6nm4setvu": 26, "cash": 26, "surrend": 26, "1pq8ywty9v2ivzwj7gyxxb": 26, "mako": 26, "our": 26, "70iflb5egla8wufwgxborz": 26, "william": 26, "fallin": 26, "6jspbxzld2yemjtjz2gqot": 26, "passion": 26, "pit": 26, "76b6ljxtolasgxlanjnndr": 26, "sick": 26, "individu": 26, "2v65y3px4dkrhy1djlxd9p": 26, "swedish": 26, "mafia": 26, "worri": 26, "child": 26, "feat": 26, "john": 26, "martin": 26, "1gpf8iwqqj8qoevjhfiidu": 26, "zedd": 26, "matthew": 26, "koma": 26, "miriam": 26, "bryant": 26, "randomli": 26, "recommended_track": 26, "k": 26, "spotify_playlist": [26, 27], "global": 26, "_dh": 26, "minim_mix_smal": 26, "rb": 26, "nifti": 26, "emb": 26, "grid": 26, "len": 26, "enumer": 26, "framebord": 26, "lazi": 26, "152": 26, "510": 26, "divmod": 26, "procedur": [26, 27], "51073951": 26, "62082351": 26, "32553484": 26, "147258423": 26, "109273852": 26, "237059212": 26, "17271290": 26, "27171015": 26, "similar_track": 26, "div": 26, "pad": 26, "bottom": 26, "overflow": 26, "hidden": 26, "max": 26, "src": 26, "layout": 26, "gridifi": 26, "allowfullscreen": 26, "absolut": 26, "left": 26, "1px": 26, "min": 26, "margin": 26, "auto": 26, "tunemymus": 27, "assum": 27, "destin": 27, "challeng": 27, "often": 27, "difficult": 27, "barebon": 27, "pair": 27, "fine": 27, "tune": 27, "complex": 27, "those": 27, "remix": 27, "qobuz_playlist_id": 27, "17865119": 27, "qobuz_playlist": 27, "new_spotify_playlist": 27, "equival": 27, "simpl": 27, "spotify_track_uri": 27, "qobuz_track": 27, "new_tidal_playlist": 27, "confirm": 27, "tidal_track_id": 27, "spotify_playlist_id": 27, "3rw9qy60ceh6dfjauwdxmh": 27, "new_qobuz_playlist": 27, "thankfulli": 27, "qobuz_track_id": 27, "tidal_playlist_uuid": 27, "40052e73": 27, "58d4": 27, "4abb": 27, "bc1c": 27, "abace76d2f15": 27, "tidal_playlist": 27, "tidal_playlist_item": 27, "qobuz_favorit": 27, "qobuz_favorite_album": 27, "qobuz_favorite_artist": 27, "align": 27, "spotify_album_id": 27, "qobuz_album": 27, "spotify_album": 27, "indexerror": 27, "break": 27, "follow_artist": 27, "spotify_artist_id": 27, "qobuz_artist": 27, "spotify_artist": 27, "tidal_album_id": 27, "tidal_album": 27, "lstrip": 27, "tidal_artist_id": 27, "tidal_artist": 27, "spotify_favorite_album": 27, "spotify_favorite_artist": 27, "qobuz_album_id": 27, "qobuz_artist_id": 27, "tidal_favorite_album": 27, "tidal_favorite_artist": 27, "gestalt": 21, "ratcliff": 21, "obershelp": 21, "keyerror": [], "traceback": [], "cell": [], "mnt": [], "benjamin": [], "700": [], "__init__": [], "self": [], "693": [], "config": [], "_name": [], "fallback": [], "695": [], "696": [], "697": [], "698": [], "699": [], "701": [], "1036": [], "1029": [], "_expiri": [], "1030": [], "strptime": [], "1031": [], "isinst": [], "1032": [], "1034": [], "_flow": [], "1035": [], "_sp_dc": [], "_user_id": [], "9108": [], "9054": [], "9055": [], "9056": [], "9103": [], "9104": [], "9106": [], "_check_scop": [], "_get_json": [], "843": [], "823": [], "825": [], "826": [], "827": [], "respons": [], "840": [], "841": [], "_request": [], "912": [], "retri": [], "887": [], "888": [], "construct": [], "889": [], "908": [], "909": [], "911": [], "_refresh_access_token": [], "914": [], "915": [], "299": [], "867": [], "855": [], "client_b64": [], "urlsafe_b64encod": [], "856": [], "_client_id": [], "_client_secret": [], "857": [], "decod": [], "858": [], "859": [], "860": [], "864": [], "basic": [], "865": [], "bearer": [], "868": [], "_refresh_token": [], "869": [], "870": [], "timedelta": [], "expires_in": [], "126": 24, "3375748": [], "350172836": [], "1443469527": [], "1443469581": [], "audiopreview122": [], "5c": [], "5c29bf6b": [], "ca2c": [], "4e8b": [], "2be6": [], "c51a282c7da": [], "mzaf_1255557534804450018": [], "e3": [], "80e39565": [], "35f9": [], "2496": [], "c6f8": [], "6572490c4a7b": [], "12umgim12509": [], "rgb": [], "19t12": [], "contentadvisoryr": [], "justin": [], "meldal": [], "johnsen": [], "guitar": [], "keyboard": [], "percuss": [], "programm": [], "associatedperform": [], "tim": [], "pagnotta": [], "greg": [], "collin": [], "studiopersonnel": [], "weslei": [], "seidman": [], "asst": [], "tyler": [], "glenn": [], "matt": [], "wigger": [], "bill": [], "bush": [], "470727": [], "42": [], "54": [], "0060252795442_230": [], "0060252795442_50": [], "0060252795442_600": [], "0060252795442": [], "1325372400": [], "17487": [], "774": [], "5653617": [], "2785": [], "112": [], "119": [], "113": [], "indi": [], "alternatif": [], "et": [], "ind": [], "1683529200": [], "583118": [], "5653620": [], "1683702000": [], "0060252795442_150": [], "1699766986": [], "0060252795442_300": [], "1699766987": [], "17864724": [], "31": [], "3775088385": [], "193pq0l1m0ykfekbrb4c1v": [], "myxhzgzkzdk4m2m0ogy2zwvmytuxyweymjawm2mzmde5nze5ndq4ode0": [], "12t05": [], "49z": [], "771dc2db": [], "c763": [], "4e71": [], "9c87": [], "f5d82bfa4153": [], "9412a3c1": [], "7d10": [], "40b3": [], "b9b4": [], "96f0791dee9c": [], "74d8c599": [], "cfbd": [], "464f": [], "8e70": [], "80d51a6482bd": [], "155": 24, "740": [], "161x": [], "0x7f126c60b150": [], "0kb": [24, 25], "1891": 25, "2kbit": 25, "813x": [], "256kb": 25, "89": 25, "150": 25, "768kb": 25, "28": 25, "222": [], "1x": 25, "281": 25, "1kbit": 25, "28x": [], "attributeerror": [], "8": [], "0x7efd3873e650": [], "3363420": 24, "112115157": 24, "583394431": 24, "583394802": 24, "workout": 24, "35": 24, "unmix": 24, "gym": 24, "jog": 24, "run": 24, "cycl": 24, "cardio": 24, "fit": 24, "audiopreview115": 24, "c4": 24, "8d": 24, "c4fc8d9a": 24, "0b75": 24, "55fb": 24, "6413": 24, "6bdbf7d17e65": 24, "mzaf_7998633680287936907": 24, "music114": 24, "b4": 24, "a7": 24, "dc": 24, "b4a7dc27": 24, "6fcd": 24, "22ba": 24, "c9a6": 24, "564166a4c43d": 24, "35tophitswom3_2400": 24, "03t12": 24, "34": 24, "179055": 24, "79": 24, "1703541258": [], "1703541259": [], "18794965": [], "4056401760": [], "0nnctudbv2hxvrsbtw9uvd": [], "miwyywm2ywywymm2otmzmjfiogu1mdi5odjmzwrlndgwn2y5zjazzjyi": [], "25t21": 24, "21z": [], "4d1dc535": [], "556c": [], "4368": [], "a6cc": [], "2fa0e373e4da": [], "af52f4df": [], "06f8": [], "40ad": [], "9ebd": [], "4ad993523c39": [], "7b203db1": [], "e8f4": [], "4fbc": [], "a87f": [], "a5032bcdcbd7": [], "21": 25, "876": [], "633": [], "577014": 24, "32": 24, "77": 24, "0kbit": [24, 25], "92": 24, "1023": 24, "4kbit": 24, "163x": [], "0x7fb2b0648090": [], "652x": [], "83": [], "141": [], "6x": 25, "1024kb": [], "279": [], "7kbit": [], "1703541385": [], "1703541386": [], "18794976": [], "4056413118": [], "3r7m5jqsbyhqraljwmxop5": [], "miwymjgwzmy1ngnhnmeymdcynme4oda0nwfkmmmwzdvjyzjimdq5odc0": [], "56": [], "28z": [], "999521e8": [], "cc89": [], "40e2": [], "b5e4": [], "feef8fc55e2b": [], "9e9beafc": [], "fe9e": [], "41b5": [], "a3e2": [], "2165c7eb9ea5": [], "7be303ac": [], "90c3": [], "461a": [], "9e9c": [], "29b2e9737a93": [], "025": [], "411": [], "143x": [], "0x7f2a63fc6090": [], "773x": [], "146": [], "5kbit": [], "4x": [], "58": [], "228": [], "2x": [], "0x7f2a63fc5150": [], "1703541443": 24, "1703541444": 24, "18794997": 24, "4056419200": 24, "6lsdixcynk4tviweun0r2x": 24, "miw1zdi0njy3zjzkoddkndm0mjcwyjnkywe4ntk2m2mwymm4nti4yjy4": 24, "25z": 24, "f7db0333": 24, "9032": 24, "4410": 24, "8092": 24, "33e2fd57a9a0": 24, "dd039132": 24, "45a2": 24, "a7cc": 24, "0c5a6de9b202": 24, "c951760e": 24, "df32": 24, "469e": 24, "9022": 24, "a0f96adbbd51": 24, "26": 24, "548": 24, "131": 24, "158x": 24, "0x7fa51e606090": 25, "746x": 25, "223": 25, "0x7fa5e9463ed0": 25}, "objects": {"": [[1, 0, 0, "-", "minim"]], "minim": [[2, 0, 0, "-", "audio"], [9, 0, 0, "-", "itunes"], [11, 0, 0, "-", "qobuz"], [13, 0, 0, "-", "spotify"], [16, 0, 0, "-", "tidal"], [19, 0, 0, "-", "utility"]], "minim.audio": [[3, 1, 1, "", "Audio"], [4, 1, 1, "", "FLACAudio"], [5, 1, 1, "", "MP3Audio"], [6, 1, 1, "", "MP4Audio"], [7, 1, 1, "", "OggAudio"], [8, 1, 1, "", "WAVEAudio"]], "minim.audio.Audio": [[3, 2, 1, "", "convert"], [3, 2, 1, "", "set_metadata_using_itunes"], [3, 2, 1, "", "set_metadata_using_qobuz"], [3, 2, 1, "", "set_metadata_using_spotify"], [3, 2, 1, "", "set_metadata_using_tidal"]], "minim.audio.FLACAudio": [[4, 2, 1, "", "convert"], [4, 2, 1, "", "set_metadata_using_itunes"], [4, 2, 1, "", "set_metadata_using_qobuz"], [4, 2, 1, "", "set_metadata_using_spotify"], [4, 2, 1, "", "set_metadata_using_tidal"], [4, 2, 1, "", "write_metadata"]], "minim.audio.MP3Audio": [[5, 2, 1, "", "convert"], [5, 2, 1, "", "set_metadata_using_itunes"], [5, 2, 1, "", "set_metadata_using_qobuz"], [5, 2, 1, "", "set_metadata_using_spotify"], [5, 2, 1, "", "set_metadata_using_tidal"], [5, 2, 1, "", "write_metadata"]], "minim.audio.MP4Audio": [[6, 2, 1, "", "convert"], [6, 2, 1, "", "set_metadata_using_itunes"], [6, 2, 1, "", "set_metadata_using_qobuz"], [6, 2, 1, "", "set_metadata_using_spotify"], [6, 2, 1, "", "set_metadata_using_tidal"], [6, 2, 1, "", "write_metadata"]], "minim.audio.OggAudio": [[7, 2, 1, "", "convert"], [7, 2, 1, "", "set_metadata_using_itunes"], [7, 2, 1, "", "set_metadata_using_qobuz"], [7, 2, 1, "", "set_metadata_using_spotify"], [7, 2, 1, "", "set_metadata_using_tidal"], [7, 2, 1, "", "write_metadata"]], "minim.audio.WAVEAudio": [[8, 2, 1, "", "convert"], [8, 2, 1, "", "set_metadata_using_itunes"], [8, 2, 1, "", "set_metadata_using_qobuz"], [8, 2, 1, "", "set_metadata_using_spotify"], [8, 2, 1, "", "set_metadata_using_tidal"], [8, 2, 1, "", "write_metadata"]], "minim.itunes": [[10, 1, 1, "", "SearchAPI"]], "minim.itunes.SearchAPI": [[10, 2, 1, "", "lookup"], [10, 2, 1, "", "search"]], "minim.qobuz": [[12, 1, 1, "", "PrivateAPI"]], "minim.qobuz.PrivateAPI": [[12, 2, 1, "", "add_playlist_tracks"], [12, 2, 1, "", "create_playlist"], [12, 2, 1, "", "delete_playlist"], [12, 2, 1, "", "delete_playlist_tracks"], [12, 2, 1, "", "favorite_items"], [12, 2, 1, "", "favorite_playlist"], [12, 2, 1, "", "get_album"], [12, 2, 1, "", "get_artist"], [12, 2, 1, "", "get_collection_streams"], [12, 2, 1, "", "get_curated_tracks"], [12, 2, 1, "", "get_favorites"], [12, 2, 1, "", "get_featured_albums"], [12, 2, 1, "", "get_featured_playlists"], [12, 2, 1, "", "get_label"], [12, 2, 1, "", "get_playlist"], [12, 2, 1, "", "get_profile"], [12, 2, 1, "", "get_purchases"], [12, 2, 1, "", "get_track"], [12, 2, 1, "", "get_track_file_url"], [12, 2, 1, "", "get_track_performers"], [12, 2, 1, "", "get_track_stream"], [12, 2, 1, "", "get_user_playlists"], [12, 2, 1, "", "move_playlist_tracks"], [12, 2, 1, "", "search"], [12, 2, 1, "", "set_auth_token"], [12, 2, 1, "", "set_flow"], [12, 2, 1, "", "unfavorite_items"], [12, 2, 1, "", "unfavorite_playlist"], [12, 2, 1, "", "update_playlist"], [12, 2, 1, "", "update_playlist_position"]], "minim.spotify": [[14, 1, 1, "", "PrivateLyricsService"], [15, 1, 1, "", "WebAPI"]], "minim.spotify.PrivateLyricsService": [[14, 2, 1, "", "get_lyrics"], [14, 2, 1, "", "set_access_token"], [14, 2, 1, "", "set_sp_dc"]], "minim.spotify.WebAPI": [[15, 2, 1, "", "add_playlist_cover_image"], [15, 2, 1, "", "add_playlist_items"], [15, 2, 1, "", "add_to_queue"], [15, 2, 1, "", "change_playlist_details"], [15, 2, 1, "", "check_followed_people"], [15, 2, 1, "", "check_playlist_followers"], [15, 2, 1, "", "check_saved_albums"], [15, 2, 1, "", "check_saved_audiobooks"], [15, 2, 1, "", "check_saved_episodes"], [15, 2, 1, "", "check_saved_shows"], [15, 2, 1, "", "check_saved_tracks"], [15, 2, 1, "", "create_playlist"], [15, 2, 1, "", "follow_people"], [15, 2, 1, "", "follow_playlist"], [15, 2, 1, "", "get_album"], [15, 2, 1, "", "get_album_tracks"], [15, 2, 1, "", "get_albums"], [15, 2, 1, "", "get_artist"], [15, 2, 1, "", "get_artist_albums"], [15, 2, 1, "", "get_artist_top_tracks"], [15, 2, 1, "", "get_artists"], [15, 2, 1, "", "get_audiobook"], [15, 2, 1, "", "get_audiobook_chapters"], [15, 2, 1, "", "get_audiobooks"], [15, 2, 1, "", "get_categories"], [15, 2, 1, "", "get_category"], [15, 2, 1, "", "get_category_playlists"], [15, 2, 1, "", "get_chapter"], [15, 2, 1, "", "get_chapters"], [15, 2, 1, "", "get_currently_playing"], [15, 2, 1, "", "get_devices"], [15, 2, 1, "", "get_episode"], [15, 2, 1, "", "get_episodes"], [15, 2, 1, "", "get_featured_playlists"], [15, 2, 1, "", "get_followed_artists"], [15, 2, 1, "", "get_genre_seeds"], [15, 2, 1, "", "get_markets"], [15, 2, 1, "", "get_new_albums"], [15, 2, 1, "", "get_playback_state"], [15, 2, 1, "", "get_playlist"], [15, 2, 1, "", "get_playlist_cover_image"], [15, 2, 1, "", "get_playlist_items"], [15, 2, 1, "", "get_playlists"], [15, 2, 1, "", "get_profile"], [15, 2, 1, "", "get_queue"], [15, 2, 1, "", "get_recently_played"], [15, 2, 1, "", "get_recommendations"], [15, 2, 1, "", "get_related_artists"], [15, 2, 1, "", "get_saved_albums"], [15, 2, 1, "", "get_saved_audiobooks"], [15, 2, 1, "", "get_saved_episodes"], [15, 2, 1, "", "get_saved_shows"], [15, 2, 1, "", "get_saved_tracks"], [15, 2, 1, "", "get_scopes"], [15, 2, 1, "", "get_show"], [15, 2, 1, "", "get_show_episodes"], [15, 2, 1, "", "get_shows"], [15, 2, 1, "", "get_top_items"], [15, 2, 1, "", "get_track"], [15, 2, 1, "", "get_track_audio_analysis"], [15, 2, 1, "", "get_track_audio_features"], [15, 2, 1, "", "get_tracks"], [15, 2, 1, "", "get_tracks_audio_features"], [15, 2, 1, "", "get_user_playlists"], [15, 2, 1, "", "get_user_profile"], [15, 2, 1, "", "pause_playback"], [15, 2, 1, "", "remove_playlist_items"], [15, 2, 1, "", "remove_saved_albums"], [15, 2, 1, "", "remove_saved_audiobooks"], [15, 2, 1, "", "remove_saved_episodes"], [15, 2, 1, "", "remove_saved_shows"], [15, 2, 1, "", "remove_saved_tracks"], [15, 2, 1, "", "save_albums"], [15, 2, 1, "", "save_audiobooks"], [15, 2, 1, "", "save_episodes"], [15, 2, 1, "", "save_shows"], [15, 2, 1, "", "save_tracks"], [15, 2, 1, "", "search"], [15, 2, 1, "", "seek_to_position"], [15, 2, 1, "", "set_access_token"], [15, 2, 1, "", "set_flow"], [15, 2, 1, "", "set_playback_volume"], [15, 2, 1, "", "set_repeat_mode"], [15, 2, 1, "", "skip_to_next"], [15, 2, 1, "", "skip_to_previous"], [15, 2, 1, "", "start_playback"], [15, 2, 1, "", "toggle_playback_shuffle"], [15, 2, 1, "", "transfer_playback"], [15, 2, 1, "", "unfollow_people"], [15, 2, 1, "", "unfollow_playlist"], [15, 2, 1, "", "update_playlist_items"]], "minim.tidal": [[17, 1, 1, "", "API"], [18, 1, 1, "", "PrivateAPI"]], "minim.tidal.API": [[17, 2, 1, "", "get_album"], [17, 2, 1, "", "get_album_by_barcode_id"], [17, 2, 1, "", "get_album_items"], [17, 2, 1, "", "get_albums"], [17, 2, 1, "", "get_artist"], [17, 2, 1, "", "get_artist_albums"], [17, 2, 1, "", "get_artists"], [17, 2, 1, "", "get_similar_albums"], [17, 2, 1, "", "get_similar_artists"], [17, 2, 1, "", "get_similar_tracks"], [17, 2, 1, "", "get_track"], [17, 2, 1, "", "get_track_by_isrc"], [17, 2, 1, "", "get_tracks"], [17, 2, 1, "", "get_video"], [17, 2, 1, "", "get_videos"], [17, 2, 1, "", "search"], [17, 2, 1, "", "set_access_token"], [17, 2, 1, "", "set_flow"]], "minim.tidal.PrivateAPI": [[18, 2, 1, "", "add_playlist_items"], [18, 2, 1, "", "block_artist"], [18, 2, 1, "", "block_user"], [18, 2, 1, "", "create_playlist"], [18, 2, 1, "", "create_playlist_folder"], [18, 2, 1, "", "delete_playlist"], [18, 2, 1, "", "delete_playlist_folder"], [18, 2, 1, "", "delete_playlist_item"], [18, 2, 1, "", "favorite_albums"], [18, 2, 1, "", "favorite_artists"], [18, 2, 1, "", "favorite_mixes"], [18, 2, 1, "", "favorite_playlists"], [18, 2, 1, "", "favorite_tracks"], [18, 2, 1, "", "favorite_videos"], [18, 2, 1, "", "follow_user"], [18, 2, 1, "", "get_album"], [18, 2, 1, "", "get_album_credits"], [18, 2, 1, "", "get_album_items"], [18, 2, 1, "", "get_album_page"], [18, 2, 1, "", "get_album_review"], [18, 2, 1, "", "get_artist"], [18, 2, 1, "", "get_artist_albums"], [18, 2, 1, "", "get_artist_biography"], [18, 2, 1, "", "get_artist_links"], [18, 2, 1, "", "get_artist_mix_id"], [18, 2, 1, "", "get_artist_page"], [18, 2, 1, "", "get_artist_radio"], [18, 2, 1, "", "get_artist_top_tracks"], [18, 2, 1, "", "get_artist_videos"], [18, 2, 1, "", "get_blocked_artists"], [18, 2, 1, "", "get_blocked_users"], [18, 2, 1, "", "get_collection_streams"], [18, 2, 1, "", "get_country_code"], [18, 2, 1, "", "get_favorite_albums"], [18, 2, 1, "", "get_favorite_artists"], [18, 2, 1, "", "get_favorite_ids"], [18, 2, 1, "", "get_favorite_mixes"], [18, 2, 1, "", "get_favorite_tracks"], [18, 2, 1, "", "get_favorite_videos"], [18, 2, 1, "", "get_image"], [18, 2, 1, "", "get_mix_items"], [18, 2, 1, "", "get_mix_page"], [18, 2, 1, "", "get_personal_playlist_folders"], [18, 2, 1, "", "get_personal_playlists"], [18, 2, 1, "", "get_playlist"], [18, 2, 1, "", "get_playlist_etag"], [18, 2, 1, "", "get_playlist_items"], [18, 2, 1, "", "get_playlist_recommendations"], [18, 2, 1, "", "get_profile"], [18, 2, 1, "", "get_session"], [18, 2, 1, "", "get_similar_albums"], [18, 2, 1, "", "get_similar_artists"], [18, 2, 1, "", "get_track"], [18, 2, 1, "", "get_track_composers"], [18, 2, 1, "", "get_track_contributors"], [18, 2, 1, "", "get_track_credits"], [18, 2, 1, "", "get_track_lyrics"], [18, 2, 1, "", "get_track_mix_id"], [18, 2, 1, "", "get_track_playback_info"], [18, 2, 1, "", "get_track_recommendations"], [18, 2, 1, "", "get_track_stream"], [18, 2, 1, "", "get_user_followers"], [18, 2, 1, "", "get_user_following"], [18, 2, 1, "", "get_user_playlist"], [18, 2, 1, "", "get_user_playlists"], [18, 2, 1, "", "get_user_profile"], [18, 2, 1, "", "get_video"], [18, 2, 1, "", "get_video_page"], [18, 2, 1, "", "get_video_playback_info"], [18, 2, 1, "", "get_video_stream"], [18, 2, 1, "", "move_playlist"], [18, 2, 1, "", "move_playlist_item"], [18, 2, 1, "", "search"], [18, 2, 1, "", "set_access_token"], [18, 2, 1, "", "set_flow"], [18, 2, 1, "", "set_playlist_privacy"], [18, 2, 1, "", "unblock_artist"], [18, 2, 1, "", "unblock_user"], [18, 2, 1, "", "unfavorite_albums"], [18, 2, 1, "", "unfavorite_artists"], [18, 2, 1, "", "unfavorite_mixes"], [18, 2, 1, "", "unfavorite_playlist"], [18, 2, 1, "", "unfavorite_tracks"], [18, 2, 1, "", "unfavorite_videos"], [18, 2, 1, "", "unfollow_user"], [18, 2, 1, "", "update_playlist"]], "minim.utility": [[20, 3, 1, "", "format_multivalue"], [21, 3, 1, "", "gestalt_ratio"], [22, 3, 1, "", "levenshtein_ratio"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "function", "Python function"]}, "titleterms": {"minim": [1, 23, 24], "audio": [2, 3, 24, 25], "file": [2, 24, 25], "object": 2, "softwar": [3, 4, 5, 6, 7, 8], "depend": [3, 4, 5, 6, 7, 8], "flacaudio": 4, "mp3audio": 5, "mp4audio": 6, "oggaudio": 7, "waveaudio": 8, "itun": [9, 24], "searchapi": [10, 24], "qobuz": [11, 24, 27], "privateapi": [12, 18, 24], "sampl": [12, 14, 15, 17, 18], "respons": [12, 14, 15, 17, 18], "user": [12, 18, 28], "authent": [12, 18], "subscript": [12, 18], "spotifi": [13, 24, 26, 27], "privatelyricsservic": [14, 24], "webapi": [15, 24], "author": [15, 18], "scope": [15, 18], "tidal": [16, 24, 26, 27], "api": [17, 24, 25], "util": 19, "function": [19, 25], "levenshtein_ratio": 22, "multivalue_formatt": [], "get": [24, 26], "start": 24, "instal": 24, "usag": 24, "music": [24, 27], "servic": 24, "search": 24, "privat": 24, "lyric": 24, "web": 24, "exampl": 24, "artist": 24, "track": 24, "creat": 24, "modifi": 24, "delet": 24, "person": 24, "playlist": [24, 27], "handler": 24, "load": 24, "edit": [24, 25], "convert": [24, 25], "between": 24, "format": 24, "metadata": 25, "setup": 25, "instanti": 25, "client": 25, "find": 25, "defin": 25, "helper": 25, "tag": 25, "an": 25, "exist": 25, "recommend": 26, "transfer": 27, "librari": 27, "prerequisit": 27, "move": 27, "from": 27, "To": 27, "synchron": 27, "favorit": 27, "guid": 28, "format_multivalu": 20, "gestalt_ratio": 21}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"gestalt_ratio": [[21, "gestalt-ratio"]], "levenshtein_ratio": [[22, "levenshtein-ratio"]], "minim": [[1, "module-minim"]], "audio": [[2, "module-minim.audio"]], "Audio file objects": [[2, "audio-file-objects"]], "qobuz": [[11, "module-minim.qobuz"]], "Qobuz": [[11, "id1"]], "SearchAPI": [[10, "searchapi"]], "itunes": [[9, "module-minim.itunes"]], "iTunes": [[9, "id1"]], "Audio": [[3, "audio"]], "Software dependency": [[3, null], [5, null], [4, null], [7, null], [8, null], [6, null]], "MP3Audio": [[5, "mp3audio"]], "FLACAudio": [[4, "flacaudio"]], "OggAudio": [[7, "oggaudio"]], "WAVEAudio": [[8, "waveaudio"]], "MP4Audio": [[6, "mp4audio"]], "PrivateLyricsService": [[14, "privatelyricsservice"]], "Sample response": [[14, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [17, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null]], "spotify": [[13, "module-minim.spotify"]], "Spotify": [[13, "id1"], [26, "spotify"]], "PrivateAPI": [[12, "privateapi"], [18, "privateapi"]], "User authentication": [[12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [12, null], [18, null]], "Subscription": [[12, null], [12, null], [12, null]], "format_multivalue": [[20, "format-multivalue"]], "Authorization scope": [[18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null], [15, null]], "User authentication and authorization scope": [[18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null], [18, null]], "User authentication, authorization scope, and\n subscription": [[18, null], [18, null], [18, null], [18, null], [18, null]], "User authentication and subscription": [[18, null]], "utility": [[19, "module-minim.utility"]], "Utility functions": [[19, "utility-functions"]], "API": [[17, "api"]], "WebAPI": [[15, "webapi"]], "Sample": [[15, null], [15, null], [15, null], [15, null], [15, null], [15, null]], "tidal": [[16, "module-minim.tidal"]], "TIDAL": [[16, "id1"], [26, "tidal"]], "Minim": [[23, "minim"]], "Getting Started": [[24, "getting-started"]], "Installation": [[24, "installation"]], "Usage": [[24, "usage"]], "Music service APIs": [[24, "music-service-apis"]], "iTunes Search API (minim.itunes.SearchAPI)": [[24, "itunes-search-api-minim-itunes-searchapi"]], "Private Qobuz API (minim.qobuz.PrivateAPI)": [[24, "private-qobuz-api-minim-qobuz-privateapi"]], "Private Spotify Lyrics Service (minim.spotify.PrivateLyricsService)": [[24, "private-spotify-lyrics-service-minim-spotify-privatelyricsservice"]], "Spotify Web API (minim.spotify.WebAPI)": [[24, "spotify-web-api-minim-spotify-webapi"]], "TIDAL API (minim.tidal.API)": [[24, "tidal-api-minim-tidal-api"]], "Private TIDAL API (minim.tidal.PrivateAPI)": [[24, "private-tidal-api-minim-tidal-privateapi"]], "Examples": [[24, "examples"], [24, "id9"]], "Searching for artists": [[24, "searching-for-artists"]], "iTunes Search API": [[24, "itunes-search-api"], [24, "id1"]], "Private Qobuz API": [[24, "private-qobuz-api"], [24, "id2"], [24, "id6"]], "Spotify Web API": [[24, "spotify-web-api"], [24, "id3"], [24, "id7"]], "TIDAL API": [[24, "tidal-api"], [24, "id4"]], "Private TIDAL API": [[24, "private-tidal-api"], [24, "id5"], [24, "id8"]], "Searching for tracks": [[24, "searching-for-tracks"]], "Creating, modifying, and deleting a personal playlist": [[24, "creating-modifying-and-deleting-a-personal-playlist"]], "Audio file handlers": [[24, "audio-file-handlers"]], "Loading and editing audio files": [[24, "loading-and-editing-audio-files"]], "Converting between audio formats": [[24, "converting-between-audio-formats"]], "Getting Recommendations": [[26, "getting-recommendations"]], "Editing Audio Metadata": [[25, "editing-audio-metadata"]], "Setup": [[25, "setup"]], "Instantiating API clients": [[25, "instantiating-api-clients"]], "Finding audio files": [[25, "finding-audio-files"]], "Defining helper functions": [[25, "defining-helper-functions"]], "Converting and tagging an audio file with no metadata": [[25, "converting-and-tagging-an-audio-file-with-no-metadata"]], "Tagging an audio file with existing metadata": [[25, "tagging-an-audio-file-with-existing-metadata"]], "Transferring Music Libraries": [[27, "transferring-music-libraries"]], "Prerequisites": [[27, "prerequisites"]], "Moving playlists": [[27, "moving-playlists"]], "From Qobuz": [[27, "from-qobuz"], [27, "id4"]], "To Spotify": [[27, "to-spotify"], [27, "id3"], [27, "id5"], [27, "id12"]], "To TIDAL": [[27, "to-tidal"], [27, "id1"], [27, "id6"], [27, "id9"]], "From Spotify": [[27, "from-spotify"], [27, "id7"]], "To Qobuz": [[27, "to-qobuz"], [27, "id2"], [27, "id8"], [27, "id11"]], "From TIDAL": [[27, "from-tidal"], [27, "id10"]], "Synchronizing favorites": [[27, "synchronizing-favorites"]], "User Guide": [[28, "user-guide"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/docs/source/api/minim.utility.format_multivalue.rst b/docs/source/api/minim.utility.format_multivalue.rst new file mode 100644 index 0000000..d8c7901 --- /dev/null +++ b/docs/source/api/minim.utility.format_multivalue.rst @@ -0,0 +1,6 @@ +format\_multivalue +================== + +.. currentmodule:: minim.utility + +.. autofunction:: format_multivalue \ No newline at end of file diff --git a/docs/source/api/minim.utility.gestalt_ratio.rst b/docs/source/api/minim.utility.gestalt_ratio.rst new file mode 100644 index 0000000..4611a99 --- /dev/null +++ b/docs/source/api/minim.utility.gestalt_ratio.rst @@ -0,0 +1,6 @@ +gestalt\_ratio +============== + +.. currentmodule:: minim.utility + +.. autofunction:: gestalt_ratio \ No newline at end of file diff --git a/docs/source/api/minim.utility.multivalue_formatter.rst b/docs/source/api/minim.utility.multivalue_formatter.rst deleted file mode 100644 index 62bbc35..0000000 --- a/docs/source/api/minim.utility.multivalue_formatter.rst +++ /dev/null @@ -1,6 +0,0 @@ -multivalue\_formatter -===================== - -.. currentmodule:: minim.utility - -.. autofunction:: multivalue_formatter \ No newline at end of file diff --git a/docs/source/api/minim.utility.rst b/docs/source/api/minim.utility.rst index 1247157..da455d2 100644 --- a/docs/source/api/minim.utility.rst +++ b/docs/source/api/minim.utility.rst @@ -1,4 +1,4 @@ -utility +utility ======= .. automodule:: minim.utility @@ -15,8 +15,9 @@ utility :toctree: :nosignatures: + format_multivalue + gestalt_ratio levenshtein_ratio - multivalue_formatter diff --git a/docs/user_guide.html b/docs/user_guide.html index b22bacc..c5199e3 100644 --- a/docs/user_guide.html +++ b/docs/user_guide.html @@ -9,7 +9,7 @@ User Guide - Minim 1.0.0 documentation - + @@ -197,8 +197,9 @@
  • utility
  • diff --git a/src/minim/audio.py b/src/minim/audio.py index 904334c..bd2e3bc 100644 --- a/src/minim/audio.py +++ b/src/minim/audio.py @@ -397,9 +397,9 @@ class Audio: * :code:`("(.*) - (.*)", ("artist", "title"))` matches filenames like "Taylor Swift - Cruel Summer.flac". - * :code:`("(\d*) - (.*)", ("track_number", "title"))` matches + * :code:`("(\\d*) - (.*)", ("track_number", "title"))` matches filenames like "04 - The Man.m4a". - * :code:`("(\d*) (.*)", ("track_number", "title"))` matches + * :code:`("(\\d*) (.*)", ("track_number", "title"))` matches filenames like "13 You Need to Calm Down.mp3". multivalue : `bool` @@ -1189,9 +1189,9 @@ class FLACAudio(Audio, _VorbisComment): * :code:`("(.*) - (.*)", ("artist", "title"))` matches filenames like "Taylor Swift - Fearless.flac". - * :code:`("(\d*) - (.*)", ("track_number", "title"))` matches + * :code:`("(\\d*) - (.*)", ("track_number", "title"))` matches filenames like "03 - Love Story.flac". - * :code:`("(\d*) (.*)", ("track_number", "title"))` matches + * :code:`("(\\d*) (.*)", ("track_number", "title"))` matches filenames like "06 You Belong with Me.flac". multivalue : `bool` @@ -1266,9 +1266,9 @@ class MP3Audio(Audio, _ID3): * :code:`("(.*) - (.*)", ("artist", "title"))` matches filenames like "Taylor Swift - Red.mp3". - * :code:`("(\d*) - (.*)", ("track_number", "title"))` matches + * :code:`("(\\d*) - (.*)", ("track_number", "title"))` matches filenames like "04 - I Knew You Were Trouble.mp3". - * :code:`("(\d*) (.*)", ("track_number", "title"))` matches + * :code:`("(\\d*) (.*)", ("track_number", "title"))` matches filenames like "06 22.mp3". multivalue : `bool` @@ -1342,9 +1342,9 @@ class MP4Audio(Audio): * :code:`("(.*) - (.*)", ("artist", "title"))` matches filenames like "Taylor Swift - Mine.m4a". - * :code:`("(\d*) - (.*)", ("track_number", "title"))` matches + * :code:`("(\\d*) - (.*)", ("track_number", "title"))` matches filenames like "04 - Speak Now.m4a". - * :code:`("(\d*) (.*)", ("track_number", "title"))` matches + * :code:`("(\\d*) (.*)", ("track_number", "title"))` matches filenames like "07 The Story of Us.m4a". multivalue : `bool` @@ -1542,9 +1542,9 @@ class OggAudio(Audio, _VorbisComment): * :code:`("(.*) - (.*)", ("artist", "title"))` matches filenames like "Taylor Swift - Blank Space.ogg". - * :code:`("(\d*) - (.*)", ("track_number", "title"))` matches + * :code:`("(\\d*) - (.*)", ("track_number", "title"))` matches filenames like "03 - Style.ogg". - * :code:`("(\d*) (.*)", ("track_number", "title"))` matches + * :code:`("(\\d*) (.*)", ("track_number", "title"))` matches filenames like "06 Shake It Off.ogg". multivalue : `bool` @@ -1637,9 +1637,9 @@ class WAVEAudio(Audio, _ID3): * :code:`("(.*) - (.*)", ("artist", "title"))` matches filenames like "Taylor Swift - Don't Blame Me.wav". - * :code:`("(\d*) - (.*)", ("track_number", "title"))` matches + * :code:`("(\\d*) - (.*)", ("track_number", "title"))` matches filenames like "05 - Delicate.wav". - * :code:`("(\d*) (.*)", ("track_number", "title"))` matches + * :code:`("(\\d*) (.*)", ("track_number", "title"))` matches filenames like "06 Look What You Made Me Do.wav". multivalue : `bool` diff --git a/src/minim/utility.py b/src/minim/utility.py index 11a6086..de83ec7 100644 --- a/src/minim/utility.py +++ b/src/minim/utility.py @@ -70,7 +70,7 @@ def format_multivalue( return [value] return value -def gestalt_ratios( +def gestalt_ratio( reference: str, strings: Union[str, list[str]] ) -> Union[float, list[float], "np.ndarray[float]"]: @@ -102,7 +102,7 @@ def gestalt_ratios( return np.fromiter(gen, dtype=float, count=len(strings)) return list(gen) -def levenshtein_ratios( +def levenshtein_ratio( reference: str, strings: Union[str, list[str]] ) -> Union[float, list[float], "np.ndarray[float]"]: diff --git a/tests/data/samples/middle_c.flac b/tests/data/samples/middle_c.flac index 4ed952d..ad24392 100644 Binary files a/tests/data/samples/middle_c.flac and b/tests/data/samples/middle_c.flac differ diff --git a/tests/data/samples/middle_c.mp3 b/tests/data/samples/middle_c.mp3 index 823ea95..b90450e 100644 Binary files a/tests/data/samples/middle_c.mp3 and b/tests/data/samples/middle_c.mp3 differ diff --git a/tests/data/samples/middle_c_16bit.wav b/tests/data/samples/middle_c_16bit.wav index d9a127f..1cd39d6 100644 Binary files a/tests/data/samples/middle_c_16bit.wav and b/tests/data/samples/middle_c_16bit.wav differ diff --git a/tests/data/samples/middle_c_aac.m4a b/tests/data/samples/middle_c_aac.m4a index 5890612..b4a3b41 100644 Binary files a/tests/data/samples/middle_c_aac.m4a and b/tests/data/samples/middle_c_aac.m4a differ diff --git a/tests/data/samples/middle_c_alac.m4a b/tests/data/samples/middle_c_alac.m4a index b6e34cf..2ef1e32 100644 Binary files a/tests/data/samples/middle_c_alac.m4a and b/tests/data/samples/middle_c_alac.m4a differ diff --git a/tests/data/samples/middle_c_flac.ogg b/tests/data/samples/middle_c_flac.ogg index f96f127..2f78b49 100644 Binary files a/tests/data/samples/middle_c_flac.ogg and b/tests/data/samples/middle_c_flac.ogg differ diff --git a/tests/data/samples/middle_c_opus.ogg b/tests/data/samples/middle_c_opus.ogg index 568ef1d..1bd54f7 100644 Binary files a/tests/data/samples/middle_c_opus.ogg and b/tests/data/samples/middle_c_opus.ogg differ diff --git a/tests/data/samples/middle_c_vorbis.ogg b/tests/data/samples/middle_c_vorbis.ogg index 130d99c..c0a6219 100644 Binary files a/tests/data/samples/middle_c_vorbis.ogg and b/tests/data/samples/middle_c_vorbis.ogg differ