1、nuget安装NAudio

2、代码实现
using NAudio.Wave; using System; using System.Collections.Generic; using System.IO; using System.Linq;namespace SoundWin.Common {public class WavFileMerger{/// <summary>/// // 输入的 WAV 文件路径列表(确保格式一致)//var inputFiles = new List<string>//{// @"C:\audio\part1.wav",// @"C:\audio\part2.wav",// @"C:\audio\part3.wav"//};//string outputFile = @"C:\audio\output.wav";//ConcatenateWavFiles(inputFiles, outputFile);/// </summary>/// <param name="inputFiles"></param>/// <param name="outputFile"></param>/// <exception cref="ArgumentException"></exception>/// <exception cref="FileNotFoundException"></exception>/// <exception cref="InvalidOperationException"></exception>public static bool ConcatenateWavFiles(List<string> inputFiles, string outputFile,ref string error){try{if (inputFiles == null || inputFiles.Count == 0){error = "至少需要一个输入文件";return false;}// 检查所有文件是否存在foreach (var file in inputFiles){if (!File.Exists(file)){error = $"找不到音频文件: {file}";return false;}}WaveFormat format;using (var firstReader = new WaveFileReader(inputFiles[0])){format = firstReader.WaveFormat;}using (var writer = new WaveFileWriter(outputFile, format)){foreach (var inputFile in inputFiles){using (var reader = new WaveFileReader(inputFile)){// 第一个文件:设置输出格式if (format == null){format = reader.WaveFormat;}else{// 检查格式是否一致if (!WaveFormat.Equals(format, reader.WaveFormat)){error = $"文件 {inputFile} 的音频格式与其他文件不一致。" +$"需要与第一个文件 {inputFiles[0]} 的格式相同。";return false;}}// 读取并写入音频数据var buffer = new byte[reader.WaveFormat.AverageBytesPerSecond * 1]; // 1秒缓冲区int bytesRead;while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0){writer.Write(buffer, 0, bytesRead);}}}}return true;}catch(Exception ex){error = "异常";LogHelper.Error("合成音频异常:" + ex.ToString());return false;}}/// <summary>/// 倍速/// </summary>/// <param name="inputFiles"></param>/// <param name="outputFile"></param>/// <param name="speedFactor">几倍速度</param>public static void ConcatenateAndSpeedUpWavFiles(List<string> inputFiles, string outputFile,double speedFactor = 2.0){WaveFormat format;using (var firstReader = new WaveFileReader(inputFiles[0])){format = firstReader.WaveFormat;}using (var outputWriter = new WaveFileWriter(outputFile, format)){foreach (var inputFile in inputFiles){using (var reader = new AudioFileReader(inputFile)){// 创建 2 倍速的重采样器(通过提高采样率实现)// 原始采样率 * 2 → 播放时长减半(但音调变高)//var speedFactor = 2.0;var newSampleRate = (int)(reader.WaveFormat.SampleRate * speedFactor);// 使用 MediaFoundationResampler(Windows 平台可用)using (var resampler = new MediaFoundationResampler(reader, new WaveFormat(newSampleRate, reader.WaveFormat.Channels))){resampler.ResamplerQuality = 60; // 质量 0-60,越高越好// 读取并写入加速后的数据byte[] buffer = new byte[reader.WaveFormat.AverageBytesPerSecond * 2]; // 2秒缓冲int bytesRead;while ((bytesRead = resampler.Read(buffer, 0, buffer.Length)) > 0){outputWriter.Write(buffer, 0, bytesRead);}}}}}}} }