显然,合并音频流基本上是在每个输入音频文件中提取相应样本的总和。您可以研究的源代码
this sample on codeproject
. 这段代码可能不是最干净的,但似乎可以完成这项工作(我测试过)。
除了处理wav文件头之外,输入文件数组的实际合并逻辑如下所述:
// 8. Do the merging..
// The basic algorithm for doing the merging is as follows:
// while there is at least 1 sample remaining in any of the source files
// sample = 0
// for each source file
// if the source file has any samples remaining
// sample = sample + next available sample from the source file
// sample = sample / # of source files
// write the sample to the output file
这在该代码示例中实现,如下所示,适用于8位示例:
while (SamplesRemain(scaledAudioFiles))
{
byte sample = 0;
for (var i = 0; i < scaledAudioFiles.GetLength(0); ++i)
{
if (scaledAudioFiles[i].NumSamplesRemaining > 0)
{
sample += scaledAudioFiles[i].GetNextSample_8bit();
}
}
sample /= (byte)(scaledAudioFiles.GetLength(0));
outputFile.AddSample_8bit(sample);
}
该示例中的代码与.NET核心完全兼容。
如果您只想获取该代码并合并一些.wav文件,下面将介绍如何执行此操作(仍然使用有问题的示例):
private static void Main(string[] args) => WAVFile.MergeAudioFiles(
new[] { "file1.wav", "file2.wav", "file3.wav" },
"result.wav",
Path.GetTempPath()
);