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 elif (self.get_metadata() is not None): #current file has metadata, so replace it with new metadata self.update_metadata(ID3v22Comment.converted(metadata)) else: #current file has no metadata, so append new ID3 block import tempfile from .bitstream import BitstreamRecorder def chunk_filter(chunks, id3_chunk_data): for chunk in chunks: yield chunk yield AIFF_Chunk("ID3 ", len(id3_chunk_data), id3_chunk_data) #turn our ID3v2.2 tag into a raw binary chunk id3_chunk = BitstreamRecorder(0) ID3v22Comment.converted(metadata).build(id3_chunk) id3_chunk = id3_chunk.data() #generate a temporary AIFF file in which our new ID3v2.2 chunk #is appended to the file's set of chunks new_aiff = tempfile.NamedTemporaryFile(suffix=self.SUFFIX) self.__class__.aiff_from_chunks(new_aiff.name, chunk_filter(self.chunks(), id3_chunk)) #replace the existing file with data from the temporary file new_file = open(new_aiff.name, 'rb') old_file = open(self.filename, 'wb') transfer_data(new_file.read, old_file.write) old_file.close() new_file.close()
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 else: self.update_metadata(ID3v22Comment.converted(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 import tempfile id3_chunk = ID3v22Comment.converted(metadata).build() new_aiff = tempfile.TemporaryFile() new_aiff.seek(12, 0) id3_found = False for (chunk_id, chunk_length, chunk_file) in self.chunk_files(): if (chunk_id != 'ID3 '): new_aiff.write( self.CHUNK_HEADER.build( Con.Container(chunk_id=chunk_id, chunk_length=chunk_length))) transfer_data(chunk_file.read, new_aiff.write) else: new_aiff.write( self.CHUNK_HEADER.build( Con.Container(chunk_id='ID3 ', chunk_length=len(id3_chunk)))) new_aiff.write(id3_chunk) id3_found = True if (not id3_found): new_aiff.write( self.CHUNK_HEADER.build( Con.Container(chunk_id='ID3 ', chunk_length=len(id3_chunk)))) new_aiff.write(id3_chunk) header = Con.Container(aiff_id='FORM', aiff_size=new_aiff.tell() - 8, aiff_type='AIFF') new_aiff.seek(0, 0) new_aiff.write(self.AIFF_HEADER.build(header)) new_aiff.seek(0, 0) f = open(self.filename, 'wb') transfer_data(new_aiff.read, f.write) new_aiff.close() f.close()
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 import tempfile id3_chunk = ID3v22Comment.converted(metadata).build() new_aiff = tempfile.TemporaryFile() new_aiff.seek(12, 0) id3_found = False for (chunk_id, chunk_length, chunk_file) in self.chunk_files(): if (chunk_id != 'ID3 '): new_aiff.write(self.CHUNK_HEADER.build( Con.Container(chunk_id=chunk_id, chunk_length=chunk_length))) transfer_data(chunk_file.read, new_aiff.write) else: new_aiff.write(self.CHUNK_HEADER.build( Con.Container(chunk_id='ID3 ', chunk_length=len(id3_chunk)))) new_aiff.write(id3_chunk) id3_found = True if (not id3_found): new_aiff.write(self.CHUNK_HEADER.build( Con.Container(chunk_id='ID3 ', chunk_length=len(id3_chunk)))) new_aiff.write(id3_chunk) header = Con.Container( aiff_id='FORM', aiff_size=new_aiff.tell() - 8, aiff_type='AIFF') new_aiff.seek(0, 0) new_aiff.write(self.AIFF_HEADER.build(header)) new_aiff.seek(0, 0) f = open(self.filename, 'wb') transfer_data(new_aiff.read, f.write) new_aiff.close() f.close()
def set_metadata(self, metadata): if (metadata is None): return import tempfile id3_chunk = ID3v22Comment.converted(metadata).build() new_aiff = tempfile.TemporaryFile() new_aiff.seek(12, 0) id3_found = False for (chunk_id, chunk_length, chunk_file) in self.chunk_files(): if (chunk_id != 'ID3 '): new_aiff.write( self.CHUNK_HEADER.build( construct.Container(chunk_id=chunk_id, chunk_length=chunk_length))) transfer_data(chunk_file.read, new_aiff.write) else: new_aiff.write( self.CHUNK_HEADER.build( construct.Container(chunk_id='ID3 ', chunk_length=len(id3_chunk)))) new_aiff.write(id3_chunk) id3_found = True if (not id3_found): new_aiff.write( self.CHUNK_HEADER.build( construct.Container(chunk_id='ID3 ', chunk_length=len(id3_chunk)))) new_aiff.write(id3_chunk) header = construct.Container(aiff_id='FORM', aiff_size=new_aiff.tell() - 8, aiff_type='AIFF') new_aiff.seek(0, 0) new_aiff.write(self.AIFF_HEADER.build(header)) new_aiff.seek(0, 0) f = open(self.filename, 'wb') transfer_data(new_aiff.read, f.write) new_aiff.close() f.close()