quodlibet / quodlibet

Music player and music library manager for Linux, Windows, and macOS
https://quodlibet.readthedocs.io
GNU General Public License v2.0
1.45k stars 224 forks source link

No support for m4a iTunes classical work and movement tags #2932

Open willemcvu opened 6 years ago

willemcvu commented 6 years ago

Quodlibet can't read/sort by m4a iTunes work, movement, movement number, and movement count tags. As someone who has 25,000 classical tracks all perfectly tagged in this iTunes format, and trying to escape from iTunes, being able to see and sort by this metadata is important.

A sample output from mutagen-inspect on a fully-tagged file (both Picard and iTunes) is as follows:

- MPEG-4 audio (ALAC), 841.69 seconds, 717436 bps (audio/mp4)
----:com.apple.iTunes:ARTISTS=MP4FreeForm(b'Johannes Brahms', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:ASIN=MP4FreeForm(b'B00114LF4E', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:BARCODE=MP4FreeForm(b'028947801559', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:CATALOGNUMBER=MP4FreeForm(b'478 015-5', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:CONDUCTOR=MP4FreeForm(b'Herbert von Karajan', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:ISRC=MP4FreeForm(b'GBF075910091', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:LABEL=MP4FreeForm(b'Decca Records', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:LANGUAGE=MP4FreeForm(b'zxx', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:MEDIA=MP4FreeForm(b'CD', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:MusicBrainz Album Artist Id=MP4FreeForm(b'd770374d-05e9-4ed3-a068-3fbd4e6e4dd6', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:MusicBrainz Album Artist Id=MP4FreeForm(b'd2ced2f1-6b58-47cf-ae87-5943e2ab6d99', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:MusicBrainz Album Id=MP4FreeForm(b'12d9c04e-ec0c-4c02-a93d-f031e21a93b7', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:MusicBrainz Album Release Country=MP4FreeForm(b'XE', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:MusicBrainz Album Status=MP4FreeForm(b'official', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:MusicBrainz Album Type=MP4FreeForm(b'album', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:MusicBrainz Album Type=MP4FreeForm(b'compilation', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:MusicBrainz Artist Id=MP4FreeForm(b'c70d12a2-24fe-4f83-a6e6-57d84f8efb51', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:MusicBrainz Release Group Id=MP4FreeForm(b'1d5b26b5-1d8d-4eef-8f2b-efeab30c036e', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:MusicBrainz Release Track Id=MP4FreeForm(b'2a68c249-39c3-3c8c-8bb9-7e36389feaa0', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:MusicBrainz Track Id=MP4FreeForm(b'1878d630-676a-4200-9783-f5afab90cbb9', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:MusicBrainz Work Id=MP4FreeForm(b'64f46c8f-49c0-3de1-a356-a0ac765e17ae', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:SCRIPT=MP4FreeForm(b'Latn', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:SUBTITLE=MP4FreeForm(b'I. Un poco sostenuto - Allegro', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:WORK=MP4FreeForm(b'Sinfonie Nr. 1 c-Moll, op. 68 {Symphony no. 1 in C minor}', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:iTunes_CDDB_1=MP4FreeForm(b'8811E408+343683+8+183+63310+104908+127228+206995+251800+294253+319233', <AtomDataType.UTF8: 1>)
----:com.apple.iTunes:iTunes_CDDB_TrackNumber=MP4FreeForm(b'1', <AtomDataType.UTF8: 1>)
aART=Wiener Philharmoniker, Herbert von Karajan
covr=[43510 bytes of data]
disk=(1, 9)
shwm=1
soaa=Wiener Philharmoniker, Karajan, Herbert von
soar=Karajan, Herbert von
trkn=(1, 8)
©ART=Herbert von Karajan
©alb=Karajan: The Legendary Decca Recordings
©day=2008-02-04
©gen=Classical,Orchestral
©grp=Sinfonie Nr. 1 c-Moll, op. 68
©mvc=4
©mvi=1
©mvn=Un poco sostenuto, Allegro
©nam=Symphony no. 1 in C minor, op. 68: I. Un poco sostenuto, Allegro
©too=X Lossless Decoder 20161007, QuickTime 7.7.3

I'm a noob to this project, and haven't gotten a chance to really dig in... so apologies if I'm ignorant, but is adding support for these new tags as simple as editing /formats/mp4.py and adding the correct tag identifiers?

"\xa9mvc": "movementcount",
"\xa9mvi": "movementnumber",
"\xa9mvn": "movement",
"\xa9nam": "work",

Thanks!

frestr commented 6 years ago

is adding support for these new tags as simple as editing /formats/mp4.py and adding the correct tag identifiers?

That should be enough (in addition to changing the tests a little), judging by earlier commits.

lazka commented 6 years ago

Some things to consider:

declension commented 3 years ago

Any further updates?