MusicPlayerDaemon / MPD

Music Player Daemon
https://www.musicpd.org/
GNU General Public License v2.0
2.18k stars 352 forks source link

wrong albumartist/artist - fallback when content is stored as flac + cue-file #1066

Closed MPconta closed 3 years ago

MPconta commented 3 years ago

Bug report

Describe the bug

When in the cue-file only an artist-tag but no albumartist-tag is stored, in the database there is an entry for "albumartist", which displays the content of the artist-tag. No "artist" is stored in the database. When in the cue-file an albumartist-tag and an artist-tag are stored, in the database there are correct entries for "albumartist" and "artist". So these two tags seem to be treated somehow wrong, if there is no albumartist-tag.

Here is an example for this behaviour. The lsinfo for a certain song stored as flac + cue-file with an "artist"-tag and no "albumartist"-tag stored:

file: _test/Joe Bonamassa - Royal Tea/Joe Bonamassa - Royal Tea.cue/track0005
Range: 1459.533-1753.426
Last-Modified: 2020-11-15T19:46:07Z
Format: 44100:16:2
Genre: blues and more
Date: 2020
Comment: J&R Adventures 2020 -- JRA91132, US
AlbumArtist: Joe Bonamassa
Album: Royal Tea
Track: 05
Title: High Class Girl
Time: 294
duration: 293.893

And the lsinfo for a certain song stored as flac + cue-file with an "artist"-tag and an "albumartist"-tag stored - everything correct here:

file: _test/Joe Bonamassa - Royal Tea/Joe Bonamassa - Royal Tea.cue/track0005
Range: 1459.533-1753.426
Last-Modified: 2020-11-15T19:46:07Z
Format: 44100:16:2
Genre: blues and more
Date: 2020
Comment: J&R Adventures 2020 -- JRA91132, US
AlbumArtist: Joe and his friends
Album: Royal Tea
Track: 05
Title: High Class Girl
Artist: Joe Bonamassa
Time: 294
duration: 293.893

Expected Behavior

The "artist"-tag should show up in the database as "artist"-entry, no matter if there is an "albumartist"-tag or not.

Actual Behavior

If there is no "albumartist"-tag in the cue-file, there is no "artist"-entry in the database.

Version

Music Player Daemon 0.22.4 (0.22.4) Copyright 2003-2007 Warren Dukes warren.dukes@gmail.com Copyright 2008-2018 Max Kellermann max.kellermann@gmail.com This is free software; see the source for copying conditions. There is NO warranty; not even MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Database plugins: simple proxy upnp

Storage plugins: local udisks nfs curl

Neighbor plugins: upnp udisks

Decoders plugins: [mad] mp3 mp2 [mpg123] mp3 [vorbis] ogg oga [oggflac] ogg oga [flac] flac [opus] opus ogg oga [sndfile] wav aiff aif au snd paf iff svx sf voc w64 pvf xi htk caf sd2 [audiofile] wav au aiff aif [dsdiff] dff [dsf] dsf [hybrid_dsd] m4a [faad] aac [mpcdec] mpc [wavpack] wv [modplug] 669 amf ams dbm dfm dsm far it med mdl mod mtm mt2 okt s3m stm ult umx xm [mikmod] amf dsm far gdm imf it med mod mtm s3m stm stx ult uni xm [sidplay] sid mus str prg P00 [wildmidi] mid [fluidsynth] mid [adplug] amd d00 hsc laa rad raw sa2 [ffmpeg] 16sv 3g2 3gp 4xm 8svx aa3 aac ac3 adx afc aif aifc aiff al alaw amr anim apc ape asf atrac au aud avi avm2 avs bap bfi c93 cak cin cmv cpk daud dct divx dts dv dvd dxa eac3 film flac flc fli fll flx flv g726 gsm gxf iss m1v m2v m2t m2ts m4a m4b m4v mad mj2 mjpeg mjpg mka mkv mlp mm mmf mov mp+ mp1 mp2 mp3 mp4 mpc mpeg mpg mpga mpp mpu mve mvi mxf nc nsv nut nuv oga ogm ogv ogx oma ogg omg opus psp pva qcp qt r3d ra ram rl2 rm rmvb roq rpl rvc shn smk snd sol son spx str swf tak tgi tgq tgv thp ts tsp tta xa xvid uv uv2 vb vid vob voc vp6 vmd wav webm wma wmv wsaud wsvga wv wve rtp:// rtsp:// rtsps:// [gme] ay gbs gym hes kss nsf nsfe sap spc vgm vgz [pcm]

Filters: libsamplerate soxr

Tag plugins: id3tag

Output plugins: shout null fifo sndio pipe alsa ao openal pulse jack httpd recorder

Encoder plugins: null vorbis opus lame twolame wave flac shine

Archive plugins: [bz2] bz2 [zzip] zip [iso] iso

Input plugins: file archive alsa tidal qobuz curl ffmpeg nfs mms cdio_paranoia

Playlist plugins: extm3u m3u pls xspf asx rss soundcloud flac cue embcue

Protocols: file:// alsa:// cdda:// ftp:// ftps:// gopher:// hls+http:// hls+https:// http:// https:// mms:// mmsh:// mmst:// mmsu:// nfs:// qobuz:// rtmp:// rtmps:// rtmpt:// rtmpts:// rtp:// rtsp:// rtsps:// scp:// sftp:// smb:// srtp:// tidal://

Other features: avahi dbus udisks epoll icu inotify ipv6 systemd tcp un

Log

MaxKellermann commented 3 years ago

Can't reproduce because I don't have your files.

MPconta commented 3 years ago

You can use the files i sent you for the discussion of issue 1013. https://github.com/MusicPlayerDaemon/MPD/issues/1013

The cue-file contained an "artist"-tag but lsinfo showed an "albumartist"-tag.

MaxKellermann commented 3 years ago

The cue-file contained an "artist"-tag but lsinfo showed an "albumartist"-tag.

Not exactly true. From your CUE file:

PERFORMER "Joe Bonamassa"

This is a top-level PERFORMER tag, which MPD translates to AlbumArtist: https://github.com/MusicPlayerDaemon/MPD/blob/98a9f81d617fb8fe4653b368dfb1f5e05cbb3c82/src/playlist/cue/CueParser.cxx#L190-L199 See https://wiki.hydrogenaud.io/index.php?title=Cue_sheet#Most_often_used for the original quote. This works exactly as designed.

MPconta commented 3 years ago

Thanks for the good explanation. I understand perfectly what you say. I use 3 applications which understand cue-sheets - Foobar2000, Mp3tag and VLC. So i tried to understand how this tags are used there.

It seems "artist" and "albumartist"-tags are not used (and also known) at all. For both of them the "performer"-tag is used. Even at the Hydrogenaudio-site there is no "artist" or "albumartist"-tag mentioned.

To make clear what i want to say, i made an example cue-sheet. At first the most easy case. The tags, i want to achieve are following:

Artist: Joe Bonamassa
Album: Royal Tea
TrackTitle: different
TrackNumber: different

The corresponding cue-sheet looks like this:

PERFORMER "Joe Bonamassa"
TITLE "Royal Tea"
FILE "Joe Bonamassa - Royal Tea.flac" WAVE
  TRACK 01 AUDIO
    TITLE "When One Door Opens"
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "Royal Tea"
    INDEX 01 07:34:72
  TRACK 03 AUDIO
    TITLE "Why Does It Take So Long To Say Goodbye"
    INDEX 01 12:03:52
  TRACK 04 AUDIO
    TITLE "Lookout Man!"
    INDEX 01 18:48:25
  TRACK 05 AUDIO
    TITLE "High Class Girl"
    INDEX 01 24:19:40
  TRACK 06 AUDIO
    TITLE "A Conversation With Alice"
    INDEX 01 29:13:32
  TRACK 07 AUDIO
    TITLE "I Didn't Think She Would Do It"
    INDEX 00 33:30:65
    INDEX 01 33:32:62
  TRACK 08 AUDIO
    TITLE "Beyond The Silence"
    INDEX 01 37:44:52
  TRACK 09 AUDIO
    TITLE "Lonely Boy"
    INDEX 01 44:30:34
  TRACK 10 AUDIO
    TITLE "Savannah"
    INDEX 00 48:36:01
    INDEX 01 48:36:69
  TRACK 11 AUDIO
    TITLE "Don't You Do Me No Favours"
    INDEX 00 53:13:37
    INDEX 01 53:14:55
  TRACK 12 AUDIO
    TITLE "Don't Hand Me Your Hangups"
    INDEX 00 58:50:74
    INDEX 01 58:52:50

For the second case i give the artist for title 1 the name "Heinz" The cue-sheet looks like following:

TITLE "Royal Tea"
FILE "Joe Bonamassa - Royal Tea.flac" WAVE
  TRACK 01 AUDIO
    TITLE "When One Door Opens"
    PERFORMER "Heinz"
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "Royal Tea"
    PERFORMER "Joe Bonamassa"
    INDEX 01 07:34:72
  TRACK 03 AUDIO
    TITLE "Why Does It Take So Long To Say Goodbye"
    PERFORMER "Joe Bonamassa"
    INDEX 01 12:03:52
  TRACK 04 AUDIO
    TITLE "Lookout Man!"
    PERFORMER "Joe Bonamassa"
    INDEX 01 18:48:25
  TRACK 05 AUDIO
    TITLE "High Class Girl"
    PERFORMER "Joe Bonamassa"
    INDEX 01 24:19:40
  TRACK 06 AUDIO
    TITLE "A Conversation With Alice"
    PERFORMER "Joe Bonamassa"
    INDEX 01 29:13:32
  TRACK 07 AUDIO
    TITLE "I Didn't Think She Would Do It"
    PERFORMER "Joe Bonamassa"
    INDEX 00 33:30:65
    INDEX 01 33:32:62
  TRACK 08 AUDIO
    TITLE "Beyond The Silence"
    PERFORMER "Joe Bonamassa"
    INDEX 01 37:44:52
  TRACK 09 AUDIO
    TITLE "Lonely Boy"
    PERFORMER "Joe Bonamassa"
    INDEX 01 44:30:34
  TRACK 10 AUDIO
    TITLE "Savannah"
    PERFORMER "Joe Bonamassa"
    INDEX 00 48:36:01
    INDEX 01 48:36:69
  TRACK 11 AUDIO
    TITLE "Don't You Do Me No Favours"
    PERFORMER "Joe Bonamassa"
    INDEX 00 53:13:37
    INDEX 01 53:14:55
  TRACK 12 AUDIO
    TITLE "Don't Hand Me Your Hangups"
    PERFORMER "Joe Bonamassa"
    INDEX 00 58:50:74
    INDEX 01 58:52:50

You can see, every track has its own performer, no top-level-performer. It behaves like a compilation-album without albumartist set. And for the third case i add an AlbumArtist "Fine Blues Music". The resulting cue-sheet is following:

PERFORMER "Fine Blues Music"
TITLE "Royal Tea"
FILE "Joe Bonamassa - Royal Tea.flac" WAVE
  TRACK 01 AUDIO
    TITLE "When One Door Opens"
    PERFORMER "Heinz"
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "Royal Tea"
    PERFORMER "Joe Bonamassa"
    INDEX 01 07:34:72
  TRACK 03 AUDIO
    TITLE "Why Does It Take So Long To Say Goodbye"
    PERFORMER "Joe Bonamassa"
    INDEX 01 12:03:52
  TRACK 04 AUDIO
    TITLE "Lookout Man!"
    PERFORMER "Joe Bonamassa"
    INDEX 01 18:48:25
  TRACK 05 AUDIO
    TITLE "High Class Girl"
    PERFORMER "Joe Bonamassa"
    INDEX 01 24:19:40
  TRACK 06 AUDIO
    TITLE "A Conversation With Alice"
    PERFORMER "Joe Bonamassa"
    INDEX 01 29:13:32
  TRACK 07 AUDIO
    TITLE "I Didn't Think She Would Do It"
    PERFORMER "Joe Bonamassa"
    INDEX 00 33:30:65
    INDEX 01 33:32:62
  TRACK 08 AUDIO
    TITLE "Beyond The Silence"
    PERFORMER "Joe Bonamassa"
    INDEX 01 37:44:52
  TRACK 09 AUDIO
    TITLE "Lonely Boy"
    PERFORMER "Joe Bonamassa"
    INDEX 01 44:30:34
  TRACK 10 AUDIO
    TITLE "Savannah"
    PERFORMER "Joe Bonamassa"
    INDEX 00 48:36:01
    INDEX 01 48:36:69
  TRACK 11 AUDIO
    TITLE "Don't You Do Me No Favours"
    PERFORMER "Joe Bonamassa"
    INDEX 00 53:13:37
    INDEX 01 53:14:55
  TRACK 12 AUDIO
    TITLE "Don't Hand Me Your Hangups"
    PERFORMER "Joe Bonamassa"
    INDEX 00 58:50:74
    INDEX 01 58:52:50

Every track has its performer and additional an top-level-performer. It behaves like a compilation-album with an albumartist set.

I hope this is understandable. As you can see, the "performer"-entry in cue-sheets is used in an other way than it is used as the standard "performer"-tag. It is used to replace "artist" and "albumartist"-tags.

MaxKellermann commented 3 years ago

Even at the Hydrogenaudio-site there is no "artist" or "albumartist"-tag mentioned.

Oh yes it does. Quote:

PERFORMER At top-level this will specify the CD artist, while at track-level it specifies the track artist."

MPD translates "CD artist" to "AlbumArtist" (MPD's per-album [=CD] "artist" tag), and "track artist" to "Artist" (MPD's per-track "artist" tag). That way, your third case works perfectly, as well as your second case.

Your first case does not behave as you expect it to, but you did not explain exactly what you want. You named three examples, but not a logical definition which covers all three examples. What you also did not explain is why the current behavior is a problem, why it is necessary to change it.

MPconta commented 3 years ago

You are right, the second and third case work like expected. For the first case: The problem is, that the "performer" at top level acts like "albumartist". The "performer" in this case should work as "artist" because at track-level no other "performer" is defined. It is not useful to have an "albumartist" but no "artist".

As you say:

PERFORMER
At top-level this will specify the CD artist, while at track-level it specifies the track artist."

It should specify the CD-artist, not the CD-albumartist.

MaxKellermann commented 3 years ago

The problem is, that the "performer" at top level acts like "albumartist".

You just state that, but you don't explain why this is a problem. And you have no solution. MPD behaves according to the definition found on the Hydrogenaudio wiki. Having only "AlbumArtist" but no "TrackArtist" is just fine from my perspective, but I don't see an explanation of your perspective.

It should specify the CD-artist, not the CD-albumartist.

"CD-artist" is AlbumArtist in MPD's nomenclature. You just argue with different naming conventions, but that's the weakest possible argument.

MPconta commented 3 years ago

To my opinion its not about naming conventions. To me the sentence

PERFORMER
    At top-level this will specify the CD artist.

means, that for every track on the CD the same artist is specified. But i understand your point - "CD-artist" looks very much like MPD's AlbumArtist.

From the logical point: What does an "AlbumArtist" serve, when there is no "Artist"? And a track without "Artist" surely is possible but is there a usecase for it?

From the practical point: When i go back from my second case to the first case (the three points from the beginning) meaning i give back the 1.track the Artist "Joe Bonamassa", all the track-level-performer vanish and the top-level-performer reappears. So it seems that common software, like Foobar2000, just summarize the track-level-performers to one top-level-performer, but always meaning the "artist"-tag.

MaxKellermann commented 3 years ago

I still don't see a problem described anywhere in your text. You write a lot of text, but none of it explains a problem. Your latest post doesn't add anything new, and I feel this is going nowhere, we're not making any progress, you still don't explain anything.

MPconta commented 3 years ago

The problem is, that all tracks on flac-cue-files, which originate from standard-CDs with only one artist, won't have an "artist"-tag. Well, you can say thats ok for you, or not.