【发布时间】:2014-08-22 16:19:07
【问题描述】:
我需要标准化一个 8 位音频 .wav 文件。
我使用 NAudio 将文件加载到 byte[]。我成功地将其转换为sbyte[] 并恢复了正弦位。然后我将此数组相乘(转换为float)以获得硬限制的标准化值(0-255)。
现在我需要将其保存为 byte[] 以让 NAudio 编写它。问题是,如果我只是投射,
source[i] = (byte)normalizedFloatArray[i];
生成的保存的 .wav 看起来像这样!哎哟。
“傻浪”
问题可能出在哪里?
【问题讨论】:
-
能否请您发布从
byte转换为sbyte的方式?我认为此时可能有问题。 -
不要转换为 sbyte。转换为浮点数并减去 127。
-
@HansPassant 他不应该减去 128 吗?
sbyte范围是 [-128, 127]。 -
嗯,取决于原始信号如何转换为字节。在实践中没关系,它只是一个直流偏移。
-
所有这些都是很棒的信息。我最终使用了 Hans Passant 的策略,基本上放弃了选角。我只是减去 128,根据 byte.MaxValue/2 进行缩放,然后加回 128 并写出新的 byte[]。工作。