如何将8位无符号wav文件转换为8位带符号的wav文件?

时间:2012-08-18 14:42:35

标签: c# audio naudio wave type-conversion

我正在使用带有C#的NAudio将波形文件转换为48,000,8bit,Mono。我将转换后的数据存储在一个字节数组中。我的代码如下。它工作正常,但新的波形文件数据是无符号的,我需要它进行签名。

WaveFormat target = new WaveFormat(48000, 8, 1);
WaveStream stream = new WaveFileReader(this.FilePath);
WaveFormatConversionStream conv = new WaveFormatConversionStream(target, stream);
this.ConvertedData = new byte[conv.Length];
conv.Position = 0;
conv.Read(this.ConvertedData, 0, Convert.ToInt32(conv.Length));
stream.Dispose();
conv.Dispose();

我尝试在转换数据后循环遍历字节数组,并从每个字节中减去128,这是我在此站点上找到的解决方案。

for (int i = 0; i < end; i++)
{
    signed = (int)this.ConvertedData[i] - 128;
    this.Data[i] = (byte)signed;
}

这种作品,但不是万无一失的,我相信必须有更好的方法。任何建议将不胜感激。感谢。

3 个答案:

答案 0 :(得分:0)

WaveFormat target = new WaveFormat(48000, 8, 1);
WaveStream stream =new WaveFileReader(this.FilePath);
WaveFormatConversionStream str = new WaveFormatConversionStream(target, stream);
WaveFileWriter.CreateWaveFile("c:\\converted.wav", str); //or the path of .wav file

尝试使用WaveFileWriter.CreateFile方法..

结帐NAudio 这个链接你也可以结账他们有一个C#音频库 Alvis.Audio

答案 1 :(得分:0)

我无法评论,所以我必须“滥用”答案功能:

尝试:

Convert.toSByte

它是基于字符串的,但应该有用......

http://msdn.microsoft.com/en-us/library/b0hdkwd9.aspx

答案 2 :(得分:0)

如果您只是寻找从无符号字节数组转换为有符号字节数组的更好方法,可以使用Buffer.BlockCopy方法,或尝试使用sbyte [] signed =(sbyte [])(Array)unsigned。希望它有所帮助。