OxygenCobalt / Auxio

A simple, rational music player for android
GNU General Public License v3.0
1.82k stars 120 forks source link

Smarter management of artists metadata tags #66

Closed foldfree closed 2 years ago

foldfree commented 2 years ago

Describe the feature you want to implement:

Some artists have their names stylized differently depending on the release. They also happen to have collaboration with other artists.

In Auxio, this create a separate artist entry for each of those situations.

I wish to have all those under the same artist tab to declutter the artist tab and find the records in a more convenient manner.

So when I open the artist tab i have all the artist's releases including collaboration and single releases. For example here I have the artist exael, sometimes stylized as 'EXAEL', 'Exael' or when it's a collaboration it's 'foo & bar' 'foo + bar' 'foo, bar', 'foo/bar', etc... Right now, Auxio makes a separate entry for each of those Screenshot_20220111-014612_Quickstep

Here is how Odyssey deals with it. I have opened the single exael artist tab. And all the releases are gathered together, doesn't matter how exael is stylized or of it is a single release or a collab. Screenshot_20220111-014637_Quickstep

Is your feature request related to a problem? Please describe:

When i browse through an artist albums i have to go back and forth to see other releases. I may miss releases because they are all separated.

Why do you think this will improve everyone's usage of Auxio?

The collaboration thing is prevalent in electronic, experimental, jazz, hip-hop... It may seems specific but I believe it is rather common and not an edge case if having this kind of records. Overall i find this tag management more elegant and intuitive.

Due Diligence:

OxygenCobalt commented 2 years ago

The problem with directly parsing names like "Foo & Bar" is that it can mangle artist names that don't correspond to collaborations. For example, "Hootie & The Blowfish" would end up becoming "Hootie" if Auxio were just to blindly parse artist names like that.

I know this isn't as elegant, but I would recommend just using the album artist tag. Auxio 2.0.0 and up use those by default. If you already have those tags here, then this is actually a bug.

foldfree commented 2 years ago

The problem with directly parsing names like "Foo & Bar" is that it can mangle artist names that don't correspond to collaborations. For example, "Hootie & The Blowfish" would end up becoming "Hootie" if Auxio were just to blindly parse artist names like that.

Duh. You are right, I haven't thought about this.


I think I understood why theses records show up in the exael tab with Odyseey. It is not because it makes 'Foor' &'Bar' from 'albumartist' into separate entries, it's because some of the tracks are solo tracks and it is known by the 'artist' tag Like this one:

Album : Aphelion Lash Album/Performer : Ben Bondy & exael Track name : Papillion Performer : exael

But in Auxio, 'Aphelio Lash' only show up in the artist 'Ben Bondy & exael'. Is it the intended behavior that Auxio only follows the 'album artist' tag and ignore the 'artist' tag? This can be somewhat problematic: in compilation albums, the artist is labelled as 'various' instead of each individual artists for each track because the album artist is displayed instead of the artist. see the screenshots below as an example.

image image

On the other hand, do you think having case insensitive tags would cause conflict with yours or other people's music library? (so EXAEL, Exael and exael are together for mine)

OxygenCobalt commented 2 years ago

I think I understood why theses records show up in the exael tab with Odyseey. It is not because it makes 'Foor' &'Bar' from 'albumartist' into separate entries, it's because some of the tracks are solo tracks and it is known by the 'artist' tag.

So, you use the album artist field for any collaborations, while using the normal artist field for the main artist. Auxio assumes that's the other way around since most of the time it is.

In compilation albums, the artist is labelled as 'various' instead of each individual artists for each track because the album artist is displayed instead of the artist. see the screenshots below as an example.

I need clarification: Are you asking to have multiple artists be linked to a single song? Or are you asking for each song to have their specific artist name but still grouped up into a "Various Artists" artist? I can't do the former, but the latter may be possible.

On the other hand, do you think having case insensitive tags would cause conflict with yours or other people's music library? (so EXAEL, Exael and exael are together for mine)

It wouldn't conflict with my library, but it might with others. I could theoretically implement it though.

foldfree commented 2 years ago

each song to have their specific artist name but still grouped up into a "Various Artists" artist?

Yes this one!

It wouldn't conflict with my library, but it might with others. I could theoretically implement it though.

So I did a bit of research and checked how popular music programs would handle such situation. Namely VLC, Foobar2000, iTunes, Vinyl Music player and Sony Music Player. All are case insensitive.

There is some players that are case sensitive, like Vanilla and Music Player go. But I personally don't consider them a reference when it comes to UX.

Therefore I believe this feature would fit Auxio philosophy. :)

OxygenCobalt commented 2 years ago

This seems reasonable. Let me try to implement it.

OxygenCobalt commented 2 years ago

Can you try out this APK? Rename the extension from ZIP. Auxio will still group up songs by the album artist field, but the app should now do what you want.

Auxio_BetterArtists.zip

foldfree commented 2 years ago

Thanks it works, also, the case sensitive thing 👍

OxygenCobalt commented 2 years ago

Cool. Quick question though: Are albums "unified", or are there multiple duplicate albums with only some songs with them? I was working on these changes when I realized that duplicate albums could appear with the way I'm merging artists.

foldfree commented 2 years ago

I see what you mean. Nothing has changed on that end. Albums entries are still ordered under album artist tag

OxygenCobalt commented 2 years ago

Cool. I still know another way that albums can be split up incorrectly [different audio formats], so I'll be implementing it regardless. I'll try to produce a final APK with that change implemented and then close this issue.

OxygenCobalt commented 2 years ago

Okay, this should be the final APK that implements all the changes you want. The only difference is that any duplicate albums in an artist will be merged [excluding ones mangled by MediaStore]. Tell me if it works well, and if it does I'll close this issue.

Auxio_BetterArtists_Final.zip

foldfree commented 2 years ago

Screenshot_20220204-122211_Quickstep_1

The various artists tags works as expected but tags are back to being case sensitive? Screenshot_20220204-122555_Quickstep_1

The search broke after some queries which never happened to me before. Not sure if bad luck or related. Hard restart of the app fix it

OxygenCobalt commented 2 years ago

Investigating. Seems like I accidentally broke some invariants with this change in general, not just with the album change.

OxygenCobalt commented 2 years ago

Yeah, I'm going to have to make a bunch of more changes before this loader change is fleshed out. Use the previous APK for now.

OxygenCobalt commented 2 years ago

Try this apk, I've more or less refactored the entire loading process to prevent any more frustrating MediaStore ID issues.

Auxio_Loader3.zip

I've tested this with every possible case [including replicating your songs that split across EXAEL and exael tags] and it seems to work correctly. I've also added a redundancy check so that search doesn't break with what I believe are poorly formed songs without parent album/artist fields.

State saving might be a bit broken, I'll fix that issue when I push the commit.

Hope this finally works for you.

foldfree commented 2 years ago

Hey thanks a lot! Everything works as expected from this issue ticket. Savestate seems to works too but I think it broke ReplayGain?

OxygenCobalt commented 2 years ago

Hey thanks a lot! Everything works as expected from this issue ticket.

Fantastic. I'll push the change.

I think it broke ReplayGain?

How so? Seems to work fine for me. Perhaps the option is just turned off? It's kept off by default due to it still being experimental.

I'll be closing this issue. This change should arrive in a 2.1.1 or a 2.2.0 depending on the changeset.

foldfree commented 2 years ago

https://files.catbox.moe/othx54.mp3 Please find in the link a track from my library that is mastered very loud. The change is obvious when switching ReplayGain on and off. It works on auxio 2.1.0 but not the debug version you just provided.

OxygenCobalt commented 2 years ago

I don't know what you're talking about honestly, I get an track volume of 0.9761128 and an album volume of 0.27510595 on the debug build and Auxio 2.1.0.

foldfree commented 2 years ago

I guess my custom rom is not that reliable. I rebooted and the issue is gone. Sorry it's the 2nd time i talk about a bug that is actually from my operating system.

OxygenCobalt commented 2 years ago

No problem. Android is a finicky mess for me too. Debug APKs are pretty unstable anyway due to all the gunk they have.

Thanks for raising this issue. I think this rework is a net-positive for the app.

dhishkyaon commented 2 years ago

Does that mean Auxio will use 'Artist' tag instead of 'Album Artist' in next stable release?

OxygenCobalt commented 2 years ago

It already does. This just means that album artists will be handled much better in the next release. Song fragmentation across albums and artists should be eliminated with the new system entirely.

dhishkyaon commented 2 years ago

I download 7 songs of an album. The 'Artist' is same in every song but the 'Album Artist' varies in some songs. Currently Auxio is showing 'Album Artist' under the tittle of tracks.

OxygenCobalt commented 2 years ago

Currently Auxio is showing 'Album Artist' under the tittle of tracks.

So, you have songs that are grouped up in the same artist but have different individual artist names. In 2.1.0, Auxio only shows the album artist everywhere, but in the next release, the artist name of the song in particular should be shown instead. Songs will still be grouped up by their album artist.

dhishkyaon commented 2 years ago

what about artist tab? right now for me 'Album Artist' is showing up in artist tab but the actual artist is not there.

OxygenCobalt commented 2 years ago

This is intentional. "Artists" in Auxio are in actually album artists. This is to make sure that all songs of an artist remain unified instead of being split between multiple artists with names like "Artist", "Artist (ft. Artist 2)", and "Artist + Artist 3". That's more or less the whole reason behind adding album artist support in the first place and this issue as well.

dhishkyaon commented 2 years ago

hi, i am having an issue on the v2.0.0. The artist name showing under the song name is 'artist' but on selecting, it opens 'album_artist' which is different. so it doesn't make any sense.

OxygenCobalt commented 2 years ago

That is intentional. Auxio cannot perfectly associate each collaborating artist in an "artist" field, as it leads to parsing issues described here. The best thing Auxio can do is show the artist tag on an individual song, but group them up under the album artist tag.

OxygenCobalt commented 2 years ago

I'd hate to bother you again @foldfree, but I've made some changes to the internal grouping system to make it more efficient, and I would like to make sure it works on a device/library that isn't mine. If you have some spare time, could you confirm that this APK still loads artists correctly? If not, then I'll simply revert the system back to the way it was previously.

Auxio_FinalArtists.zip

Hopefully this should be the last time I have to do changes to this system.

foldfree commented 2 years ago

It seems all good to me! Everything is behaving as expected.