c# - 如何将8位未签名的WAV文件转换为8位签名的WAV文件?

标签 c# audio naudio wave type-conversion

我正在将NAudio与C#一起使用,将wave文件转换为48,000、8bit,Mono。我将转换后的数据存储在字节数组中。我的代码如下。它工作正常,但新的wave文件数据未签名,我需要对其进行签名。

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;
}

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

最佳答案

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
您也可以 checkout 此链接,他们也有C#音频库
Alvis.Audio

关于c# - 如何将8位未签名的WAV文件转换为8位签名的WAV文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12019465/

相关文章:

c# - DataTable与MySQL数据库同步的两种方式

c# - RoutedEventHandler 未正确添加到指定元素

audio - 如何显示J2me中其他类的列表(LCDUI)?

c# - NAudio - 更改录制的 WAV 文件的比特率

c# - .Net 4.0 中的 Timeout.InfiniteTimespan?

c# - 二进制序列化,IFormatter : use a new one each time or store one in a field?

c# - 最小化 Windows 10 通用时背景音频停止播放

javascript - 需要帮助将音频附加到警报框

C# 设置问题。

c# - 录制和混合音频时,NAudio的BufferedWaveProvider变满