Exemple #1
0
    def set_metadata(self, metadata):
        """takes a MetaData object and sets this track's metadata

        this metadata includes track name, album name, and so on
        raises IOError if unable to write the file"""

        from audiotools.id3 import ID3v2Comment
        from audiotools.id3 import ID3v22Comment
        from audiotools.id3 import ID3v23Comment
        from audiotools.id3 import ID3v24Comment
        from audiotools.id3 import ID3CommentPair
        from audiotools.id3v1 import ID3v1Comment

        if metadata is None:
            return self.delete_metadata()

        if (not (isinstance(metadata, ID3v2Comment)
                 or isinstance(metadata, ID3CommentPair)
                 or isinstance(metadata, ID3v1Comment))):
            from audiotools import config

            DEFAULT_ID3V2 = "id3v2.3"
            DEFAULT_ID3V1 = "id3v1.1"

            id3v2_class = {
                "id3v2.2": ID3v22Comment,
                "id3v2.3": ID3v23Comment,
                "id3v2.4": ID3v24Comment,
                "none": None
            }.get(config.get_default("ID3", "id3v2", DEFAULT_ID3V2),
                  DEFAULT_ID3V2)
            id3v1_class = {
                "id3v1.1": ID3v1Comment,
                "none": None
            }.get(config.get_default("ID3", "id3v1", DEFAULT_ID3V1),
                  DEFAULT_ID3V1)
            if (id3v2_class is not None) and (id3v1_class is not None):
                self.update_metadata(
                    ID3CommentPair.converted(metadata,
                                             id3v2_class=id3v2_class,
                                             id3v1_class=id3v1_class))
            elif id3v2_class is not None:
                self.update_metadata(id3v2_class.converted(metadata))
            elif id3v1_class is not None:
                self.update_metadata(id3v1_class.converted(metadata))
            else:
                return
        else:
            self.update_metadata(metadata)
Exemple #2
0
    def set_metadata(self, metadata):
        """takes a MetaData object and sets this track's metadata

        this metadata includes track name, album name, and so on
        raises IOError if unable to write the file"""

        from audiotools.id3 import ID3v2Comment
        from audiotools.id3 import ID3v22Comment
        from audiotools.id3 import ID3v23Comment
        from audiotools.id3 import ID3v24Comment
        from audiotools.id3 import ID3CommentPair
        from audiotools.id3v1 import ID3v1Comment

        if metadata is None:
            return self.delete_metadata()

        if (not (isinstance(metadata, ID3v2Comment) or
                 isinstance(metadata, ID3CommentPair) or
                 isinstance(metadata, ID3v1Comment))):
            from audiotools import config

            DEFAULT_ID3V2 = "id3v2.3"
            DEFAULT_ID3V1 = "id3v1.1"

            id3v2_class = {"id3v2.2": ID3v22Comment,
                           "id3v2.3": ID3v23Comment,
                           "id3v2.4": ID3v24Comment,
                           "none": None}.get(config.get_default("ID3",
                                                                "id3v2",
                                                                DEFAULT_ID3V2),
                                             DEFAULT_ID3V2)
            id3v1_class = {"id3v1.1": ID3v1Comment,
                           "none": None}.get(config.get_default("ID3",
                                                                "id3v1",
                                                                DEFAULT_ID3V1),
                                             DEFAULT_ID3V1)
            if (id3v2_class is not None) and (id3v1_class is not None):
                self.update_metadata(
                    ID3CommentPair.converted(metadata,
                                             id3v2_class=id3v2_class,
                                             id3v1_class=id3v1_class))
            elif id3v2_class is not None:
                self.update_metadata(id3v2_class.converted(metadata))
            elif id3v1_class is not None:
                self.update_metadata(id3v1_class.converted(metadata))
            else:
                return
        else:
            self.update_metadata(metadata)
    def set_metadata(self, metadata):
        """Takes a MetaData object and sets this track's metadata.

        This metadata includes track name, album name, and so on.
        Raises IOError if unable to write the file."""

        if (metadata is None):
            return

        if (not (isinstance(metadata, ID3v2Comment) or
                 isinstance(metadata, ID3CommentPair) or
                 isinstance(metadata, ID3v1Comment))):
            DEFAULT_ID3V2 = "id3v2.3"
            DEFAULT_ID3V1 = "id3v1.1"

            id3v2_class = {"id3v2.2": ID3v22Comment,
                           "id3v2.3": ID3v23Comment,
                           "id3v2.4": ID3v24Comment,
                           "none": None}.get(config.get_default("ID3",
                                                                "id3v2",
                                                                DEFAULT_ID3V2),
                                             DEFAULT_ID3V2)
            id3v1_class = {"id3v1.1": ID3v1Comment,
                           "none": None}.get(config.get_default("ID3",
                                                                "id3v1",
                                                                DEFAULT_ID3V1))
            if ((id3v2_class is not None) and (id3v1_class is not None)):
                self.update_metadata(
                    ID3CommentPair.converted(metadata,
                                             id3v2_class=id3v2_class,
                                             id3v1_class=id3v1_class))
            elif (id3v2_class is not None):
                self.update_metadata(id3v2_class.converted(metadata))
            elif (id3v1_class is not None):
                self.update_metadata(id3v1_class.converted(metadata))
            else:
                return
        else:
            self.update_metadata(metadata)
Exemple #4
0
    def set_metadata(self, metadata):
        """Takes a MetaData object and sets this track's metadata.

        This metadata includes track name, album name, and so on.
        Raises IOError if unable to write the file."""

        if (metadata is None):
            return

        if ((not isinstance(metadata, ID3v2Comment)) and
            (not isinstance(metadata, ID3v1Comment))):
            DEFAULT_ID3V2 = "id3v2.3"
            DEFAULT_ID3V1 = "id3v1.1"

            id3v2_class = {"id3v2.2": ID3v22Comment,
                           "id3v2.3": ID3v23Comment,
                           "id3v2.4": ID3v24Comment,
                           "none": None}.get(config.get_default("ID3",
                                                                "id3v2",
                                                                DEFAULT_ID3V2),
                                             DEFAULT_ID3V2)
            id3v1_class = {"id3v1.1": ID3v1Comment,
                           "none": None}.get(config.get_default("ID3",
                                                                "id3v1",
                                                                DEFAULT_ID3V1))
            if ((id3v2_class is not None) and (id3v1_class is not None)):
                metadata = ID3CommentPair.converted(metadata,
                                                    id3v2_class=id3v2_class,
                                                    id3v1_class=id3v1_class)
            elif (id3v2_class is not None):
                metadata = id3v2_class.converted(metadata)
            elif (id3v1_class is not None):
                metadata = id3v1_class.converted(metadata)
            else:
                return

        #get the original MP3 data
        f = file(self.filename, "rb")
        MP3Audio.__find_mp3_start__(f)
        data_start = f.tell()
        MP3Audio.__find_last_mp3_frame__(f)
        data_end = f.tell()
        f.seek(data_start, 0)
        mp3_data = f.read(data_end - data_start)
        f.close()

        if (isinstance(metadata, ID3CommentPair)):
            id3v2 = metadata.id3v2.build()
            id3v1 = metadata.id3v1.build_tag()
        elif (isinstance(metadata, ID3v2Comment)):
            id3v2 = metadata.build()
            id3v1 = ""
        elif (isinstance(metadata, ID3v1Comment)):
            id3v2 = ""
            id3v1 = metadata.build_tag()

        #write id3v2 + data + id3v1 to file
        f = file(self.filename, "wb")
        f.write(id3v2)
        f.write(mp3_data)
        f.write(id3v1)
        f.close()