首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bytes to sbytes和back - C# NAudio

bytes to sbytes和back - C# NAudio
EN

Stack Overflow用户
提问于 2014-08-23 00:19:08
回答 2查看 174关注 0票数 3

我需要标准化一个8位音频.wav文件。

我使用NAudio将文件加载到byte[]。我成功地将其转换为sbyte[]并恢复了正弦位。然后我将此数组相乘(强制转换为float),以获得硬性限制的规格化值(0-255)。

现在我需要将其保存为byte[],以便让NAudio编写它。问题是,如果我只是选角,

代码语言:javascript
复制
source[i] = (byte)normalizedFloatArray[i];

结果保存的.wav如下所示!唉哟。

“高飞浪”

问题可能出在哪里?

EN

回答 2

Stack Overflow用户

发布于 2014-08-23 00:31:00

我认为这是因为字节转换为sbyte的方式造成的。示例:

代码语言:javascript
复制
sbyte b1 = 100;
sbyte b2 = -100;
Console.WriteLine("{0} = {1}", b1, (byte)b1);
Console.WriteLine("{0} = {1}", b2, (byte)b2);

这将输出以下内容:

代码语言:javascript
复制
100 = 100
-100 = 156

所以如果你的wave看起来像下面这样的字节:

代码语言:javascript
复制
{ 0, 50, 100, 50, 0, -50, -100, -50, 0 }

输出将以字节为单位如下:

代码语言:javascript
复制
{ 0, 50, 100, 50, 206, 156, 206, 0 }
票数 2
EN

Stack Overflow用户

发布于 2014-08-23 00:38:36

byte转换为sbyte会导致大于sbyte.MaxValue的正值溢出并变成负值,这可能不是您想要的结果。例如,(sbyte)127生成127,而(sbyte)128生成-128。您可能希望将值范围从[0, 255]转换为[-128, 127],在这种情况下,您只需将每个byte偏移-128即可

代码语言:javascript
复制
signedByte = (sbyte)(unsignedByte + sbyte.MinValue)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25451460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档