toasterofbread / spmp

A YouTube Music client with a focus on customisation of colours and song metadata. Built with Compose Multiplatform for Android and desktop.
GNU General Public License v3.0
1.11k stars 44 forks source link

mp4 tags from spmp files breaking handling in other players #367

Closed Radoom closed 1 month ago

Radoom commented 2 months ago

Checklist

Steps to reproduce

  1. download files with spmp
  2. use another music player (tested "Phonograph Plus" and "Apollo" from F-Droid) to play the music
  3. in the other players, each song will be treated as its own individual one-song-album.

Expected behavior

Songs downloaded with spmp do contain the album name in the album tag field correctly. So they should show as one album for all songs of that album.

Actual behavior

as per above: each song represents its own album.

Screenshots / recordings

No response

Logs

none availalbe

SpMp version

0.4.1

SpMp platform

Android

OS version

Android 10 and 12 on two different devices

Additional information

The problem lies with the "Album Artist" tag field, which is written by spmp with a (JSON-like?) string like this: {"song_id":"jW-TZX95pjU","artist_ids":["UCkY2oqGEbBSaCdP-PVGhpCw"],"album_id":"MPREb_nNQCFjwd5CT"}

Because the "song_id" value is different for each song, this "Album Artist" total value/string gives a unique string (even though "artist_ids" and "album_id" have the same value).

IF I manually clean out the "Album Artist" tag filed (e.g. using kid3), then afterwards the external players see all songs as being from one and the same album according to the "Album" tag field.

Solution seems to prevent spmp from writing above "IDs" into the "Album Artist" tag filed.

toasterofbread commented 2 months ago

This is intended behaviour. The metadata stored in the album artist field is needed to maintain references to YouTube artists and videos using their IDs (since the regular metadata fields are only populated with readable text).

I'm not sure why I didn't use a different field for storing this information, I think there was something that prevented other fields from working on all platforms or something but I don't remember. At this point I don't really want to change the field anyway since that would break compatibility.

Songs downloaded in SpMp aren't really meant to be used outside SpMp anyway, so if you want to do that you'll need to manually strip the metadata or use a custom solution that does it for you unfortunately.

Radoom commented 2 months ago

Thanks for your response and explanation.

While I understand that your focus is on using the dl'd files inside SpMp only, could you please reconsider.

The tag fields are sort of standardized and I'd say that they, especially those more "common" ones like "album artist", shouldn't be used for other data storage than what they are intended for by their very name.

Looking at the fields "kid3" offers me to add to tracks:

So, using "Comment" for the "song_ID:" part, and the two aforementioned for what their names say would allow storage of the three values you have in "AlbumArtists" now. Or, place the whole string in "Comment", but leave "Album Artist" empty (unless a song is on an album where "album artist" indeed as a meaningful (text only) artist name entry).

Background: Using SpMp for my kid, who has limited online time (but unlimited music listening time ;-) ), so d'l'ing songs and then massively using them offline is the killer feature we've found SpMp the best in class for. However, browsing the offline content inside SpMp itself is somewhat limited (or I'm too stupid). Sorting by Artists, Albums etc doesn't exist, search can only deal with song names afaik. So, when she want's all her XYZ artists songs now, she's not gonna search each and every single one by name and add them to SpMp's queue or a playlist, that's just not realistic. Hence, we use players that do care for all the fields and allow filtering "as usual". Plus, in those players, music from other sources, are available, too. Having the SpMp download folder as part of the overall library is great.... but doesn't work properly due to this field "abuse".

Maybe you can do something about it...would be great.

toasterofbread commented 2 months ago

On Android, SpMp is limited to the metadata fields made available by MediaMetadataRetriever.

I made a test build (use the debug one, it will install as a separate app) that uses the location field instead of album artist, is that an improvement for you?

Radoom commented 2 months ago

Yes! That does the trick, perfect!

Tested with both players mentioned above, both don't distinguish by the location field obviously (as it wouldn't make sense, e.g. as on a live best-off album recordings from various places could be included). Thank you so much!