Exemplo n.º 1
0
    def __init__(self, fileobj):
        """Raises MusepackHeaderError"""

        header = fileobj.read(4)
        if len(header) != 4:
            raise MusepackHeaderError("not a Musepack file")

        # Skip ID3v2 tags
        if header[:3] == b"ID3":
            header = fileobj.read(6)
            if len(header) != 6:
                raise MusepackHeaderError("not a Musepack file")
            size = 10 + BitPaddedInt(header[2:6])
            fileobj.seek(size)
            header = fileobj.read(4)
            if len(header) != 4:
                raise MusepackHeaderError("not a Musepack file")

        if header.startswith(b"MPCK"):
            self.__parse_sv8(fileobj)
        else:
            self.__parse_sv467(fileobj)

        if not self.bitrate and self.length != 0:
            fileobj.seek(0, 2)
            self.bitrate = intround(fileobj.tell() * 8 / self.length)
Exemplo n.º 2
0
 def test_long(self):
     if PY2:
         data = BitPaddedInt.to_str(sys.maxint + 1, width=16)
         val = BitPaddedInt(data)
         self.assertEqual(val, sys.maxint + 1)
         self.assertTrue(isinstance(val, BitPaddedLong))
     else:
         self.assertTrue(BitPaddedInt is BitPaddedLong)
Exemplo n.º 3
0
def skip_id3(fileobj):
    """Might raise IOError"""

    # WMP writes multiple id3s, so skip as many as we find
    while True:
        idata = fileobj.read(10)
        try:
            id3, insize = struct.unpack('>3sxxx4s', idata)
        except struct.error:
            id3, insize = b'', 0
        insize = BitPaddedInt(insize)
        if id3 == b'ID3' and insize > 0:
            fileobj.seek(insize, 1)
        else:
            fileobj.seek(-len(idata), 1)
            break
Exemplo n.º 4
0
    def __init__(self, fileobj):
        """Raises AACError"""

        # skip id3v2 header
        start_offset = 0
        header = fileobj.read(10)
        if header.startswith(b"ID3"):
            size = BitPaddedInt(header[6:])
            start_offset = size + 10

        fileobj.seek(start_offset)
        adif = fileobj.read(4)
        if adif == b"ADIF":
            self._parse_adif(fileobj)
            self._type = "ADIF"
        else:
            self._parse_adts(fileobj, start_offset)
            self._type = "ADTS"
Exemplo n.º 5
0
    def __check_header(self, fileobj, name):
        """Returns the offset of the flac block start
        (skipping id3 tags if found). The passed fileobj will be advanced to
        that offset as well.
        """

        size = 4
        header = fileobj.read(4)
        if header != b"fLaC":
            size = None
            if header[:3] == b"ID3":
                size = 14 + BitPaddedInt(fileobj.read(6)[2:])
                fileobj.seek(size - 4)
                if fileobj.read(4) != b"fLaC":
                    size = None
        if size is None:
            raise FLACNoHeaderError("%r is not a valid FLAC file" % name)
        return size
Exemplo n.º 6
0
 def test_str_int_init(self):
     self.assertEquals(BitPaddedInt(238).as_str(),
                       BitPaddedInt(struct.pack('>L', 238)).as_str())
Exemplo n.º 7
0
 def test_s32b(self):
     self.assertEquals(BitPaddedInt(b'\xFF\xFF\xFF\xFF', bits=8).as_str(),
                       b'\xFF\xFF\xFF\xFF')
Exemplo n.º 8
0
 def test_32bi(self):
     self.assertEquals(BitPaddedInt(0xFFFFFFFF, bits=8), 0xFFFFFFFF)
Exemplo n.º 9
0
 def test_32b(self):
     self.assertEquals(BitPaddedInt(b'\xFF\xFF\xFF\xFF', bits=8),
                       0xFFFFFFFF)
Exemplo n.º 10
0
 def test_65(self):
     self.assertEquals(BitPaddedInt(b'\x00\x00\x01\x81', 6), 0x41)
Exemplo n.º 11
0
 def test_129b(self):
     self.assertEquals(BitPaddedInt(b'\x00\x00\x01\x81'), 0x81)
Exemplo n.º 12
0
 def test_1l(self):
     self.assertEquals(
         BitPaddedInt(b'\x01\x00\x00\x00', bigendian=False), 1)
Exemplo n.º 13
0
 def test_1(self):
     self.assertEquals(BitPaddedInt(b'\x00\x00\x00\x01'), 1)
Exemplo n.º 14
0
 def test_zero(self):
     self.assertEquals(BitPaddedInt(b'\x00\x00\x00\x00'), 0)
Exemplo n.º 15
0
 def test_promote_long(self):
     l = BitPaddedInt(sys.maxint**2)
     self.assertTrue(isinstance(l, long))
     self.assertEqual(BitPaddedInt(l.as_str(width=-1)), l)