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""" 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)
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()