gpt4 book ai didi

c# 将短数组从单声道 wav 文件转换为短数组以写入立体声 wav

转载 作者:行者123 更新时间:2023-12-02 23:15:16 25 4
gpt4 key购买 nike

这可能是一个非常简单的问题;我将一个单声道 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 header 中写入 WAV 有 2 个 channel (现在我正在写它有 1 个 channel ),则通过更改以下行:
WriteHeader(targetFile, (int)dataBuffer.Length, 2, SamplesPerSecond);

我需要对我的 short[] 数组做什么?例如,每隔一个元素会被视为第二个 channel 的一部分吗?所以我需要创建一个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[] 数组做出了错误的假设?

最佳答案

将您的代码更改为:

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];
}

关于c# 将短数组从单声道 wav 文件转换为短数组以写入立体声 wav,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21224357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com