2014-01-20 48 views
1

这可能是一个非常简单的问题;我将一个单声道WAV文件转换为一个short []数组,并且我有一个函数将其写回WAV文件。一切正常。 (writeBuffer是短[]数组)c#将短阵列从单声道wav文件转换为短阵列以写成立体声wav

byte[] dataBuffer = new byte[writeBuffer.Length * 2]; 
Buffer.BlockCopy(writeBuffer, 0, dataBuffer, 0, dataBuffer.Length); 

using (var targetFile = isoStore.CreateFile("temp.wav")) 
{ 
    WriteHeader(targetFile, (int)dataBuffer.Length, 1, SamplesPerSecond); 
    int start = 0; 
    targetFile.Write(dataBuffer, start, (int)dataBuffer.Length); 
    targetFile.Flush(); 
    targetFile.Close(); 
} 

我的问题是什么,我需要做的是短阵为了要把它写成一个立体声文件;如果我写我的WAV头的WAV有2个通道(现在我写它具有:1),通过改变下面一行:

WriteHeader(targetFile, (int)dataBuffer.Length, 2, SamplesPerSecond); 

,我需要做的,我的短[]数组是什么?例如,每一个第二个元素会被视为第二个通道的一部分?所以我需要创建一个短[] writeBuffer.Length * 2,然后writeBuffer的每个值写入新的数组作为这样:

short[] newBuffer = new short[writeBuffer.Length*2]; 
for (int i=0; i< newBuffer.Length;i = i + 2) 
{ 
    newBuffer[i] = writeBuffer[i]; 
    newBuffer[i+1] = writeBuffer[i]; 
} 

会变成这样正确的吗?或者,我是否正在对一个立体声文件与单声道文件如何写入short []数组做一个不正确的假设?

回答

1

你的代码更改为:

short[] newBuffer = new short[writeBuffer.Length*2]; 
int index = offset; //offset might be 0 
for (int i=0; i< newBuffer.Length;i = i + 2) 
{ 
    newBuffer[index++] = writeBuffer[i]; 
    newBuffer[index++] = writeBuffer[i]; 
}