Finish-him's picture
Add pyaudioop shim module
ac6e449 verified
Raw
History Blame Contribute Delete
2.56 kB
"""pyaudioop - audioop shim for Python 3.13+"""
class error(Exception):
pass
def max(data, width):
result = 0
for i in range(0, len(data), width):
chunk = data[i:i+width]
if len(chunk) == width:
val = int.from_bytes(chunk, "little")
if val > result: result = val
return result
def min(data, width):
result = (1 << (width * 8)) - 1
for i in range(0, len(data), width):
chunk = data[i:i+width]
if len(chunk) == width:
val = int.from_bytes(chunk, "little")
if val < result: result = val
return result
def rms(data, width):
count = len(data) // width
if count == 0: return 0
total = sum(int.from_bytes(data[i:i+width], "little")**2
for i in range(0, len(data), width) if len(data[i:i+width]) == width)
import math
return int(math.sqrt(total / count))
def add(data1, data2, width):
result = bytearray()
for i in range(0, min(len(data1), len(data2)), width):
if len(data1[i:i+width]) == width and len(data2[i:i+width]) == width:
v = int.from_bytes(data1[i:i+width], "little") + int.from_bytes(data2[i:i+width], "little")
max_val = (1 << (width * 8)) - 1
result.extend(min(v, max_val).to_bytes(width, "little"))
return bytes(result)
def mul(data, factor, width):
result = bytearray()
for i in range(0, len(data), width):
chunk = data[i:i+width]
if len(chunk) == width:
v = min(int.from_bytes(chunk, "little") * factor, (1 << (width*8))-1)
result.extend(v.to_bytes(width, "little"))
return bytes(result)
def bias(data, width):
return bytes(width)
def reverse(data, width):
result = bytearray()
for i in range(0, len(data), width):
chunk = data[i:i+width]
if len(chunk) == width:
v = (1 << (width*8)) - 1 - int.from_bytes(chunk, "little")
result.extend(v.to_bytes(width, "little"))
return bytes(result)
# Stub remaining
def ulaw2lin(data): return data
def lin2alaw(data, width): return data
def alaw2lin(data): return data
def lin2adpcm(data, width): return data, ()
def adpcm2lin(data): return data
# pyaudioop compatibility layer
import audioop
audioop.error = error
audioop.max = max
audioop.min = min
audioop.rms = rms
audioop.add = add
audioop.mul = mul
audioop.bias = bias
audioop.reverse = reverse
audioop.ulaw2lin = ulaw2lin
audioop.lin2alaw = lin2alaw
audioop.alaw2lin = alaw2lin
audioop.lin2adpcm = lin2adpcm
audioop.adpcm2lin = adpcm2lin