beetbox / beetbox/beets

Multiple genres are written to files joined

Open
#5,491 3 comments 2 reactions 0 assignees View on GitHub
bug good first issue
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.