tinytag icon indicating copy to clipboard operation
tinytag copied to clipboard

[BUG] Parsing mp3 file w/ valid TDRC tag does not populate year

Open Uninen opened this issue 3 years ago • 4 comments

Describe the bug

When parsing a mp3 file w/ valid v2.4 metadata and a TDRC frame, TinyTag does not populate the year attribute in the output.

To Reproduce

Steps to reproduce the behavior:

  1. Open a valid mp3 file w/ TinyTag
  2. See Found id3 Frame TDRC in the program output
  3. Resulting dict still has "year": null

Expected behavior

Valid timestamps (yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddTHH, yyyy-MM-ddTHH:mm and yyyy-MM-ddTHH:mm:ss) should result in year attribute populated.

Sample File

https://www.dropbox.com/s/lz6vlzhw18znqp8/cdwal5Kw3Fc.mp3?dl=0

Uninen avatar Sep 01 '22 15:09 Uninen

Opening above 1s test file with following code:

from tinytag import TinyTag

tag2 = TinyTag.get('test.mp3')
print(tag2)

Outputs:

'Found id3 v2.4'
'Found id3 Frame TXXX at 20-38 of 2078'
'Setting field "text" to "major_brandmp42"'
'Found id3 Frame TXXX at 48-65 of 2078'
'Found id3 Frame TXXX at 75-103 of 2078'
'Found id3 Frame TPE1 at 113-126 of 2078'
'Setting field "artist" to "Test Artist"'
'Found id3 Frame TIT2 at 136-148 of 2078'
'Setting field "title" to "Test title"'
'Found id3 Frame TDRC at 158-164 of 2078'
'Found id3 Frame TSSE at 174-189 of 2078'
'Found id3 Frame  at 199-199 of 2078'
{"album": null, "albumartist": null, "artist": "Test Artist", "audio_offset": 199, "bitrate": 115.2, "channels": 2, "comment": null, "composer": null, "disc": null, "disc_total": null, "duration": 0.1306122448979592, "extra": {"text": "major_brandmp42"}, "filesize": 2078, "genre": null, "samplerate": 44100, "title": "Test title", "track": null, "track_total": null, "year": null}

Uninen avatar Sep 01 '22 15:09 Uninen

I'm not too familiar with ID3 tags nor this repo but mapping "TDRC": "year" in FRAME_ID_TO_FIELD ( https://github.com/devsnd/tinytag/blob/master/tinytag/tinytag.py#L484) seems to fix the issue. Not sure if it has any side effects, tho. I'm happy to write a PR if it helps 👍

Uninen avatar Sep 01 '22 15:09 Uninen

Looks like the TDRC frame was added in ID3v2.4: https://eyed3.readthedocs.io/en/latest/compliance.html#v2-4-2-3-mappings

Since the README of tinytag mentions year or data as string (should read date instead of data) after the year attribute, I think your mapping should be enough.

mathiascode avatar Sep 01 '22 19:09 mathiascode

I created a PR for the fix. The tests broke with the change because few of the sample mp3:s had the TDRC frame and did not previously find a year but now do. I just fixed those test fixture, didn't write any new tests for this.

All the tests pass for me locally at least (the PR didn't have permissions to run them yet).

I hope this helps! 👍

PS. Thank You for this library -- it's a great tool!

Uninen avatar Sep 02 '22 01:09 Uninen