Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New "artists" tag #1824

Open
Rouzax opened this issue Jan 21, 2016 · 25 comments
Open

New "artists" tag #1824

Rouzax opened this issue Jan 21, 2016 · 25 comments
Labels
feature features we would like to implement

Comments

@Rouzax
Copy link

Rouzax commented Jan 21, 2016

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

@sampsyo sampsyo added the needinfo We need more details or follow-up from the filer before this can be tagged "bug" or "feature." label Jan 21, 2016
@sampsyo
Copy link
Member

sampsyo commented Jan 21, 2016

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?

@Rouzax
Copy link
Author

Rouzax commented Jan 21, 2016

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

@sampsyo
Copy link
Member

sampsyo commented Jan 21, 2016

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 sampsyo added feature features we would like to implement and removed needinfo We need more details or follow-up from the filer before this can be tagged "bug" or "feature." labels Jan 21, 2016
@sampsyo sampsyo changed the title Can beets set the Artists tag? New "artists" tag Jan 21, 2016
@Rouzax
Copy link
Author

Rouzax commented Jan 22, 2016

With detective work do you mean what the separator is?

@sampsyo
Copy link
Member

sampsyo commented Jan 22, 2016

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.

@Rouzax
Copy link
Author

Rouzax commented Jan 23, 2016

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
xbmc/xbmc#7281 (comment)

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

@sampsyo
Copy link
Member

sampsyo commented Jan 23, 2016

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

@Rouzax
Copy link
Author

Rouzax commented Jan 23, 2016

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

@Rouzax
Copy link
Author

Rouzax commented Jan 24, 2016

@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>

@sampsyo
Copy link
Member

sampsyo commented Jan 24, 2016

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.

@Rouzax
Copy link
Author

Rouzax commented Jan 24, 2016

"\x00" seems to work 😄
previously image

with "\x00"
image

@sampsyo
Copy link
Member

sampsyo commented Jan 24, 2016

Great!

@Rouzax
Copy link
Author

Rouzax commented Jan 29, 2016

@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

@sampsyo
Copy link
Member

sampsyo commented Jan 29, 2016

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.

@Rouzax
Copy link
Author

Rouzax commented Jan 29, 2016

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

@sampsyo
Copy link
Member

sampsyo commented Jan 29, 2016

Yep, exactly!

@Rouzax
Copy link
Author

Rouzax commented Jan 29, 2016

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

@jtpavlock
Copy link
Contributor

jtpavlock commented Jun 2, 2020

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

@sampsyo
Copy link
Member

sampsyo commented Jun 2, 2020

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.

@Extarys
Copy link

Extarys commented Feb 3, 2021

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.

❤️

@ijabz
Copy link

ijabz commented Mar 17, 2021

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

@lucat1
Copy link

lucat1 commented Jul 23, 2022

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.

@OxygenCobalt
Copy link

OxygenCobalt commented Jan 14, 2023

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.

@JeffersonBledsoe
Copy link

Just wondering if this got worked on at all? Is there is any way of using flexible attributes to write the tag in the meantime?

@afontenot
Copy link
Contributor

Just wondering if this got worked on at all? Is there is any way of using flexible attributes to write the tag in the meantime?

In my experience this just works now thanks to #4743, are you on 2.0.0?

My Beets config is public, although I don't think I'm doing anything to enable this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature features we would like to implement
Projects
None yet
Development

No branches or pull requests

9 participants