使用Naudio将每个WAV通道保存为单通道WAV文件

我正在尝试将WAV文件(PCM,48kHz,4通道,16位)转换为单通道WAV文件。

我尝试将WAV文件拆分成4个字节数组,就像这个答案一样,并创建了一个WaveMemoryStream,如下所示,但不起作用。

byte[] chan1ByteArray = new byte[channel1Buffer.Length]; Buffer.BlockCopy(channel1Buffer, 0, chan1ByteArray, 0, chan1ByteArray.Length); WaveMemoryStream chan1 = new WaveMemoryStream(chan1ByteArray, sampleRate, (ushort)bitsPerSample, 1); 

我在创建WAVE标题时遗漏了什么? 或者更多的是将WAV分成单声道WAV文件?

基本思想是源波文件包含交错的样本。 一个用于第一个通道,一个用于第二个通道,依此类推。 这里有一些未经测试的示例代码,可以让您了解如何执行此操作。

 var reader = new WaveFileReader("fourchannel.wav"); var buffer = new byte[2 * reader.WaveFormat.SampleRate * reader.WaveFormat.Channels]; var writers = new WaveFileWriter[reader.WaveFormat.Channels]; for (int n = 0; n < writers.Length; n++) { var format = new WaveFormat(reader.WaveFormat.SampleRate,16,1); writers[n] = new WaveFileWriter(String.Format("channel{0}.wav",n+1), format); } int bytesRead; while((bytesRead = reader.Read(buffer,0, buffer.Length)) > 0) { int offset= 0; while (offset < bytesRead) { for (int n = 0; n < writers.Length; n++) { // write one sample writers[n].Write(buffer,offset,2); offset += 2; } } } for (int n = 0; n < writers.Length; n++) { writers[n].Dispose(); } reader.Dispose();