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

winform播放声音文件,播完成后自动播放下一个文件

1、nuget安装NAudio

2、代码实现

using NAudio.Wave;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace SoundWin.Common
{public static class AudioPlayer{/// <summary>/// 按顺序播放多个音频文件,每个文件播放完后自动播放下一个。/// </summary>/// <param name="audioFiles">音频文件路径列表</param>/// <returns>Task,当所有文件播放完毕时完成</returns>public static async Task PlayAllSequentiallyAsync(IEnumerable<string> audioFiles){if (audioFiles == null)throw new ArgumentNullException(nameof(audioFiles));var files = new List<string>(audioFiles);if (files.Count == 0)return;// 使用 TaskCompletionSource 来等待播放完成var tcs = new TaskCompletionSource<bool>();// 在 UI 线程(如 WinForms)中,我们需要确保事件回调能正确同步// 这里使用 SynchronizationContext 捕获当前上下文(如果是 UI 线程)var syncContext = SynchronizationContext.Current;WaveOutEvent outputDevice = null;AudioFileReader audioFileReader = null;void PlayNext(int index){try{// 释放上一个资源audioFileReader?.Dispose();outputDevice?.Dispose();if (index >= files.Count){// 全部播放完毕tcs.TrySetResult(true);return;}string currentFile = files[index];audioFileReader = new AudioFileReader(currentFile);outputDevice = new WaveOutEvent();// 订阅播放结束事件outputDevice.PlaybackStopped += (s, e) =>{// 在原始上下文(如 UI 线程)中调用 PlayNextif (syncContext != null){syncContext.Post(_ => PlayNext(index + 1), null);}else{PlayNext(index + 1);}};outputDevice.Init(audioFileReader);outputDevice.Play();}catch (Exception ex){// 可选:记录日志或跳过错误文件System.Diagnostics.Debug.WriteLine($"播放失败: {ex.Message}");// 跳过当前文件,继续下一个if (syncContext != null)syncContext.Post(_ => PlayNext(index + 1), null);elsePlayNext(index + 1);}}// 开始播放第一个文件PlayNext(0);// 等待全部播放完成await tcs.Task;}}
}
View Code

 

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

相关文章:

  • 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)
  • C#语言中使用using关键字的介绍
  • P2490 [SDOI2011] 黑白棋 笔记
  • 【machine learning】COVID-19 daily cases prediction - 指南