将音频分为左右声道分成不同的文件

时间:2015-03-16 17:46:36

标签: c# .net naudio

我无法将频道缓冲区分成新文件。

以下是提取每个通道缓冲区的代码:

        int samplesDesired = 10000;
        byte[] buffer = new byte[samplesDesired * 4];
        short[] left = new short[samplesDesired];
        short[] right = new short[samplesDesired];

        using (WaveFileReader pcm = new WaveFileReader(filePath))
        {    
            int bytesRead = pcm.Read(buffer, 0, 10000);
            int index = 0;
            for (int i = 0; i < bytesRead / 4; i++)
            {
                left[i] = BitConverter.ToInt16(buffer, index);
                index += 2;
                right[i] = BitConverter.ToInt16(buffer, index);
                index += 2;
            }
        } 

以下是我尝试从收集的缓冲区创建文件的方法:

        using(var leftChannelFile = new WaveFileWriter("test.wav", new WaveFormat()))
        {
            leftChannelFile.WriteSamples(left, 0, left.Length);
        }

问题是,当我尝试播放&#34; file.wav&#34;时,它是0秒长,19.5 KB大。任何关于为什么会发生这种情况的想法?

1 个答案:

答案 0 :(得分:0)

您可以设置结果文件的标题,表明它是一个通道/单声道,

OR

将第二个频道添加到结果文件中(全部为0字节)