'Parse a Vorbis comment from a file-like object.
Arguments:
errors (str): \'strict\', \'replace\', or \'ignore\'.
This affects Unicode decoding and how other malformed content
is interpreted.
framing (bool): if true, fail if a framing bit is not present
Framing bits are required by the Vorbis comment specification,
but are not used in FLAC Vorbis comment blocks.'

def load(self, fileobj, errors='replace', framing=True):

    try:
        vendor_length = cdata.uint_le(fileobj.read(4))
        self.vendor = fileobj.read(vendor_length).decode('utf-8', errors)
        count = cdata.uint_le(fileobj.read(4))
        for i in xrange(count):
            length = cdata.uint_le(fileobj.read(4))
            try:
                string = fileobj.read(length).decode('utf-8', errors)
            except (OverflowError, MemoryError):
                raise error(('cannot    read    %d    bytes,    too    large' % length))
            try:
                (tag, value) = string.split('=', 1)
            except ValueError as err:
                if (errors == 'ignore'):
                    continue
                elif (errors == 'replace'):
                    (tag, value) = ((u'unknown%d' % i), string)
                else:
                    reraise(VorbisEncodingError, err, sys.exc_info()[2])
            try:
                tag = tag.encode('ascii', errors)
            except UnicodeEncodeError:
                raise VorbisEncodingError(('invalid    tag    name    %r' % tag))
            else:
                if PY3:
                    tag = tag.decode('ascii')
                if is_valid_key(tag):
                    self.append((tag, value))
        if (framing and (not (bytearray(fileobj.read(1))[0] & 1))):
            raise VorbisUnsetFrameError('framing    bit    was    unset')
    except (cdata.error, TypeError):
        raise error('file    is    not    a    valid    Vorbis    comment')
