规范化波形文件

Posted

技术标签:

【中文标题】规范化波形文件【英文标题】: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)

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于规范化波形文件的主要内容,如果未能解决你的问题,请参考以下文章

波形格式 - 负数据大小

音频数据文件格式(PCM,WAV,MIDI)简记

VST 主机 - MIDI 到波形转换 (C#)

RK3399平台开发系列讲解(硬件波形解析篇)10.1USB2.0相关硬件波形(实图)解析

将非规范化文件中的数据加载到规范化表中

在 IE11 中规范化文件名并在 Javascript 中创建新文件