尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

C# 将多个wav格式的文件拼接(合并)成一个文件
📅 发布时间:2026/6/19 2:41:29

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

 

相关新闻

  • 《ESP32-S3使用指南—IDF版 V1.6》第四十七章 lwIP初探
  • 国产化印刷厂视频监控项目实施方案 - 指南
  • Magento API文件上传漏洞导致远程代码执行分析

最新新闻

  • 石家庄黄金回收正规军在哪?2026实测门店星级榜,卖金前看一眼 - 奢侈品回收测评
  • 深度学习进阶(三十一)FlashAttention:IO 感知的精确注意力
  • 6个免费方法让你的手机视频秒变MP4 - 软件工具教程方法
  • Kali Linux实战:ARP欺骗攻击原理、环境搭建与Wireshark流量分析
  • 杭州靠谱品牌首饰回收排行,光谱验金透明称重全款现结 - 奢品小当家
  • 2026年安徽省合肥市合肥医药卫生学校招生简章官网发布:报名入口+报考指南 - cc江江

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号