Multiple genres are written to files joined
- Dominant language
- Python
- Stars
- 15.7k
- Forks
- 2.1k
- Avg merge
- 4d 21h
- Merged PRs (30d)
- 31
Description
### Problem
Most of my music files have multiple genres, for example
```fish
$ 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:
```sh
$ 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
```sh
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:
```py
>>> 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:
```py
>>> m.genres = m.genres[0].split(", ")
>>> m.genres
Out[6]: ['early hardcore', 'gabber', 'hardcore techno', 'psycore']
>>> m.save()
```
```sh
$ 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:
```sh
$ 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:
```sh
$ 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:
```sh
$ 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.
Contributor guide
Assessment
This issue has not been assessed yet.