如何以编程方式将2个或更多.WAV文件加入?

我需要能够将两个或多个.wav文件一起加入到一个.wav文件中。 我必须使用C#以编程方式执行此操作(第三方产品不是一个选项)。 我知道System.Media.SoundPlayer类,但我不打算播放.wav,而只是创建它。

这是使用NAudio构建的基本WAV级联function。 这将确保只连接数据块(与另一个答案中链接的此CodeProject文章中的代码示例不同)。 它还可以防止您连接不共享相同格式的WAV文件。

public static void Concatenate(string outputFile, IEnumerable sourceFiles) { byte[] buffer = new byte[1024]; WaveFileWriter waveFileWriter = null; try { foreach (string sourceFile in sourceFiles) { using (WaveFileReader reader = new WaveFileReader(sourceFile)) { if (waveFileWriter == null) { // first time in create new Writer waveFileWriter = new WaveFileWriter(outputFile, reader.WaveFormat); } else { if (!reader.WaveFormat.Equals(waveFileWriter.WaveFormat)) { throw new InvalidOperationException("Can't concatenate WAV Files that don't share the same format"); } } int read; while ((read = reader.Read(buffer, 0, buffer.Length)) > 0) { waveFileWriter.WriteData(buffer, 0, read); } } } } finally { if (waveFileWriter != null) { waveFileWriter.Dispose(); } } } 

关于马克回答的一条评论:

在比较波形时,==运算符似乎对我不起作用。 这样做更安全:

 if (!reader.WaveFormat.Equals(waveFileWriter.WaveFormat)) 

或者,你可以将阅读器包装在WaveFormatConversionStream中并完全摆脱格式检查(不确定它是否适用于所有场景,但我能够成功地测试它)。

查看这个代码项目示例,似乎正是您需要的,并且对如何执行它也有一个很好的解释:

使用C#2005连接Wave文件

它似乎基本上包括从所有wav文件中提取和合并声音数据到一个数据块,顶部有一个新的文件头

编辑:我没有使用它的经验,我也不是专家。 我刚看到这篇文章并认为它可能有用。 请参阅Mark Heath的答案以获得更好的解决方案

使用如何将.Wav文件连接在一起

  private void JoinWav() { string[] files = new string[] { "1990764-ENG-CONSEC-RESPONSE7.WAV","1990764-ND_A.WAV", "1990764-SIGHT-SP.WAV", "1990764-SP-CONSEC-RESPONSE6.WAV","1990764-VOCABWORD-004-12-SP.WAV","bi-consec-1-successful.wav", "bi-transition-instruct.wav","nd_B.wav","sightreceived_B.wav","teststamp_A.wav" }; AudioCompressionManager.Join("res.wav", files); }