beets
beets copied to clipboard
New "artists" tag
Musicbrainz Picard can set the Artists tag as far as I can see beets does not do that. Would that be possible?

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?
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
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.
With detective work do you mean what the separator is?
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.
This is the Artists tag in Picard, as far as I can tell they are separated using the default configured separator in Picard

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

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:

Also the same songs tagged with id v2.3
With these settings:

Download http://cloud.mgdn.nl/index.php/s/f0HYGYK3vgP4mQW
Thank you! These sample files (and the Picard ticket for albumartists) should help.
You are welcome, let me know if you need anything else.
@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.

If I set the NUL character.

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>
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.
"\x00" seems to work :smile:
previously 
with "\x00"

Great!
@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]

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 databasewrite: the opposite: take data from the database and put them into filesmbsync: 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.
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
Yep, exactly!
Will give it a try, but I'm no git wizard :smile:
Could this be treated similarly to how the current 'genres' field works?
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.
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:
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
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.
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.