[BUG] Parsing mp3 file w/ valid TDRC tag does not populate year
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:
- Open a valid mp3 file w/ TinyTag
- See
Found id3 Frame TDRCin the program output - 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
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}
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 👍
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.
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!