-
-
Notifications
You must be signed in to change notification settings - Fork 64
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
[Proposal] Add missing tags from audible aax files #121
Comments
I'd like to suggest a 3-level fix : 1/ I can certainly add make things easier by mapping some of these values to the fields present in 2/ I can also add some generic fields that can be used in other file formats to 3/ However, I do not wish to add AAX-specific fields (e.g. user alias, ASIN, subcategory) to Would that be fine to you ? |
I agree. But i guess Asin could be useful for amazon music downloads ... |
Already supported by ATL
Missing mappings; added for next release
New fields available through IMetaDataIO (for next release)
No support (left in track.AdditionalFields as MP4/AAX is the only standard where that field actually exists)
|
There are some other tags that would be nice (especially some for audio books, which I'm highly interested in). Here is a huge list of the MP3Tag's mapping tables, which in most cases makes sense to me. The specific tags that I would love to see (I extracted a listing for you, maybe it helps): //
Here I created a fully unmodified short summary of all property mappings (maybe helpful to check existing mappings) Notes:
Mapping lists and references, I found pretty useful:
|
Thanks for your feedback @sandreas First things first, don't forget these fields can already be written by the library, using Secondly, I'm sensitive to your needs as an editor of audiobook software. Related fields that have equivalents in multiple tagging systems will be implemented generically. However, don't ask me to implement every known metadata, using these huge mapping lists as specification. I really prefer to invest my time in something users actually need. Last but not least, I did see your hint at Matroska 😁 Let's say I haven't abandoned the idea of making ATL compatible with that spec. I just need to gather enough time to wrap my brain around it and design an efficient approach. MKV is not your average metadata spec, it's clockwork. |
I know, ATL is very flexible. I'm promoting your library everywhere I can (e.g. Hackernews), because I think it is an awesome piece of software.
I already extended
Since I am the author of m4b-tool, I absolutely understand and support this approach. Currently I'm trying to port However, the big mapping lists are not really helpful, because if a field is not 100% mappable, the mapping approaches differ depending on which library or software is used ( I thought over creating a JSON file with a searchable HTML-Document to look up the POSSIBLE mappings with notes about how specific implementations look like - so it would be possible to auto generate mapping code (no reason to write code that can be generated), or make it even configurable to be more flexible with an overridable method for public class MyTrack : Track
{
// this is new
public override string? MapAdditionalField(Format format, string key) => format.ID switch
{
// Format is not really appropriate, because it should be the TaggingFormat (id3v2, etc.), not the audio file format
AudioDataIOFactory.CID_MP3 => MapMp3(key),
AudioDataIOFactory.CID_MP4 => MapMp4(key),
_ => null
};
private static string? MapMp3(string key) => key switch
{
nameof(AlbumSort) => "TSOA",
nameof(Group) => "TIT1",
_ => null,
};
private static string? MapMp4(string key) => key switch
{
nameof(AlbumSort) => "soal",
nameof(Group) => "©grp",
_ => null,
};
} But I tell you something... Instead of hacking my Ideas into comments of issues, I'll think over this carefully and submit PRs after understanding your code better. If something is not to your liking, we discuss it in the PRs. Until then I would really appreciate the following 8 Properties in
|
PS : Don't hesitate to use GitHub Discussions threads to ask about the code. I'll happily answer! |
Ok, here is a huge Post for discussion ;) #133 |
@sandreas Almost there, but I have a question for you
Knowing that field is represented by an integer in the MP4 format, how would you handle having |
I found that out later after posting this. So my solution was the following:
In words:
This is not the solution I liked most, but it works pretty well. |
Thanks for the quick reply. I chose for the MP4 writer to ignore non-integer values while logging a warning. As you may expect, I don't intend to create non-standard fallback fields. Anyway, you'll soon have 8 new standard fields to play with 😄 |
I'm fine with that.
Yeah and this is a good decision :-)
Cool, thank you very much. I have to check how this works together with my own implementation of 19 new fields by just mapping I think there is some serious work to do updating Great work, as always, thank you very much. |
Your work there (and earlier post listing these fields and their mapping) helped me go super fast through today's update, thanks a bunch !
Any specific feature / pattern in mind ? |
Available in today's v4.12 |
Awesome, thank you.
No, I just have to remove the properties that are now in the base class from my Well, while I like the I don't know exactly what happens if I set |
Err... editing both a standard field and its equivalent using I guess I can manage to ignore what is inside |
So maybe I'll give you an example to illustrate the problem:
The Another thing that would be very handy and is missing: The Properties cannot be loaded or saved by a string / enum / Collection: var title = track.GetProperty(TrackProperty.Title);
track.Set(TrackProperty.Title, "My Title");
foreach(var (propertyName, propertyValue) in track.GetAllProperties()) {
// ...
} So one solution might be to have just one Dictionary to store everything: So what I would do (in the long term):
For a list of possible internal names, you could take a look at: https://docs.mp3tag.de/mapping/ But maybe this should be a discussion, because this would be a HUGE change (although the interface would basically stay the same) |
Continued on #167 - the issue itself has been fixed |
The problem
When opening a
.aax
file, many fields wont be filled out. Instead,track.AdditionalFields
has alot of unmapped properties.Lurking throught the decompiled sources of Audible/AAXSDKRT and some guesswork, i found out what most of the tags mean.
The resulting model of the sample aax file:
Environment
Code To Reproduce Issue
Sample file: https://github.com/inAudible-NG/audible-samples/blob/master/Audible_AAX_sample_62689101.aax
My (very raw) approach: https://gist.github.com/JKamsker/d3333c78789b0e878ba4bea9e3d457ea
This is only meant as inspiration for you to implement in this project. I'm not doing this myself, because i dont know your code style enought.
The text was updated successfully, but these errors were encountered: