diff --git a/music_kraken/audio/metadata.py b/music_kraken/audio/metadata.py index 1431112..dbcd36a 100644 --- a/music_kraken/audio/metadata.py +++ b/music_kraken/audio/metadata.py @@ -1,5 +1,5 @@ import mutagen -from mutagen.id3 import ID3, Frame, APIC +from mutagen.id3 import ID3, Frame, APIC, USLT from pathlib import Path from typing import List import logging @@ -7,6 +7,7 @@ from PIL import Image from ..utils.config import logging_settings, main_settings from ..objects import Song, Target, Metadata +from ..objects.metadata import Mapping from ..connection import Connection LOGGER = logging_settings["tagging_logger"] @@ -105,6 +106,11 @@ def write_metadata_to_target(metadata: Metadata, target: Target, song: Song): data=converted_target.read_bytes(), ) ) + id3_object.frames.delall("USLT") + uslt_val = metadata.get_id3_value(Mapping.UNSYNCED_LYRICS) + id3_object.frames.add( + USLT(encoding=3, lang=u'eng', desc=u'desc', text=uslt_val) + ) mutagen_file = mutagen.File(target.file_path) diff --git a/music_kraken/objects/metadata.py b/music_kraken/objects/metadata.py index 69fff8d..14ffb69 100644 --- a/music_kraken/objects/metadata.py +++ b/music_kraken/objects/metadata.py @@ -92,7 +92,7 @@ class Mapping(Enum): key = attribute.value if key[0] == 'T': - # a text fiel + # a text field return cls.get_text_instance(key, value) if key[0] == "W": # an url field @@ -355,7 +355,12 @@ class Metadata: return None list_data = self.id3_dict[field] - + #correct duplications + correct_list_data = list() + for data in list_data: + if data not in correct_list_data: + correct_list_data.append(data) + list_data = correct_list_data # convert for example the time objects to timestamps for i, element in enumerate(list_data): # for performance’s sake I don't do other checks if it is already the right type @@ -368,7 +373,7 @@ class Metadata: if type(element) == ID3Timestamp: list_data[i] = element.timestamp continue - + """ Version 2.4 of the specification prescribes that all text fields (the fields that start with a T, except for TXXX) can contain multiple values separated by a null character. Thus if above conditions are met, I concatenate the list, @@ -376,7 +381,7 @@ class Metadata: """ if field.value[0].upper() == "T" and field.value.upper() != "TXXX": return self.NULL_BYTE.join(list_data) - + return list_data[0] def get_mutagen_object(self, field): @@ -395,6 +400,5 @@ class Metadata: """ # set the tagging timestamp to the current time self.__setitem__(Mapping.TAGGING_TIME, [ID3Timestamp.now()]) - for field in self.id3_dict: yield self.get_mutagen_object(field) diff --git a/pyproject.toml b/pyproject.toml index b01e131..62598b1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -69,7 +69,7 @@ dependencies = [ "toml~=0.10.2", "typing_extensions~=4.7.1", - "python-sponsorblock~=0.0.dev1", + "python-sponsorblock~=0.1.dev1", "youtube_dl", ] dynamic = [