beets icon indicating copy to clipboard operation
beets copied to clipboard

New "artists" tag

Open Rouzax opened this issue 9 years ago • 25 comments

Musicbrainz Picard can set the Artists tag as far as I can see beets does not do that. Would that be possible? image

Rouzax avatar Jan 21 '16 16:01 Rouzax

Can you please do a little more investigation into this tag?

  • What is the standard way of storing this tag in ID3 and other formats? Or is it Picard-specific?
  • Is there any information on how exactly the string should be formatted? Is it with a semicolon separator?
  • Are there other tools that read this field? What's your use case?

sampsyo avatar Jan 21 '16 17:01 sampsyo

The tag comes from the Musicbrainz database and has been introduced since picard 1.3 https://picard.musicbrainz.org/docs/tags/

KODI 16 will incorporate the tag to distinguish between multiple artists on on track, that way the artist library is clean and will only contain "Lost Frequencies" and "Janieck Devy" as separate entries instead of one entry as "Lost Frequencies feat. Janieck Devy" It took a while to get in introduced into KODI but 16 will have it. http://forum.kodi.tv/showthread.php?tid=198149

Rouzax avatar Jan 21 '16 18:01 Rouzax

Thanks for the additional digging!

Sadly, Picard's tag mapping page doesn't describe how the field is stored. https://picard.musicbrainz.org/docs/mappings/

In any case, though, this seems like a fine addition if someone's interested in doing the necessary detective work.

sampsyo avatar Jan 21 '16 21:01 sampsyo

With detective work do you mean what the separator is?

Rouzax avatar Jan 22 '16 05:01 Rouzax

That's part of it. We also need to investigate whether there's a standard tag storage key/frame type for all of the file types beets supports (MP3, Vorbis comments, ASF, etc.). Or in the absence of a standard, we'll need to figure out what a collection of other software does.

sampsyo avatar Jan 22 '16 06:01 sampsyo

This is the Artists tag in Picard, as far as I can tell they are separated using the default configured separator in Picard image

Because there are multiple Artists that also means that there are multiple musicbrainz_artistid image

The http://id3.org/id3v2.4.0-frames standard states:

4.2.   Text information frames

   The text information frames are often the most important frames,
   containing information like artist, album and more. There may only be
   one text information frame of its kind in an tag. All text
   information frames supports multiple strings, stored as a null
   separated list, where null is reperesented by the termination code
   for the charater encoding. All text frame identifiers begin with "T".
   Only text frame identifiers begin with "T", with the exception of the
   "TXXX" frame. All the text information frames have the following
   format:

     <Header for 'Text information frame', ID: "T000" - "TZZZ",
     excluding "TXXX" described in 4.2.6.>
     Text encoding                $xx
     Information                  <text string(s) according to encoding>

This is the Picard ticket about the Artists tag. http://tickets.musicbrainz.org/browse/PICARD-700

This post gives some more info on the tag and separators https://github.com/xbmc/xbmc/pull/7281#issuecomment-113575754

I created test tracks for the KODI team, feel free to use them. They are royalty free MP3 from http://www.bensound.com/royalty-free-music/track/cute

Tagged as: Various Artists - Hed Kandi: Miami 2015 And as: Mark Ronson - Uptown Special

With these settings: image

Also the same songs tagged with id v2.3

With these settings: image

Download http://cloud.mgdn.nl/index.php/s/f0HYGYK3vgP4mQW

Rouzax avatar Jan 23 '16 10:01 Rouzax

Thank you! These sample files (and the Picard ticket for albumartists) should help.

sampsyo avatar Jan 23 '16 18:01 sampsyo

You are welcome, let me know if you need anything else.

Rouzax avatar Jan 23 '16 18:01 Rouzax

@sampsyo, How could I set the separator tag for instance for Genre also to be the one as specified in the standard? Now the comma is used and a musicplayer like MusicBee does not handle those wil it will see the separator like described in the standard. image

If I set the NUL character. image

I get this error in beets.

C:\Windows\system32>beet lastgenre
configuration error: file C:\Users\Administrator\AppData\Roaming\beets\config.ya
ml could not be read: unacceptable character #x0000: special characters are not
allowed
  in "C:\Users\Administrator\AppData\Roaming\beets\config.yaml", position 1022

C:\Windows\system32>

Rouzax avatar Jan 24 '16 13:01 Rouzax

Perhaps it's possible to use a YAML escape? You'll probably want to google the syntax, but maybe it's "\x00" or something similar.

sampsyo avatar Jan 24 '16 15:01 sampsyo

"\x00" seems to work :smile: previously image

with "\x00" image

Rouzax avatar Jan 24 '16 16:01 Rouzax

Great!

sampsyo avatar Jan 24 '16 16:01 sampsyo

@sampsyo, I'm curious what if I start using Beets now and the extra Artists tag would be included later in Beets. How hard would it be to update all my music with those tags? A related question, what is exactly the difference between the commands Update, Write and MBSync? I can't seem to figure it out from the Wiki or my test machine.

On a side note I checked the Artists tag and Artist Id tag and they are also separated with the nul value. Sigala feat. Bryn Christopher - Sweet Lovin' [Re-edit] image image

Rouzax avatar Jan 29 '16 08:01 Rouzax

Getting new data in the future should just entail an mbsync.

A related question, what is exactly the difference between the commands Update, Write and MBSync?

  • update: take data from files' metadata and put them in the beets database
  • write: the opposite: take data from the database and put them into files
  • mbsync: get new data from MusicBrainz and put it in the database (and files)

I can't seem to figure it out from the Wiki or my test machine.

Can I ask you the favor of looking into exactly what's confusing about the current documentation and improving it with a PR? You're not the only one who has been confused, which suggests that we could do a better job of explaining these commands.

sampsyo avatar Jan 29 '16 16:01 sampsyo

So let's see if I get it. Update: will scan all files in the library and read all the tags and update those in the beets database Write: will write all the tags of the files as they are in the database and overwrite the tags that are on the files. MBSync: will query MB and fetch all tags as they are currently on MB and update the beets database and write the tags to the files in the library.

Do I understand correctly like this?

With the multiple artists you will probably run into the same issue as #505

Rouzax avatar Jan 29 '16 17:01 Rouzax

Yep, exactly!

sampsyo avatar Jan 29 '16 18:01 sampsyo

Will give it a try, but I'm no git wizard :smile:

Rouzax avatar Jan 29 '16 19:01 Rouzax

Could this be treated similarly to how the current 'genres' field works?

jtpavlock avatar Jun 02 '20 02:06 jtpavlock

Unfortunately no—the genres field is a pretty weird thing. It's kind of a partial implementation of a much grander idea where fields can have lists as values, but it's not completely thought out.

sampsyo avatar Jun 02 '20 12:06 sampsyo

I noticed my library was ok with Picard but I had many artists with beet. This was the issue.

Will this be implemented? It is time consuming to tag with beet first then make a second pass with picard for the artists field.

:heart:

Extarys avatar Feb 03 '21 15:02 Extarys

FYI I added ARTISTS to Songkong and Jaikoz for all formats in order to be able to store multiple artist separately where as ARTIST stores to match the cover e.g Artist=Johnny Cash & June Carter, Artists=Johnny Cash; June Carter. ARTIST only stores one value, ARTIST stored a value per artist so for ID3 format would have a TXXX:ARTISTS frame with '\0' between each artist, for Flac would have two ARTISTS fields. Picard then added in support for this field to match SongKong/Jaikoz.

Also have an equivalent ALBUMARTISTS field for the album artist

ijabz avatar Mar 17 '21 10:03 ijabz

Hi, I'd be interested to work on this along with the ability to identify the primary artist (and use it place of the current concatenated artist name). I'd like to know what steps are required to implement this feature and where can I start.

lucat1 avatar Jul 23 '22 16:07 lucat1

Definitely very interested to see this implemented alongside #3107. I've tried to create a "Correct" artist model in my music app Auxio that hinges on this kind of multi-artist support, and am now somewhat dismayed that the tags produced by Beets really don't play along well with this system. In particular, I really wish beets defaulted to native multi-value information rather than separator-based information.

I would work on this, but given the sheer amount of dependencies on the current artist model by plugins and configuration, I'd imagine it would be extremely difficult.

OxygenCobalt avatar Jan 14 '23 04:01 OxygenCobalt