【发布时间】:2014-01-20 00:09:46
【问题描述】:
这可能是一个非常简单的问题;我将一个单声道 WAV 文件转换为一个 short[] 数组,并且我有一个函数可以将它写回一个 WAV 文件。一切正常。 (writeBuffer 是 short[] 数组)
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);
我需要对我的 short[] 数组做什么?例如,每隔一个元素会被视为第二个通道的一部分吗?所以我需要创建一个 writeBuffer.Length*2 的 short[],然后将 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[] 数组做出了错误的假设?
【问题讨论】:
标签: c# audio windows-phone wav