【问题标题】:c# converting short array from mono wav file, to short array to write as stereo wavc# 将短数组从单声道 wav 文件转换为短数组以写入立体声 wav
【发布时间】: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


    【解决方案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];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 2011-10-08
      相关资源
      最近更新 更多