-
-
Notifications
You must be signed in to change notification settings - Fork 119
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
Direct metadata parsing #128
Comments
This comment was marked as outdated.
This comment was marked as outdated.
Add an ExoPlayer-based metadata backend. This backend finally allows Auxio to parse metadata internally, which has been a highly requested feature given how many unfixable MediaStore issues it would fix. However, this is not fully ready for production yet. The loading process becomes much larger with manual parsing, the current implementation still allocates picture metadata (terrible for efficiency), and there is no good indicator in the app to keep track of music loading. As a result, this backend is disabled until it can be fully integrated into Auxio's architecture.
If anyone wants to try out an extremely experimental APK with this new system, I've attached a debug APK below. Auxio_Ignore_MediaStore_Tags.zip No guarantees that there are no strange bugs with the new system. |
Works fine for me, also I think ExoPlayer supports opus files but Auxio doesn't show them. |
What Android version are you running @2ndemosthenes? I know OPUS support is flaky on older versions of android. |
I'm on android 8, and yes most music players can't find opus files on my phone, only a handful of them support it. |
Yeah, might be device-specific. I would imagine that the music players that do work don't load music from the media database (which isn't picking up your OPUS files) but rather using their own system which I can't really replicate. |
I've been able to implement a really cool thing with the new parser: Original date support. If you have an album like "Famous Album (Remastered)" that was originally released in 2000 but was re-released in 2020, you could tag the file to have an "original date" tag ( The only reason I implemented this was from reading https://news.ycombinator.com/item?id=31659799 and thinking it was really useful. If you want me to add support for more niche tags like these, please let me know. |
@OxygenCobalt, maybe you could add support for "Release Type" tags in order to separate studio/live albums, eps, and singles inside each artists' page. Though, I'm a bit conflicted as to which tags would be used for such a feature. MusicBrainz (Picard) defines this specific type of tag here, but it isn't a native/official ID3 frame. Using the grouping tag (also defined for Picard here) might be more convenient, but its use isn't very standardized between applications (some use it for box sets, others for release groups, and iTunes uses it in a specific manner I haven't researched yet). |
Huh, that actually sounds cool @rhynec, as I have some EPs that I would like to categorize. Some things though:
I'll try to implement this some time once I can get an MVP of this system out (and I can make the necessary UI reworks) |
Also, something else I'm going to try implementing is full ISO-8601 date support. If you have special "YYYY-MM-DD" or even "YYYY-MM-DD HH-MM-SS" tags, Auxio would handle them correctly when sorting, instead of sorting them alphabetically like Auxio does now. Note that they'll probably still be displayed in the UI as a simple year. |
suggestion for displaying the different release types: one list as it is now, but different sizes of cover artwork so album would extend all the way to the left screen edge, and into the empty space on top and bottom of the line. ep and various other stuff at current size single and demo smaller |
@illdeletethis I don't really want to make sizing inconsistent like that. Material Design prefers you to size components by 8dp increments, but there are no 8dp increments between the size of a song cover and the size of an album cover. I think I'll still separate them in the artist view, but not in the albums tab (I'll differentiate them somehow). |
Hey @OxygenCobalt, sorry for taking so long in getting back to you. This week's been crazy for me.
I'm not too sure about ID3 frames, but for Vorbis it should be UTF-8 formatted text with the different options listed here. I'm not sure how the "secondary" types would be written into the tag by Picard, though. I'd guess they're either written in separate
I like this implementation. Though, maybe only show the release type inside each album's menu rather than cluttering up the listing with that information?
I would assume all songs would be tagged with the release type. At least, that's the way I'd do it since tagging an arbitrary song in an album with the release type wouldn't make much sense.
That's very cool! There are bands like KGLW who have released up to five albums per year, so using the full date for sorting would be something I'd very much appreciate. One more thing. Perhaps it'd be better to move the release type discussion into a separate issue for more visibility? |
Okay, thanks for the formatting info @rhynec.
For ID3v2, I'm just going to use the MusicBrainz tag, and then fall back to
In general, due to some files that have both ID3 and Vorbis tags, the source of truth for a particular tag will always be the last one Auxio finds. In the case that there are separate tags, I would simply reccomend using the + syntax. It's not like duplicate vorbis tags are that common, anyway, and I'd imagine using them would be quite the hassle in other taggers like Kid3/Mutagen given that they both use HashMaps.
My rule regarding items is this:
So, when it comes to my idea, it wouldn't clutter the list of albums too much since I would consider release types to be a definite tag. Now, this changes if the release type could be arbitrary. Then, it would have to be on one line, which I don't like. Arbitrary release types would also make it much harder to group up albums in the Artist UI. Whereas I could have built-in string resources for "Albums", "EPs", "Singles", I can't do that with a flat tag like I'll consider it some other time if I choose to extend the Release Type system. Perhaps I should just extend the spec depending on user requests. Currently though, I just want to deliver an MVP as it stands. Anyway, this is going to be spun off into two issues: #158 for release types, #159 for the dates. |
This comment was marked as outdated.
This comment was marked as outdated.
Actually, this might not arrive in 2.5.0. I don't want to be overwhelmed with bugs from both #72 and this issue in a single release, so I think I'll try to bundle this (and all the new metadata additions) into a 2.6.0 release. |
Now that 2.5.0 has been released, I've re-enabled this feature in the developer branch. It should arrive in the next release. |
This issue is about the addition of an option that makes the music loader rely on the ExoPlayer metadata engine. Previously, I've rejected this feature as there were two main limitations with it:
Recently however, I've discovered that I could parallelize ExoPlayer's metadata extraction routine, which reduces manual extraction times from ~58ms per song (1000 songs -> 1 minute, 10000 songs -> 9 minutes) to only ~16ms (1000 songs -> 17 seconds, 10000 songs -> 3 minutes), which is a massive improvement.
Adding this would fix an uncountable amount of OEM-specific bugs, albeit the cost of a longer music loading process. Since the latter is still somewhat unfriendly, this will be an option and not a default feature.
Currently, this is blocked by #72, as the current hack we use to reload music will cause any setting for this feature not to be written.
The text was updated successfully, but these errors were encountered: