将2声道wav文件拆分为单声道wav文件时音频失真

时间:2016-05-17 09:27:23

标签: c# audio naudio

我正在使用NAudio分割2声道wav文件,该文件也是通过使用包含在NAudio中的Wasapi进行录制而生成的。我以this为例分割了2通道的wav文件。以下是我的代码:

WaveFileReader reader = new WaveFileReader(outputFileName + "ORIGINAL.WAV");
var buffer = new byte[2 * reader.WaveFormat.SampleRate * reader.WaveFormat.Channels];
var format = new WaveFormat(reader.WaveFormat.SampleRate, 32, 1);

for (int i = 0; i < writers.Length; i++)
{
    writers[i] = new WaveFileWriter(String.Format(outputFileName + "{0}.wav", i), format);
    logevent.writeToLog(Convert.ToString(newWaveIn.WaveFormat.Channels));
}

int bytesRead;
while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
{
    int offset = 0;
    while (offset < bytesRead)
    {
        for (int i = 0; i < writers.Length; i++)
        {
            writers[i].Write(buffer, offset, 2);
            offset += 2;
         }
    }
}

录制音频的比特率为2822kbps。两个输出wav文件各自为1058kbps,播放时声音会变成抖动或非常大的白噪声。

1 个答案:

答案 0 :(得分:1)

如果你正在处理32位音频,那么你需要一次写四个字节,而不是循环中的两个字节