Zeugma440 / atldotnet

Fully managed, portable and easy-to-use C# library to read and edit audio data and metadata (tags) from various audio formats, playlists and CUE sheets
MIT License
460 stars 61 forks source link

Reading MP3 files whose ID3v2 tags contain multiple PRIV frames #254

Closed Numpsy closed 7 months ago

Numpsy commented 7 months ago

The problem

If I use ATL to read an .mp3 file whose ID3v2 tag contains multiple PRIV frames, then the AdditionalFields property seems to only contain the last one. Is there a way to get the rest of the information?

Environment

Details

I'm actually attempting to read XMP data from mp3 files, which is stored in a PRIV frame in the ID3v2 tag. If the XMP is the only PRIV frame in the file, then I can read the data out (and I think update it if needed as well).

However, if there are multiple PRIV frames then I only see the last one, so it only works if the XMP frame is the last one. I guess there also wouldn't be a way to modify one of the frames and keep the other in that case either?

Thanks

Numpsy commented 7 months ago

To add a bit a extra information to the post from yesterday - One of the files I was testing with contains both an XMP PRIV frame and a PRIV frame with the identifier 'www.amazon.com` (which I gather contains metadata about who bought the track from Amazon for tracking purposes), but only one of those seems to be reported by ATL

Zeugma440 commented 7 months ago

Hi there and thanks for your feedback~

To be honest, I never had to focus on the PRIV field until now, that's why support is lacking.

I can definitely solve that, but I'd be more efficient if I had the file in question (the one with two PRIV fields). Could you send it to my e-mail ([github username][at][hot ma il][dot][com]) through a 3rd party hosting site (e.g. dropbox, wetransfer, mega...)?

Thanks in advance~

Numpsy commented 7 months ago

I've emailed you a link to a file.

Zeugma440 commented 7 months ago

Proper support for PRIV frames will be available on next release ✅

I've updated the dedicated page about non-standard fields to document how.

Stay tuned~

Numpsy commented 7 months ago

Thanks :-)

Zeugma440 commented 7 months ago

Fix is available in today's v5.20

Please close the issue if it works on your side~

Numpsy commented 7 months ago

Thanks, I'll give it a go.

Numpsy commented 7 months ago

I've done a bit of testing and it seems to be reading and writing ok, so I'll close it as the situation with multiple PRIV frames seems to be solved :-)

Numpsy commented 6 months ago

Hmm, maybe I was a bit premature with the comment about writing ok - I was just having a test with reading a file that was updated with ATL using the Adobe (C++) XMP SDK and it didn't seem to work. Trying to debug through it, it looks like it doesn't expect this text encoding byte to be present inside the PRIV tag before the "XMP\0":

image

The description of the PRIV frame at https://mutagen-specs.readthedocs.io/en/latest/id3/id3v2.4.0-frames.html#private-frame doesn't mention an encoding byte being present in any case ?

Zeugma440 commented 6 months ago

You are right, sorry about that. I misread the specs regarding the encoding of the Owner field.

I've just pushed the changes to the main branch : 78ff27adbae3dc21f44967e7cf025e4d92bfec49

Do you need a new release or are you fine with the source?

NB : I still need a greenlight from you regarding XMP for MP4/M4A 5https://github.com/Zeugma440/atldotnet/discussions/257)

Numpsy commented 6 months ago

Thanks, and I don't have any rush for a release.

I still need a greenlight from you regarding XMP for MP4/M4A

Sorry about that, I've been doing too many things at once recently, I'll give that a test later.

Zeugma440 commented 6 months ago

The fix for PRIV frames has been released with today's v5.21

Numpsy commented 6 months ago

Thanks, It's working for me now

Zeugma440 commented 6 months ago

Awesome. Thanks for confirming 😉