2015-12-31 50 views
0

我希望正常化一个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) 

回答

3

我想通过标准化你想要做的就是填充16位的动态范围。

我会使用0x7FFF而不是0x8000,因为如果你的信号在积极的一面有饱和峰值,你会溢出积极的一面。例如,如果您的信号峰值为0x7FFF(可存储在16位有符号变量中的最大正数),则f = 0x8000/0x7FFF,则会给出一个溢出16位整数的值。

通过使用0x7FFF,您将永远不会使用“最大”负值,但更安全。