python - 标准化波形文件

标签 python audio signal-processing wave

我希望标准化 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/

相关文章:

python - 如何创建具有一定采样频率和时间的信号?

c - 时域重叠相加如何实现时间拉伸(stretch)?

python - 在 sklearn.utils.shuffle 中使用 'random_state' 参数?

objective-c - 分割音频文件

audio - 是否可以从 Spotify 应用程序访问歌曲的波形?

python - python audiotools从内存打开

audio - 如何从音调样本创建和播放矢量?

python - 如何在 Heroku Cedar (Python/Flask/Gunicorn) 上启用 gzip 压缩

python - 无法导入同一目录和包中的模块

python - 如何检查我的 BeautifulSoup 版本并将其还原为旧版本?