2014-01-20 78 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]; 
}