[pypy-commit] pypy stdlib-2.7.6: fixes for audioop
bdkearns
noreply at buildbot.pypy.org
Sat Mar 1 23:40:19 CET 2014
Author: Brian Kearns <bdkearns at gmail.com>
Branch: stdlib-2.7.6
Changeset: r69582:781b1f702577
Date: 2014-03-01 17:30 -0500
http://bitbucket.org/pypy/pypy/changeset/781b1f702577/
Log: fixes for audioop
diff --git a/lib_pypy/audioop.py b/lib_pypy/audioop.py
--- a/lib_pypy/audioop.py
+++ b/lib_pypy/audioop.py
@@ -1,3 +1,4 @@
+from __future__ import division
import __builtin__ as builtins
import math
import struct
@@ -24,7 +25,7 @@
def _sample_count(cp, size):
- return len(cp) / size
+ return len(cp) // size
def _get_samples(cp, size, signed=True):
@@ -101,7 +102,7 @@
def getsample(cp, size, i):
_check_params(len(cp), size)
- if not (0 <= i < len(cp) / size):
+ if not (0 <= i < len(cp) // size):
raise error("Index out of range")
return _get_sample(cp, size, i)
@@ -118,7 +119,7 @@
def minmax(cp, size):
_check_params(len(cp), size)
- max_sample, min_sample = 0, 0
+ min_sample, max_sample = 0x7fffffff, -0x80000000
for sample in _get_samples(cp, size):
max_sample = builtins.max(sample, max_sample)
min_sample = builtins.min(sample, min_sample)
@@ -131,7 +132,7 @@
sample_count = _sample_count(cp, size)
if sample_count == 0:
return 0
- return sum(_get_samples(cp, size)) / sample_count
+ return sum(_get_samples(cp, size)) // sample_count
def rms(cp, size):
@@ -142,7 +143,7 @@
return 0
sum_squares = sum(sample**2 for sample in _get_samples(cp, size))
- return int(math.sqrt(sum_squares / sample_count))
+ return int(math.sqrt(sum_squares // sample_count))
def _sum2(cp1, cp2, length):
@@ -241,6 +242,8 @@
def avgpp(cp, size):
_check_params(len(cp), size)
sample_count = _sample_count(cp, size)
+ if sample_count <= 2:
+ return 0
prevextremevalid = False
prevextreme = None
@@ -271,12 +274,14 @@
if nextreme == 0:
return 0
- return avg / nextreme
+ return avg // nextreme
def maxpp(cp, size):
_check_params(len(cp), size)
sample_count = _sample_count(cp, size)
+ if sample_count <= 1:
+ return 0
prevextremevalid = False
prevextreme = None
@@ -309,13 +314,13 @@
def cross(cp, size):
_check_params(len(cp), size)
- crossings = 0
- last_sample = 0
+ crossings = -1
+ last_sample = 17
for sample in _get_samples(cp, size):
- if sample <= 0 < last_sample or sample >= 0 > last_sample:
+ sample = sample < 0
+ if sample != last_sample:
crossings += 1
last_sample = sample
-
return crossings
@@ -338,7 +343,7 @@
sample_count = _sample_count(cp, size)
- result = create_string_buffer(len(cp) / 2)
+ result = create_string_buffer(len(cp) // 2)
for i in range(0, sample_count, 2):
l_sample = getsample(cp, size, i)
@@ -347,7 +352,7 @@
sample = (l_sample * fac1) + (r_sample * fac2)
sample = clip(sample)
- _put_sample(result, size, i / 2, sample)
+ _put_sample(result, size, i // 2, sample)
return result.raw
@@ -423,19 +428,20 @@
if size == size2:
return cp
- new_len = (len(cp) / size) * size2
-
+ new_len = (len(cp) // size) * size2
result = create_string_buffer(new_len)
for i in range(_sample_count(cp, size)):
sample = _get_sample(cp, size, i)
- if size < size2:
- sample = sample << (4 * size2 / size)
- elif size > size2:
- sample = sample >> (4 * size / size2)
-
+ if size == 1:
+ sample <<= 24
+ elif size == 2:
+ sample <<= 16
+ if size2 == 1:
+ sample >>= 24
+ elif size2 == 2:
+ sample >>= 16
sample = _overflow(sample, size2)
-
_put_sample(result, size2, i, sample)
return result.raw
@@ -447,9 +453,9 @@
raise error("# of channels should be >= 1")
bytes_per_frame = size * nchannels
- frame_count = len(cp) / bytes_per_frame
+ frame_count = len(cp) // bytes_per_frame
- if bytes_per_frame / nchannels != size:
+ if bytes_per_frame // nchannels != size:
raise OverflowError("width * nchannels too big for a C int")
if weightA < 1 or weightB < 0:
@@ -462,8 +468,8 @@
raise error("sampling rate not > 0")
d = gcd(inrate, outrate)
- inrate /= d
- outrate /= d
+ inrate //= d
+ outrate //= d
prev_i = [0] * nchannels
cur_i = [0] * nchannels
@@ -479,7 +485,7 @@
prev_i, cur_i = zip(*samps)
prev_i, cur_i = list(prev_i), list(cur_i)
- q = frame_count / inrate
+ q = frame_count // inrate
ceiling = (q + 1) * outrate
nbytes = ceiling * bytes_per_frame
@@ -505,7 +511,7 @@
cur_i[chan] = (
(weightA * cur_i[chan] + weightB * prev_i[chan])
- / (weightA + weightB)
+ // (weightA + weightB)
)
frame_count -= 1
@@ -515,7 +521,7 @@
for chan in range(nchannels):
cur_o = (
(prev_i[chan] * d + cur_i[chan] * (outrate - d))
- / outrate
+ // outrate
)
_put_sample(result, size, out_i, _overflow(cur_o, size))
out_i += 1
More information about the pypy-commit
mailing list