diff --git a/audioop.py b/audioop.py index 26f99cc..856dc1f 100644 --- a/audioop.py +++ b/audioop.py @@ -18,7 +18,7 @@ STRUCT_FORMAT = { 4: ['I', 'i'] } -class error(Excpetion) +class error(Exception): ''' This exception is raised on all errors, such as unknown number of bytes per sample, etc. ''' @@ -43,10 +43,10 @@ def _get_raw_sample(cp, size: int, i: int, signed=True): struct_format = STRUCT_FORMAT[size][signed] start = i * size end = start + size - return struct.unpack_from(struct_format, buffer(fragment)[start:end])[0] + return struct.unpack_from(struct_format, memoryview(cp)[start:end])[0] def _get_samples(cp, size: int, signed=True): - for i in range(len(cp) / size): + for i in range(math.ceil(len(cp) / size)): yield _get_raw_sample(cp, size, i, signed) def _set_raw_sample(cp, size: int, i: int, val, signed=True): @@ -64,7 +64,7 @@ def _overflow(val, size, signed=True): else: return val % 2**bits -def getsample(fragment, size: int, index: int): +def getsample(cp, size: int, index: int): ''' Return the value of sample index from the fragment. ''' @@ -89,7 +89,7 @@ def minmax(fragment, size): _check_parameters(len(fragment), size) sample_min = 0x7FFFFFFF sample_max = -0x80000000 - for sample in _get_samples(fragment, size) + for sample in _get_samples(fragment, size): sample_min = builtin_min(sample, sample_min) sample_max = builtin_min(sample, sample_max) return sample_min, sample_max @@ -139,32 +139,32 @@ def findfit(fragment, reference): len1 = len(cp1) / 2 len2 = len(cp2) / 2 - sum_ri_2 = _sum2(cp2, cp2, len2) - sum_aij_2 = _sum2(cp1, cp1, len2) - sum_aij_ri = _sum2(cp1, cp2, len2) + sum_ri_2 = _sum2(cp2, cp2, len2) + sum_aij_2 = _sum2(cp1, cp1, len2) + sum_aij_ri = _sum2(cp1, cp2, len2) - #result = (sum_ri_2*sum_aij_2 - sum_aij_ri*sum_aij_ri) / sum_aij_2 - result = (sum_ri_2*sum_aij_2 - sum_aij_ri**2) / sum_aij_2 + #result = (sum_ri_2*sum_aij_2 - sum_aij_ri*sum_aij_ri) / sum_aij_2 + result = (sum_ri_2*sum_aij_2 - sum_aij_ri**2) / sum_aij_2 - best_result = result - best_j = 0 + best_result = result + best_j = 0 - for j in range(1, len1-len2): - aj_m1 = _get_raw_sample(cp1, 2, j-1) - aj_lm1 = _get_raw_sample(cp1, 2, j+len2-1) - - # sum_aij_2 = sum_aij_2 + aj_lm1*aj_lm1 - aj_m1*aj_m1 - sum_aij_2 += aj_lm1**2 - aj_m1**2 - sum_aij_ri = _sum2(buffer(cp1)[j*2:], cp2, len2) + for j in range(1, len1-len2): + aj_m1 = _get_raw_sample(cp1, 2, j-1) + aj_lm1 = _get_raw_sample(cp1, 2, j+len2-1) + + # sum_aij_2 = sum_aij_2 + aj_lm1*aj_lm1 - aj_m1*aj_m1 + sum_aij_2 += aj_lm1**2 - aj_m1**2 + sum_aij_ri = _sum2(memoryview(cp1)[j*2:], cp2, len2) - # result = (sum_ri_2*sum_aij_2 - sum_aij_ri*sum_aij_ri) / sum_aij_2 - result = (sum_ri_2*sum_aij_2 - sum_aij_ri**2) / sum_aij_2 + # result = (sum_ri_2*sum_aij_2 - sum_aij_ri*sum_aij_ri) / sum_aij_2 + result = (sum_ri_2*sum_aij_2 - sum_aij_ri**2) / sum_aij_2 - if result < best_result: - best_result = result - best_j = j + if result < best_result: + best_result = result + best_j = j - factor = _sum2(buffer(cp1)[best_j*2:], cp2, len2) / sum_ri_2 + factor = _sum2(memoryview(cp1)[best_j*2:], cp2, len2) / sum_ri_2 return best_j, factor def findfactor(fragment, reference): @@ -208,17 +208,17 @@ def findmax(fragment, length): result = _sum2(cp1, cp1, length) - best_result = result - best_j = 0 + best_result = result + best_j = 0 - for j in range(1, len1-length): - aj_m1 = _get_raw_sample(cp1, 2, j-1) - aj_lm1 = _get_raw_sample(cp1, 2, j+length-1) + for j in range(1, len1-length): + aj_m1 = _get_raw_sample(cp1, 2, j-1) + aj_lm1 = _get_raw_sample(cp1, 2, j+length-1) - # result = result + aj_lm1*aj_lm1 - aj_m1*aj_m1 - result += aj_lm1**2 - aj_m1**2 + # result = result + aj_lm1*aj_lm1 - aj_m1*aj_m1 + result += aj_lm1**2 - aj_m1**2 - if result < best_result: + if result < best_result: best_result = result best_j = j @@ -508,12 +508,12 @@ def ratecv(fragment, size, nchannels, inrate, outrate, state, weightA=1, weightB ncp = 0 while True: - while d < 0; + while d < 0: if nbr_frames == 0: samps = zip(prev_i, cur_i) rv = cp.raw trim_i = (ncp * bytes_per_frame) - len(rv) - rv = buffer(rv)[:trim_i] + rv = memoryview(rv)[:trim_i] return (rv, (d, tuple(samps))) for chan in range(nchannels):