2015-12-31 46 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,您將永遠不會使用「最大」負值,但更安全。