Jak ustawić: pola „artysta”, „artysta albumu”, „rok”, „album”, „numer utworu” i „tytuł” ​​znacznika, z mutagenem

Próbuję użyć mutagenu (z Pythonem 2.7.5) do stworzenia programu, który, biorąc pod uwagę, że ścieżka do piosenek jest...\Artist\Year Album\Songnumber Title.mp3, ustawia wykonawcę, wykonawcę albumu, rok, album, numer utworu i znaczniki tytułu utworu i zachowuje tag gatunku. Próbowałem to zrobićEasyID3, ale nie ma tagu wykonawcy albumu. Próbowałem też robić to regularnieID3, ale natknąłem się na kilka problemów z tym. Oto kod, którego użyłem:

from mutagen.id3 import ID3, TIT2, TPE2, TALB, TPE1, TYER, TDAT, TRCK, TCON, TORY, TPUB
p = "E:\\Musik\\Aeon\\2005 Bleeding the False\\01 Cenobites - Copy.mp3"
audio = ID3(p)
audio.add(TIT2(encoding=3, text=u"t"))    #TITLE
audio.add(TRCK(encoding=3, text=u"1"))    #TRACK
audio.add(TPE1(encoding=3, text=u"a"))    #ARTIST
audio.add(TALB(encoding=3, text=u"al"))   #ALBUM
audio.add(TYER(encoding=3, text=u"2000")) #YEAR
audio.add(TDAT(encoding=3, text=u"2001")) #YEAR
audio.add(TORY(encoding=3, text=u"2002")) #ORIGYEAR
audio.add(TPE2(encoding=3, text=u"aa"))   #ALBUMARTIST
audio.add(TCON(encoding=3, text=u"g"))    #GENRE
audio.save()

użyłemten stół znaleźć 4-literowe kody dla każdego znacznika.

Tytuł, utwór, artysta i album działały dobrze. Dla wszystkich pól pod właściwościami pliku mp3> szczegóły z wyjątkiem tych czterech i „roku” poprzednie wartości zostały wyczyszczone przezsave(), a kiedy próbowałem dodać nowe, nic się nie stało. W szczególności pola „gatunek” i „artysta albumu” nie działały. Jeśli chodzi o „rok”, który ma zarówno kody TYER, jak i TDAT, nie zmieniłby się wcale, chyba że pole było puste jako pierwsze, a potem tylko przez TYER. „ORIGYEAR” z kodem TORY nic nie zrobił.

Pole „genre” nie jest właściwie całkowicie zepsute - jeśli zmienisz je kodem Pythona (audio.add(etc)) lub ręcznie przejdź do właściwości> szczegóły wcześniej,save() usunie nie wbudowane gatunki, takie jak „Technical Death Metal” lub „mt3jr39kf390”, podczas gdy działa z wbudowanymi gatunkami, takimi jak „Classic Rock” lub „Country”, podczas gdy niektóre liczby całkowite, takie jak 1 lub 2, zmieniają się w te wbudowane gatunki. (Pole roku zachowuje się również podobnie - jeśli ręcznie ustawisz wartość pola na określone liczby,save() zmieni go na inny numer. Obserwowałem to tylko dla wartości poniżej 800, ale nie dla wszystkich - 448 i 449 pozostają niezmienione, podczas gdy 500 zmienia się w 320, 700 zmienia się w 448, 12 zmienia się w 10, a 10 zmienia się w 8. Jeśli zmienisz 12 na 10 w ten sposób, a następnie uruchom program ponownie, nic się nie stanie, ale jeśli ręcznie zmienisz go na inną wartość i powróci do 10, zmieni się w 8.)

Problem polega na tym, że nie mogę zmienić znacznika roku, jeśli już coś tam jest, nie mogę zmienić wykonawcy albumu ani tagu gatunku, i nie wiem, jak wykonać polecenie „get”, jeśli jest nawet jeden, więc mogę zachować tag gatunku.

Również,EasyID3 ma te same problemy -save() czyści niektóre pola i zachowuje się dziwnie w przypadku gatunku i roku. Jedyną różnicą wydaje się być możliwość zmiany roku, nawet jeśli pole nie jest puste. Oto kod, którego użyłem:

from mutagen.easyid3 import EasyID3
p = "E:\\Musik\\Aeon\\2005 Bleeding the False\\01 Cenobites - Copy.mp3"
audio = EasyID3(p)
audio["title"] = u"t"
audio["artist"] = u"a"
audio["album"] = "al"
audio["date"] = u"2000"
audio["tracknumber"] = u"1"
audio["genre"] = u"g"
audio.save()
print '\n'.join(EasyID3.valid_keys.keys())

questionAnswers(2)

yourAnswerToTheQuestion