def __init__(self, filename, **kwargs): super(Mp3File, self).__init__(filename, **kwargs) self.tag_map = self.tag_map.copy() self.tag_map.update({ '#codec': TAG_MAP_ENTRY(getter=lambda afile, norm_key: 'mp3', type=str), '#bitspersample': TAG_MAP_ENTRY(getter=lambda afile, norm_key: None, type=int), })
class OggVorbisFile(OggFile): tag_format = "OggVorbis" mutagen_kls = mutagen.oggvorbis.OggVorbis _TAG_MAP = OggFile._TAG_MAP.copy() _TAG_MAP.update({ '#codec': TAG_MAP_ENTRY(getter=lambda afile, norm_key: 'Ogg Vorbis', type=str), '#bitspersample': TAG_MAP_ENTRY(getter=lambda afile, norm_key: None, type=int), })
class WavePackFile(Apev2File): tag_format = "WavPack" mutagen_kls = mutagen.wavpack.WavPack _TAG_MAP = Apev2File._TAG_MAP.copy() _TAG_MAP.update({ '#codec': TAG_MAP_ENTRY(getter=lambda afile, norm_key: 'WavePack', type=str), '#bitrate': TAG_MAP_ENTRY(getter=lambda afile, norm_key: None, type=int), '#bitspersample': TAG_MAP_ENTRY(getter=lambda afile, norm_key: None, type=int), })
class Apev2File(AudioFile): tag_format = "APEv2" mutagen_kls = mutagen.apev2.APEv2File _TAG_MAP = { 'tracktitle': TAG_MAP_ENTRY(getter='Title', setter='Title', type=str), 'artist': TAG_MAP_ENTRY(getter='Artist', setter='Artist', type=str), 'album': TAG_MAP_ENTRY(getter='Album', setter='Album', type=str), 'albumartist': TAG_MAP_ENTRY(getter='Album Artist', setter='Album Artist', type=str), 'composer': TAG_MAP_ENTRY(getter='Composer', setter='Composer', type=str), 'tracknumber': TAG_MAP_ENTRY(getter=get_tracknum, setter=set_tracknum, remover='Track', type=int), 'totaltracks': TAG_MAP_ENTRY(getter=get_totaltracks, setter=set_totaltracks, remover='Track', type=int), 'discnumber': TAG_MAP_ENTRY(getter=get_discnum, setter=set_discnum, remover='Disc', type=int), 'totaldiscs': TAG_MAP_ENTRY(getter=get_totaldiscs, setter=set_totaldiscs, remover='Disc', type=int), 'genre': TAG_MAP_ENTRY(getter='Genre', setter='Genre', type=str), 'year': TAG_MAP_ENTRY(getter='Year', setter='Year', type=int, sanitizer=util.sanitize_year), 'comment': TAG_MAP_ENTRY(getter='Comment', setter='Comment', type=str), 'lyrics': TAG_MAP_ENTRY(getter='Lyrics', setter='Lyrics', type=str), 'isrc': TAG_MAP_ENTRY(getter='ISRC', setter='ISRC', type=str), 'compilation': TAG_MAP_ENTRY(getter='Compilation', setter='Compilation', type=int, sanitizer=util.sanitize_bool), 'artwork': TAG_MAP_ENTRY(getter=get_pictures, setter=set_pictures, remover=list(pic_tag2type.keys()), type=Artwork), '#codec': TAG_MAP_ENTRY(getter=lambda afile, norm_key: None, type=str), '#channels': TAG_MAP_ENTRY(getter=lambda afile, norm_key: None, type=int), '#bitspersample': TAG_MAP_ENTRY(getter=lambda afile, norm_key: None, type=int), '#samplerate': TAG_MAP_ENTRY(getter=lambda afile, norm_key: None, type=int), } def _ft_getter(self, key): val = self.mfile.tags.get(key, None) if val is not None: val = str(val) return val def _ft_setter(self, key, md_val, appendable=True): self.mfile.tags[key] = str(md_val)
mime = { 'image/jpeg': 'JPG', 'image/jpg': 'JPG', 'image/png': 'PNG' }[art.mime.lower()] else: mime = art.mime afile.mfile.tags.add( kls(data=art.raw, type=art.pic_type, desc=str(i), mime=mime)) # https://github.com/tilo/ID3/tree/master/docs _TAG_MAP_ID3_1 = { 'tracktitle': TAG_MAP_ENTRY(getter='title', setter='title', type=str), 'artist': TAG_MAP_ENTRY(getter='artist', setter='artist', type=str), 'album': TAG_MAP_ENTRY(getter='album', setter='album', type=str), 'year': TAG_MAP_ENTRY(getter='year', setter='year', type=int, sanitizer=util.sanitize_year), 'comment': TAG_MAP_ENTRY(getter='comment', setter='comment', type=str), 'tracknumber': TAG_MAP_ENTRY(getter='track', setter='track', type=int), 'genre': TAG_MAP_ENTRY(getter='genre', setter='genre', type=str),
class EasyMp4File(Mp4File): tag_format = "mp4" mutagen_kls = mutagen.easymp4.EasyMP4 _TAG_MAP = Mp4File._TAG_MAP.copy() _TAG_MAP.update({ 'tracktitle': TAG_MAP_ENTRY(getter='title', setter='title', type=str), 'artist': TAG_MAP_ENTRY(getter='artist', setter='artist', type=str), 'album': TAG_MAP_ENTRY(getter='album', setter='album', type=str), 'albumartist': TAG_MAP_ENTRY(getter='albumartist', setter='albumartist', type=str), 'tracknumber': TAG_MAP_ENTRY(getter=util.get_easy_tracknum, setter=util.set_easy_tracknum, type=str), 'totaltracks': TAG_MAP_ENTRY(getter=util.get_easy_totaltracks, setter=util.set_easy_totaltracks, type=str), 'discnumber': TAG_MAP_ENTRY(getter=util.get_easy_discnum, setter=util.set_easy_discnum, type=str), 'totaldiscs': TAG_MAP_ENTRY(getter=util.get_easy_totaldiscs, setter=util.set_easy_totaldiscs, type=str), 'genre': TAG_MAP_ENTRY(getter='genre', setter='genre', type=str), 'year': TAG_MAP_ENTRY( getter='date', setter='date', type=int, ), 'compilation': TAG_MAP_ENTRY(getter='compilation', setter='compilation', type=bool), 'artwork': TAG_MAP_ENTRY(getter='covr', type=Artwork), })
class Mp4File(AudioFile): tag_format = "mp4" mutagen_kls = mutagen.mp4.MP4 _TAG_MAP = { 'tracktitle': TAG_MAP_ENTRY(getter='©nam', setter='©nam', type=str), 'artist': TAG_MAP_ENTRY(getter='©ART', setter='©ART', type=str), 'album': TAG_MAP_ENTRY(getter='©alb', setter='©alb', type=str), 'albumartist': TAG_MAP_ENTRY(getter='aART', setter='aART', type=str), 'composer': TAG_MAP_ENTRY(getter='©wrt', setter='©wrt', type=str), 'tracknumber': TAG_MAP_ENTRY(getter=get_tracknum, setter=set_tracknum, type=str), 'totaltracks': TAG_MAP_ENTRY(getter=get_totaltracks, setter=set_totaltracks, type=str), 'discnumber': TAG_MAP_ENTRY(getter=get_discnum, setter=set_discnum, type=str), 'totaldiscs': TAG_MAP_ENTRY(getter=get_totaldiscs, setter=set_totaldiscs, type=str), 'genre': TAG_MAP_ENTRY(getter='©gen', setter='©gen', type=str), 'year': TAG_MAP_ENTRY( getter='©day', setter='©day', type=int, ), 'lyrics': TAG_MAP_ENTRY(getter='©lyr', setter='©lyr', type=str), 'comment': TAG_MAP_ENTRY(getter='©cmt', setter='©cmt', type=str), 'compilation': TAG_MAP_ENTRY( getter='cpil', setter='cpil', type=bool, ), 'artwork': TAG_MAP_ENTRY(getter=get_artwork, setter=set_artwork, type=Artwork), }
class Mp4File(AudioFile): tag_format = "mp4" mutagen_kls = mutagen.mp4.MP4 _TAG_MAP = { 'tracktitle': TAG_MAP_ENTRY(getter='©nam', setter='©nam', type=str), 'artist': TAG_MAP_ENTRY(getter='©ART', setter='©ART', type=str), 'album': TAG_MAP_ENTRY(getter='©alb', setter='©alb', type=str), 'albumartist': TAG_MAP_ENTRY(getter='aART', setter='aART', type=str), 'composer': TAG_MAP_ENTRY(getter='©wrt', setter='©wrt', type=str), 'tracknumber': TAG_MAP_ENTRY(getter=get_tracknum, setter=set_tracknum, type=int), 'totaltracks': TAG_MAP_ENTRY(getter=get_totaltracks, setter=set_totaltracks, type=int), 'discnumber': TAG_MAP_ENTRY(getter=get_discnum, setter=set_discnum, type=int), 'totaldiscs': TAG_MAP_ENTRY(getter=get_totaldiscs, setter=set_totaldiscs, type=int), 'genre': TAG_MAP_ENTRY(getter='©gen', setter='©gen', type=str), 'year': TAG_MAP_ENTRY(getter='©day', setter='©day', type=int, sanitizer=util.sanitize_year), 'lyrics': TAG_MAP_ENTRY(getter='©lyr', setter='©lyr', type=str), 'isrc': TAG_MAP_ENTRY(getter=lambda f, k: freeform_get(f, _MP4_ISRC_KEY), setter=lambda f, k, v: freeform_set(f, _MP4_ISRC_KEY, v), remover=_MP4_ISRC_KEY, type=str), 'comment': TAG_MAP_ENTRY(getter='©cmt', setter='©cmt', type=str), 'compilation': TAG_MAP_ENTRY(getter='cpil', setter='cpil', type=bool, sanitizer=util.sanitize_bool), 'artwork': TAG_MAP_ENTRY(getter=get_artwork, setter=set_artwork, type=Artwork), }
class FlacFile(AudioFile): tag_format = "FLAC" mutagen_kls = mutagen.flac.FLAC _TAG_MAP = { 'tracktitle': TAG_MAP_ENTRY(getter='title', setter='title', type=str), 'artist': TAG_MAP_ENTRY(getter='artist', setter='artist', type=str), 'album': TAG_MAP_ENTRY(getter='album', setter='album', type=str), 'albumartist': TAG_MAP_ENTRY(getter='albumartist', setter='albumartist', type=str), 'composer': TAG_MAP_ENTRY(getter='composer', setter='composer', type=str), 'tracknumber': TAG_MAP_ENTRY(getter='tracknumber', setter='tracknumber', type=int), 'totaltracks': TAG_MAP_ENTRY(getter='tracktotal', setter='tracktotal', type=int), 'discnumber': TAG_MAP_ENTRY(getter='discnumber', setter='discnumber', type=int), 'totaldiscs': TAG_MAP_ENTRY(getter='disctotal', setter='disctotal', type=int), 'genre': TAG_MAP_ENTRY(getter='genre', setter='genre', type=str), 'year': TAG_MAP_ENTRY(getter=('date', 'originaldate'), setter=('date', 'originaldate'), type=int, sanitizer=util.sanitize_year), 'lyrics': TAG_MAP_ENTRY(getter='lyrics', setter='lyrics', type=str), 'isrc': TAG_MAP_ENTRY(getter='isrc', setter='isrc', type=str), 'comment': TAG_MAP_ENTRY(getter='comment', setter='comment', type=str), 'compilation': TAG_MAP_ENTRY(getter='compilation', setter='compilation', type=int, sanitizer=util.sanitize_bool), 'artwork': TAG_MAP_ENTRY(getter=get_pictures, setter=set_pictures, remover=rm_pictures, type=Artwork), '#codec': TAG_MAP_ENTRY(getter=lambda afile, norm_key: 'flac', type=str), } def _ft_setter(self, key, md_val, appendable=True): if self.appendable and appendable: self.mfile.tags[key] = [str(v) for v in md_val.values] else: self.mfile.tags[key] = str(md_val.value)
if afile.mfile.tags.version[:2] == (2, 2): kls = mutagen.id3.PIC else: kls = mutagen.id3.APIC tag = str(kls.__name__).strip(':') afile.mfile.tags.delall(tag) for i, art in enumerate(artworks.values): afile.mfile.tags.add(kls(data=art.raw, type=art.pic_type, desc=str(i))) # https://github.com/tilo/ID3/tree/master/docs _TAG_MAP_ID3_2_2 = { 'tracktitle': TAG_MAP_ENTRY(getter='TT2', setter='TT2', type=str), 'artist': TAG_MAP_ENTRY(getter='TP1', setter='TP1', type=str), 'album': TAG_MAP_ENTRY(getter='TAL', setter='TAL', type=str), 'albumartist': TAG_MAP_ENTRY(getter='TP2', setter='TP2', type=str), 'composer': TAG_MAP_ENTRY(getter='TCM', setter='TCM', type=str), 'tracknumber': TAG_MAP_ENTRY(getter=get_tracknumA, setter=set_tracknumA, type=str), 'totaltracks': TAG_MAP_ENTRY(getter=get_totaltracksA, setter=set_totaltracksA, type=str), 'discnumber': TAG_MAP_ENTRY(getter=get_discnumA, setter=set_discnumA, type=str), 'totaldiscs':
class OggFile(AudioFile): tag_format = "Ogg" mutagen_kls = mutagen.ogg.OggFileType _TAG_MAP = { 'tracktitle': TAG_MAP_ENTRY(getter='title', setter='title', type=str), 'artist': TAG_MAP_ENTRY(getter='artist', setter='artist', type=str), 'album': TAG_MAP_ENTRY(getter='album', setter='album', type=str), 'albumartist': TAG_MAP_ENTRY(getter='albumartist', setter='albumartist', type=str), 'composer': TAG_MAP_ENTRY(getter='composer', setter='composer', type=str), 'tracknumber': TAG_MAP_ENTRY(getter='tracknumber', setter='tracknumber', type=str), 'totaltracks': TAG_MAP_ENTRY(getter='tracktotal', setter='tracktotal', type=str), 'discnumber': TAG_MAP_ENTRY(getter='discnumber', setter='discnumber', type=str), 'totaldiscs': TAG_MAP_ENTRY(getter='disctotal', setter='disctotal', type=str), 'genre': TAG_MAP_ENTRY(getter='genre', setter='genre', type=str), 'year': TAG_MAP_ENTRY( getter=('date', 'originaldate'), setter=('date', 'originaldate'), type=str, ), 'lyrics': TAG_MAP_ENTRY(getter='lyrics', setter='lyrics', type=str), 'comment': TAG_MAP_ENTRY(getter='comment', setter='comment', type=str), 'compilation': TAG_MAP_ENTRY( getter='compilation', setter='compilation', type=str, ), 'artwork': TAG_MAP_ENTRY(getter=get_pictures, setter=set_pictures, remover=rm_pictures, type=Artwork), } def _ft_setter(self, key, md_val, appendable=True): if self.appendable and appendable: self.mfile.tags[key] = [str(v) for v in md_val.values] else: self.mfile.tags[key] = str(md_val.value)