我希望标准化 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)
最佳答案
我猜想,通过标准化,您想要做的就是填充尽可能多的 16 位动态范围。
我会使用 0x7FFF 而不是 0x8000,因为如果你的信号在正侧有一个饱和峰值,你就会溢出正侧。例如,如果您的信号峰值为 0x7FFF(可以存储在 16 位有符号变量上的最大正数),则 f = 0x8000/0x7FFF,这将给出一个溢出 16 位整数的值。
通过使用 0x7FFF,您将永远不会使用“最大”负值,但更安全。
关于python - 标准化波形文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34550141/