mutagen/flac.py
def save(self, filename=None, deleteid3=False):
        """Save metadata blocks to a file.

        If no filename is given, the one most recently loaded is used.
        """

        if filename is None:
            filename = self.filename
        f = open(filename, 'rb+')

        try:
            # Ensure we've got padding at the end, and only at the end.
            # If adding makes it too large, we'll scale it down later.
            self.metadata_blocks.append(Padding(b'\x00' * 1020))
            MetadataBlock.group_padding(self.metadata_blocks)

            header = self.__check_header(f)
            # "fLaC" and maybe ID3
            available = self.__find_audio_offset(f) - header
            data = MetadataBlock.writeblocks(self.metadata_blocks)

            # Delete ID3v2
            if deleteid3 and header > 4:
                available += header - 4
                header = 4

            if len(data) > available:
                # If we have too much data, see if we can reduce padding.
                padding = self.metadata_blocks[-1]
                newlength = padding.length - (len(data) - available)
                if newlength > 0:
                    padding.length = newlength
                    data = MetadataBlock.writeblocks(self.metadata_blocks)
                    assert len(data) == available

            elif len(data) < available:
                # If we have too little data, increase padding.
                self.metadata_blocks[-1].length += (available - len(data))
                data = MetadataBlock.writeblocks(self.metadata_blocks)
                assert len(data) == available

            if len(data) != available:
                # We couldn't reduce the padding enough.
                diff = (len(data) - available)
                insert_bytes(f, diff, header)

            f.seek(header - 4)
            f.write(b"fLaC" + data)

            # Delete ID3v1
            if deleteid3:
                try:
                    f.seek(-128, 2)
                except IOError:
                    pass
                else:
                    if f.read(3) == b"TAG":
                        f.seek(-128, 2)
                        f.truncate()
        finally:
            f.close()
def save(self, filename=None, deleteid3=False):
        if filename is None:
            filename = self.filename
        f = open(filename, 'rb+')

        try:
            # Ensure we've got padding at the end, and only at the end.
            # If adding makes it too large, we'll scale it down later.
            self.metadata_blocks.append(Padding(b'\x00' * 1020))
            MetadataBlock.group_padding(self.metadata_blocks)

            header = self.__check_header(f)
            # "fLaC" and maybe ID3
            available = self.__find_audio_offset(f) - header
            data = MetadataBlock.writeblocks(self.metadata_blocks)

            # Delete ID3v2
            if deleteid3 and header > 4:
                available += header - 4
                header = 4

            if len(data) > available:
                # If we have too much data, see if we can reduce padding.
                padding = self.metadata_blocks[-1]
                newlength = padding.length - (len(data) - available)
                if newlength > 0:
                    padding.length = newlength
                    data = MetadataBlock.writeblocks(self.metadata_blocks)
                    assert len(data) == available

            elif len(data) < available:
                # If we have too little data, increase padding.
                self.metadata_blocks[-1].length += (available - len(data))
                data = MetadataBlock.writeblocks(self.metadata_blocks)
                assert len(data) == available

            if len(data) != available:
                # We couldn't reduce the padding enough.
                diff = (len(data) - available)
                insert_bytes(f, diff, header)

            f.seek(header - 4)
            f.write(b"fLaC" + data)

            # Delete ID3v1
            if deleteid3:
                try:
                    f.seek(-128, 2)
                except IOError:
                    pass
                else:
                    if f.read(3) == b"TAG":
                        f.seek(-128, 2)
                        f.truncate()
        finally:
            f.close()
def save ( self , filename = None , deleteid3 = False ) : if filename is None : filename = self . filename f = open ( filename , 'rb+' ) try : # Ensure we've got padding at the end, and only at the end. # If adding makes it too large, we'll scale it down later. self . metadata_blocks . append ( Padding ( b'\x00' * 1020 ) ) MetadataBlock . group_padding ( self . metadata_blocks ) header = self . __check_header ( f ) # "fLaC" and maybe ID3 available = self . __find_audio_offset ( f ) - header data = MetadataBlock . writeblocks ( self . metadata_blocks ) # Delete ID3v2 if deleteid3 and header > 4 : available += header - 4 header = 4 if len ( data ) > available : # If we have too much data, see if we can reduce padding. padding = self . metadata_blocks [ - 1 ] newlength = padding . length - ( len ( data ) - available ) if newlength > 0 : padding . length = newlength data = MetadataBlock . writeblocks ( self . metadata_blocks ) assert len ( data ) == available elif len ( data ) < available : # If we have too little data, increase padding. self . metadata_blocks [ - 1 ] . length += ( available - len ( data ) ) data = MetadataBlock . writeblocks ( self . metadata_blocks ) assert len ( data ) == available if len ( data ) != available : # We couldn't reduce the padding enough. diff = ( len ( data ) - available ) insert_bytes ( f , diff , header ) f . seek ( header - 4 ) f . write ( b"fLaC" + data ) # Delete ID3v1 if deleteid3 : try : f . seek ( - 128 , 2 ) except IOError : pass else : if f . read ( 3 ) == b"TAG" : f . seek ( - 128 , 2 ) f . truncate ( ) finally : f . close ( )
Save metadata blocks to a file.

        If no filename is given, the one most recently loaded is used.
Save metadata blocks to a file .