Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _determine_duration(self, fh):
max_estimation_frames = (ID3._MAX_ESTIMATION_SEC*44100) // 1152
frame_size_mean = 0
# set sample rate from first found frame later, default to 44khz
file_sample_rate = 44100
# see this page for the magic values used in mp3:
# http://www.mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm
bitrates = [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192,
224, 256, 320]
samplerates = [44100, 48000, 32000]
header_bytes = 4
frames = 0 # count frames for determining mp3 duration
# seek to first position after id3 tag (speedup for large header)
fh.seek(self._bytepos_after_id3v2)
while True:
# reading through garbage until 12 '1' bits are found
b = fh.read(1)
if len(b) == 0:
def _determine_duration(self, fh):
max_estimation_frames = (ID3._MAX_ESTIMATION_SEC * 44100) // ID3.samples_per_frame
frame_size_accu = 0
header_bytes = 4
frames = 0 # count frames for determining mp3 duration
bitrate_accu = 0 # add up bitrates to find average bitrate to detect
last_bitrates = [] # CBR mp3s (multiple frames with same bitrates)
# seek to first position after id3 tag (speedup for large header)
fh.seek(self._bytepos_after_id3v2)
while True:
# reading through garbage until 11 '1' sync-bits are found
b = fh.peek(4)
if len(b) < 4:
break # EOF
sync, conf, bitrate_freq, rest = struct.unpack('BBBB', b[0:4])
br_id = (bitrate_freq >> 4) & 0x0F # biterate id
sr_id = (bitrate_freq >> 2) & 0x03 # sample rate id
padding = 1 if bitrate_freq & 0x02 > 0 else 0