【问题标题】:Normalise a wave file规范化波形文件
【发布时间】:2015-12-31 18:11:23
【问题描述】:

我希望标准化一个 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)

【问题讨论】:

    标签: python audio signal-processing wave


    【解决方案1】:

    我想通过规范化你想要做的是尽可能多地填充 16 位的动态范围。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      相关资源
      最近更新 更多