Repository metrics
- Stars
- (12,133 stars)
- PR merge metrics
- (Avg merge 9d 12h) (46 merged PRs in 30d)
Description
Problem
Most of my music files have multiple genres, for example
$ filepath=/run/media/sarunas/music/Music/mokum/mok208_fkinghardcore12worldresistance/13_djdano_ooooohshitshitebrooklynmix.flac ~ │ 🐍 3.8 🐶
$ beet info path:$filepath | grep -i genre
genre: early hardcore, gabber, hardcore techno, psycore
genres: early hardcore, gabber, hardcore techno, psycore
I noticed that these get written to FLAC files as a single comma-separated GENRE field:
$ metaflac --block-type VORBIS_COMMENT --list $filepath | grep -i genre ~ │ 🐍 3.8 🐶
comment[37]: GENRE=early hardcore, gabber, hardcore techno, psycore
Even though I expected to see something like this instead
comment[37]: GENRE=early hardcore
comment[38]: GENRE=gabber
comment[39]: GENRE=hardcore techno
comment[40]: GENRE=psycore
Set GENRE correctly using mediafile
If I use mediafile to inspect the metadata, I see that genres return a list with
a single genre, where I see all my genres together:
>>> from mediafile import MediaFile
>>> m = MediaFile("/run/media/sarunas/music/Music/mokum/mok208_fkinghardcore12worldresistance/13_djdano_ooooohshitshitebrooklynmix.flac")
>>> m.genres
Out[4]: ['early hardcore, gabber, hardcore techno, psycore']
Let's try to correct this using the same mediafile and save the file:
>>> m.genres = m.genres[0].split(", ")
>>> m.genres
Out[6]: ['early hardcore', 'gabber', 'hardcore techno', 'psycore']
>>> m.save()
$ metaflac --block-type VORBIS_COMMENT --list $filepath | grep -i genre ~ │ 🐍 3.8 🐶
comment[60]: GENRE=early hardcore
comment[61]: GENRE=gabber
comment[62]: GENRE=hardcore techno
comment[63]: GENRE=psycore
And now I'm seeing what I expected to have here.
Update beets library
Let's try to update beets library:
$ beet update path:$filepath ~ │ 🐍 3.8 🐶
29276 | 2020 / F**king Hardcore #12 - World Resistance: DJ Dano - Oooooh Shit (Shit'E' Brooklyn Mix)
genre: early hardcore, gabber, hardcore techno, psycore -> early hardcore
$ beet info path:$filepath | grep -i genre ~ │ 🐍 3.8 🐶
genre: early hardcore
genres: early hardcore; gabber; hardcore techno; psycore
It seems like it's turned into a list separated by a semicolon now.
And now let's try to write this file without making any changes:
$ beet write path:$filepath ~ │ 🐍 3.8 🐶
| 2020 / F**king Hardcore #12 - World Resistance: DJ Dano - Oooooh Shit (Shit'E' Brooklyn Mix)
genre: early hardcore -> early hardcore, gabber, hardcore techno, psycore
This was unexpected given that I did not adjust the metadata. Let's inspect the file and the library:
$ metaflac --block-type VORBIS_COMMENT --list $filepath | grep -i genre ~ │ 🐍 3.8 🐶
comment[37]: GENRE=early hardcore, gabber, hardcore techno, psycore
$ beet info path:$filepath | grep -i genre ~ │ 🐍 3.8 🐶
genre: early hardcore, gabber, hardcore techno, psycore
genres: early hardcore, gabber, hardcore techno, psycore
Multiple GENRE tags have been overwritten, and we're back where we started.