我希望将16位单声道文件归一化。这是正确的方法吗?
import wave
w = wave.open("s.wav", 'rb')
data = [struct.unpack("<h",w.readframes(1))[0] for i in range(w.getnframes())]
f = 0x8000/max((abs(i) for i in data))
data = b''.join(struct.pack("<h",int(i*f)) for i in data)
答案 0 :(得分:4)
我想通过规范化你想做的事情来填充16位的动态范围。
我会使用0x7FFF而不是0x8000,因为如果你的信号在正侧有饱和峰值,你将溢出正极侧。例如,如果您的信号峰值为0x7FFF(可以存储在16位有符号变量上的最大正值),则f = 0x8000 / 0x7FFF,这将给出一个溢出16位整数的值。
通过使用0x7FFF,您永远不会使用“最大”负值,但更安全。