Exemple #1
0
    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),
        })
Exemple #2
0
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),
    })
Exemple #3
0
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),
    })
Exemple #4
0
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)
Exemple #5
0
            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),
Exemple #6
0
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),
    })
Exemple #7
0
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),
    }
Exemple #8
0
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),
    }
Exemple #9
0
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)
Exemple #10
0
        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':
Exemple #11
0
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)