我需要标准化一个8位音频.wav文件。
我使用NAudio将文件加载到byte[]。我成功地将其转换为sbyte[]并恢复了正弦位。然后我将此数组相乘(强制转换为float),以获得硬性限制的规格化值(0-255)。
现在我需要将其保存为byte[],以便让NAudio编写它。问题是,如果我只是选角,
source[i] = (byte)normalizedFloatArray[i];结果保存的.wav如下所示!唉哟。

“高飞浪”
问题可能出在哪里?
发布于 2014-08-23 00:31:00
我认为这是因为字节转换为sbyte的方式造成的。示例:
sbyte b1 = 100;
sbyte b2 = -100;
Console.WriteLine("{0} = {1}", b1, (byte)b1);
Console.WriteLine("{0} = {1}", b2, (byte)b2);这将输出以下内容:
100 = 100
-100 = 156所以如果你的wave看起来像下面这样的字节:
{ 0, 50, 100, 50, 0, -50, -100, -50, 0 }输出将以字节为单位如下:
{ 0, 50, 100, 50, 206, 156, 206, 0 }发布于 2014-08-23 00:38:36
将byte转换为sbyte会导致大于sbyte.MaxValue的正值溢出并变成负值,这可能不是您想要的结果。例如,(sbyte)127生成127,而(sbyte)128生成-128。您可能希望将值范围从[0, 255]转换为[-128, 127],在这种情况下,您只需将每个byte偏移-128即可
signedByte = (sbyte)(unsignedByte + sbyte.MinValue)https://stackoverflow.com/questions/25451460
复制相似问题