当前位置: 首页 > news >正文

C# 将多个wav格式的文件拼接(合并)成一个文件

1、nuget安装NAudio

image

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);}}}}}}}
}
View Code

 

http://www.zskr.cn/news/47260.html

相关文章:

  • 2025年北京代理记账服务商权威推荐榜单:执照注册资金变更/搭建财务内控/执照代办服务机构精选
  • 使用docker安装配置 elasticsearch + kibana
  • winform播放声音文件,播完成后自动播放下一个文件
  • 2025年EGUOO诺贝尔科学家:深度解析科研赋能膳食营养的范式与边界
  • 2025年EGUOO男士三氨能量:深度解析氨基酸配方的男性健康逻辑
  • 2025年高品质Z型斗式提升机厂家权威推荐榜单:耐用的Z型斗式提升机/正规的Z型斗式提升机/诚信的Z型斗式提升机源头厂家精选
  • NGINX Docker 镜像使用指南
  • Machine Learning - SVM
  • 智能呼叫中心系统测评推荐:从高并发处理到AI能力,深度剖析5大品牌的实战能力
  • 2025年EGUOO纳豆激酶:深度解析心血管膳食补充剂科研链路与市场真实表现
  • 常用设计模式:代理模式
  • 在跳板机的远程桌面中输入ctrl+alt+end
  • 2025 年 11 月管道厂家推荐排行榜,PVC管道,PPR管道,市政管道,民用管道,深塑管道,HDPE波纹管道公司推荐
  • 最佳 3D 文件格式的终极指南
  • 混沌工程
  • 2025年EGUOO冠军代言:深度解析科学营养与竞技精神的双向赋能
  • 邮件系统日志分析常见错误案例盘点
  • revit api 修改视图范围
  • 2025年EGUOO官网深度解析:科研透明视角下的膳食营养窗口
  • 2025年EGUOO副作用揭秘:权威解析其风险与真实表现
  • 2025年11月高密度矩阵肌电生产商概览及口碑分析
  • 2025年EGUOO调理肠胃健壮身体粉:深度解析科学配方与实证功效
  • 2025年EGUOO肠胃片消化酶:深度解析科研配方与肠道屏障修复机制
  • revit 二次开发标准模板
  • 基于MSP430F169微控制器驱动ILI9341液晶屏和XPT2046触摸屏实现方案
  • 实用指南:计算机网络——socket编程
  • 2025年实木全屋定制公司权威推荐榜单:全屋定制加盟/全屋定制十大品牌/全屋定制加盟源头公司精选
  • 插板法 笔记
  • 详细介绍:5-4〔OSCP ◈ 研记〕❘ SQL注入攻击▸基于 UNION 的SQLi
  • 第七届智能控制、测量与信号处理国际学术会议 (ICMSP 2025)