本文整理汇总了Python中mutagen._util.BitReader.bits方法的典型用法代码示例。如果您正苦于以下问题:Python BitReader.bits方法的具体用法?Python BitReader.bits怎么用?Python BitReader.bits使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类mutagen._util.BitReader
的用法示例。
在下文中一共展示了BitReader.bits方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _parse_adif
# 需要导入模块: from mutagen._util import BitReader [as 别名]
# 或者: from mutagen._util.BitReader import bits [as 别名]
def _parse_adif(self, fileobj):
r = BitReader(fileobj)
try:
copyright_id_present = r.bits(1)
if copyright_id_present:
r.skip(72) # copyright_id
r.skip(1 + 1) # original_copy, home
bitstream_type = r.bits(1)
self.bitrate = r.bits(23)
npce = r.bits(4)
if bitstream_type == 0:
r.skip(20) # adif_buffer_fullness
pce = ProgramConfigElement(r)
try:
self.sample_rate = _FREQS[pce.sampling_frequency_index]
except IndexError:
pass
self.channels = pce.channels
# other pces..
for i in xrange(npce):
ProgramConfigElement(r)
r.align()
except BitReaderError as e:
raise AACError(e)
# use bitrate + data size to guess length
start = fileobj.tell()
fileobj.seek(0, 2)
length = fileobj.tell() - start
if self.bitrate != 0:
self.length = (8.0 * length) / self.bitrate
示例2: _parse_dac3
# 需要导入模块: from mutagen._util import BitReader [as 别名]
# 或者: from mutagen._util.BitReader import bits [as 别名]
def _parse_dac3(self, atom, fileobj):
# ETSI TS 102 366
assert atom.name == b"dac3"
ok, data = atom.read(fileobj)
if not ok:
raise ASEntryError("truncated %s atom" % atom.name)
fileobj = cBytesIO(data)
r = BitReader(fileobj)
# sample_rate in AudioSampleEntry covers values in
# fscod2 and not just fscod, so ignore fscod here.
try:
r.skip(2 + 5 + 3) # fscod, bsid, bsmod
acmod = r.bits(3)
lfeon = r.bits(1)
bit_rate_code = r.bits(5)
r.skip(5) # reserved
except BitReaderError as e:
raise ASEntryError(e)
self.channels = [2, 1, 2, 3, 3, 4, 4, 5][acmod] + lfeon
try:
self.bitrate = [
32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192,
224, 256, 320, 384, 448, 512, 576, 640][bit_rate_code] * 1000
except IndexError:
pass
示例3: test_get_position
# 需要导入模块: from mutagen._util import BitReader [as 别名]
# 或者: from mutagen._util.BitReader import bits [as 别名]
def test_get_position(self):
r = BitReader(cBytesIO(b"\xAB\xCD"))
self.assertEqual(r.get_position(), 0)
r.bits(3)
self.assertEqual(r.get_position(), 3)
r.skip(9)
self.assertEqual(r.get_position(), 3 + 9)
r.align()
self.assertEqual(r.get_position(), 16)
示例4: test_bits
# 需要导入模块: from mutagen._util import BitReader [as 别名]
# 或者: from mutagen._util.BitReader import bits [as 别名]
def test_bits(self):
data = b"\x12\x34\x56\x78\x89\xAB\xCD\xEF"
ref = cdata.uint64_be(data)
for i in xrange(64):
fo = cBytesIO(data)
r = BitReader(fo)
v = r.bits(i) << (64 - i) | r.bits(64 - i)
self.assertEqual(v, ref)
示例5: __init__
# 需要导入模块: from mutagen._util import BitReader [as 别名]
# 或者: from mutagen._util.BitReader import bits [as 别名]
def __init__(self, fileobj, length):
"""Raises DescriptorError"""
r = BitReader(fileobj)
try:
self.ES_ID = r.bits(16)
self.streamDependenceFlag = r.bits(1)
self.URL_Flag = r.bits(1)
self.OCRstreamFlag = r.bits(1)
self.streamPriority = r.bits(5)
if self.streamDependenceFlag:
self.dependsOn_ES_ID = r.bits(16)
if self.URL_Flag:
URLlength = r.bits(8)
self.URLstring = r.bytes(URLlength)
if self.OCRstreamFlag:
self.OCR_ES_Id = r.bits(16)
tag = r.bits(8)
except BitReaderError as e:
raise DescriptorError(e)
if tag != DecoderConfigDescriptor.TAG:
raise DescriptorError("unexpected DecoderConfigDescrTag %d" % tag)
assert r.is_aligned()
self.decConfigDescr = DecoderConfigDescriptor.parse(fileobj)
示例6: test_is_aligned
# 需要导入模块: from mutagen._util import BitReader [as 别名]
# 或者: from mutagen._util.BitReader import bits [as 别名]
def test_is_aligned(self):
r = BitReader(cBytesIO(b"\xAB\xCD\xEF"))
self.assertTrue(r.is_aligned())
r.skip(1)
self.assertFalse(r.is_aligned())
r.skip(7)
self.assertTrue(r.is_aligned())
r.bits(7)
self.assertFalse(r.is_aligned())
r.bits(1)
self.assertTrue(r.is_aligned())
示例7: _parse_alac
# 需要导入模块: from mutagen._util import BitReader [as 别名]
# 或者: from mutagen._util.BitReader import bits [as 别名]
def _parse_alac(self, atom, fileobj):
# https://alac.macosforge.org/trac/browser/trunk/
# ALACMagicCookieDescription.txt
assert atom.name == b"alac"
ok, data = atom.read(fileobj)
if not ok:
raise ASEntryError("truncated %s atom" % atom.name)
try:
version, flags, data = parse_full_atom(data)
except ValueError as e:
raise ASEntryError(e)
if version != 0:
raise ASEntryError("Unsupported version %d" % version)
fileobj = cBytesIO(data)
r = BitReader(fileobj)
try:
# for some files the AudioSampleEntry values default to 44100/2chan
# and the real info is in the alac cookie, so prefer it
r.skip(32) # frameLength
compatibleVersion = r.bits(8)
if compatibleVersion != 0:
return
self.sample_size = r.bits(8)
r.skip(8 + 8 + 8)
self.channels = r.bits(8)
r.skip(16 + 32)
self.bitrate = r.bits(32)
self.sample_rate = r.bits(32)
except BitReaderError as e:
raise ASEntryError(e)
示例8: _parse_esds
# 需要导入模块: from mutagen._util import BitReader [as 别名]
# 或者: from mutagen._util.BitReader import bits [as 别名]
def _parse_esds(self, esds, fileobj):
assert esds.name == b"esds"
ok, data = esds.read(fileobj)
if not ok:
raise ASEntryError("truncated %s atom" % esds.name)
try:
version, flags, data = parse_full_atom(data)
except ValueError as e:
raise ASEntryError(e)
if version != 0:
raise ASEntryError("Unsupported version %d" % version)
fileobj = cBytesIO(data)
r = BitReader(fileobj)
try:
tag = r.bits(8)
if tag != ES_Descriptor.TAG:
raise ASEntryError("unexpected descriptor: %d" % tag)
assert r.is_aligned()
except BitReaderError as e:
raise ASEntryError(e)
try:
decSpecificInfo = ES_Descriptor.parse(fileobj)
except DescriptorError as e:
raise ASEntryError(e)
dec_conf_desc = decSpecificInfo.decConfigDescr
self.bitrate = dec_conf_desc.avgBitrate
self.codec += dec_conf_desc.codec_param
self.codec_description = dec_conf_desc.codec_desc
decSpecificInfo = dec_conf_desc.decSpecificInfo
if decSpecificInfo is not None:
if decSpecificInfo.channels != 0:
self.channels = decSpecificInfo.channels
if decSpecificInfo.sample_rate != 0:
self.sample_rate = decSpecificInfo.sample_rate
示例9: __init__
# 需要导入模块: from mutagen._util import BitReader [as 别名]
# 或者: from mutagen._util.BitReader import bits [as 别名]
def __init__(self, xing, fileobj):
"""Raises LAMEError if parsing fails"""
payload = fileobj.read(27)
if len(payload) != 27:
raise LAMEError("Not enough data")
# extended lame header
r = BitReader(cBytesIO(payload))
revision = r.bits(4)
if revision != 0:
raise LAMEError("unsupported header revision %d" % revision)
self.vbr_method = r.bits(4)
self.lowpass_filter = r.bits(8) * 100
# these have a different meaning for lame; expose them again here
self.quality = (100 - xing.vbr_scale) % 10
self.vbr_quality = (100 - xing.vbr_scale) // 10
track_peak_data = r.bytes(4)
if track_peak_data == b"\x00\x00\x00\x00":
self.track_peak = None
else:
# see PutLameVBR() in LAME's VbrTag.c
self.track_peak = (
cdata.uint32_be(track_peak_data) - 0.5) / 2 ** 23
track_gain_type = r.bits(3)
self.track_gain_origin = r.bits(3)
sign = r.bits(1)
gain_adj = r.bits(9) / 10.0
if sign:
gain_adj *= -1
if track_gain_type == 1:
self.track_gain_adjustment = gain_adj
else:
self.track_gain_adjustment = None
assert r.is_aligned()
album_gain_type = r.bits(3)
self.album_gain_origin = r.bits(3)
sign = r.bits(1)
album_gain_adj = r.bits(9) / 10.0
if album_gain_type == 2:
self.album_gain_adjustment = album_gain_adj
else:
self.album_gain_adjustment = None
self.encoding_flags = r.bits(4)
self.ath_type = r.bits(4)
self.bitrate = r.bits(8)
self.encoder_delay_start = r.bits(12)
self.encoder_padding_end = r.bits(12)
self.source_sample_frequency_enum = r.bits(2)
self.unwise_setting_used = r.bits(1)
self.stereo_mode = r.bits(3)
self.noise_shaping = r.bits(2)
sign = r.bits(1)
mp3_gain = r.bits(7)
if sign:
mp3_gain *= -1
self.mp3_gain = mp3_gain
r.skip(2)
self.surround_info = r.bits(3)
self.preset_used = r.bits(11)
self.music_length = r.bits(32)
self.music_crc = r.bits(16)
self.header_crc = r.bits(16)
assert r.is_aligned()
示例10: test_skip_more
# 需要导入模块: from mutagen._util import BitReader [as 别名]
# 或者: from mutagen._util.BitReader import bits [as 别名]
def test_skip_more(self):
r = BitReader(cBytesIO(b"\xAB\xCD"))
self.assertEqual(r.bits(4), 0xa)
r.skip(8)
self.assertEqual(r.bits(4), 0xd)
self.assertRaises(BitReaderError, r.bits, 1)
示例11: test_skip
# 需要导入模块: from mutagen._util import BitReader [as 别名]
# 或者: from mutagen._util.BitReader import bits [as 别名]
def test_skip(self):
r = BitReader(cBytesIO(b"\xEF"))
r.skip(4)
self.assertEqual(r.bits(4), 0xf)
示例12: test_read_too_much
# 需要导入模块: from mutagen._util import BitReader [as 别名]
# 或者: from mutagen._util.BitReader import bits [as 别名]
def test_read_too_much(self):
r = BitReader(cBytesIO(b""))
self.assertEqual(r.bits(0), 0)
self.assertRaises(BitReaderError, r.bits, 1)
示例13: __init__
# 需要导入模块: from mutagen._util import BitReader [as 别名]
# 或者: from mutagen._util.BitReader import bits [as 别名]
def __init__(self, fileobj):
"""Raises HeaderNotFoundError"""
self.frame_offset = fileobj.tell()
r = BitReader(fileobj)
try:
if r.bits(11) != 0x7ff:
raise HeaderNotFoundError("invalid sync")
version = r.bits(2)
layer = r.bits(2)
protection = r.bits(1)
bitrate = r.bits(4)
sample_rate = r.bits(2)
padding = r.bits(1)
r.skip(1) # private
self.mode = r.bits(2)
r.skip(6)
except BitReaderError:
raise HeaderNotFoundError("truncated header")
assert r.get_position() == 32 and r.is_aligned()
# try to be strict here to redice the chance of a false positive
if version == 1 or layer == 0 or sample_rate == 0x3 or \
bitrate == 0xf or bitrate == 0:
raise HeaderNotFoundError("invalid header")
self.channels = 1 if self.mode == MONO else 2
self.version = [2.5, None, 2, 1][version]
self.layer = 4 - layer
self.protected = not protection
self.padding = bool(padding)
self.bitrate = self.__BITRATE[(self.version, self.layer)][bitrate]
self.bitrate *= 1000
self.sample_rate = self.__RATES[self.version][sample_rate]
if self.layer == 1:
frame_size = 384
slot = 4
elif self.version >= 2 and self.layer == 3:
frame_size = 576
slot = 1
else:
frame_size = 1152
slot = 1
frame_length = (
((frame_size // 8 * self.bitrate) // self.sample_rate) +
padding) * slot
self.sketchy = True
# Try to find/parse the Xing header, which trumps the above length
# and bitrate calculation.
if self.layer == 3:
self._parse_vbr_header(fileobj, self.frame_offset, frame_size,
frame_length)
fileobj.seek(self.frame_offset + frame_length, 0)
示例14: test_bits_null
# 需要导入模块: from mutagen._util import BitReader [as 别名]
# 或者: from mutagen._util.BitReader import bits [as 别名]
def test_bits_null(self):
r = BitReader(cBytesIO(b""))
self.assertEqual(r.bits(0), 0)