Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 49 additions & 5 deletions pydub/pyaudioop.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def _check_params(length, size):


def _sample_count(cp, size):
return len(cp) / size
return len(cp) // size


def _get_samples(cp, size, signed=True):
Expand Down Expand Up @@ -529,20 +529,64 @@ def ratecv(cp, size, nchannels, inrate, outrate, state, weightA=1, weightB=0):
d -= inrate


def _sign(num):
return -1 if num < 0 else 0 if num == 0 else 1


def lin2ulaw(cp, size):
raise NotImplementedError()
maxval = _get_maxval(size)
result = create_string_buffer(len(cp))

for i in range(_sample_count(cp, size)):
sample = _get_sample(cp, size, i)
val = _sign(sample/maxval)*math.log(1+255*math.abs(sample/maxval))/math.log(1+255)
_put_sample(result, size, i, val)

return result


def ulaw2lin(cp, size):
raise NotImplementedError()
maxval = _get_maxval(size)
result = create_string_buffer(len(cp))

for i in range(_sample_count(cp, size)):
sample = _get_sample(cp, size, i)
val = (_sign(sample)*((1+255)**math.abs(sample)-1)/255) * maxval
_put_sample(result, size, i, val)

return result


def lin2alaw(cp, size):
raise NotImplementedError()
maxval = _get_maxval(size)
result = create_string_buffer(len(cp))

for i in range(_sample_count(cp, size)):
sample = _get_sample(cp, size, i)
val = None
if math.abs(sample/maxval) < 1/87.6:
val = _sign(sample/maxval)*87.6*math.abs(sample/maxval)/(1+math.log(87.6))
else:
val = _sign(sample/maxval)*(1+math.log(87.6*math.abs(sample/maxval)))/(1+math.log(87.6))
_put_sample(result, size, i, val)

return result


def alaw2lin(cp, size):
raise NotImplementedError()
maxval = _get_maxval(size)
result = create_string_buffer(len(cp))

for i in range(_sample_count(cp, size)):
sample = _get_sample(cp, size, i)
val = None
if math.abs(sample) < 1/(1+math.log(87.6)):
val = _sign(sample) * math.abs(sample)*(1+math.log(87.6))/87.6 * maxval
else:
val = _sign(sample) * (math.e**(-1+math.abs(sample)*(1+math.log(87.6)))) / 87.6 * maxval
_put_sample(result, size, i, val)

return result


def lin2adpcm(cp, size, state):
Expand Down