C#控制台应用能否同时播放多个音频轨道?实现音轨叠加播放
问题原因
- 你所使用的
System.Media.SoundPlayer类本身不支持多音频重叠播放,它依赖的底层Win32PlaySound接口同一时间仅支持单音频流输出,因此播放新音效时会直接中断正在播放的背景音乐。 - 你的示例代码存在几处语法错误:相等判断需要用
==而非赋值运算符=,方法调用末尾需要加(),C#中类名、Console类首字母需要大写。
解决方案
使用.NET生态常用的轻量音频处理库NAudio即可快速实现多音频同时播放,不需要复杂的底层调用:
- 第一步:右键你的项目 → 选择「管理NuGet包」 → 搜索NAudio并安装到项目中
- 第二步:使用如下封装好的音频播放逻辑替换原有代码:
using System; using NAudio.Wave; // 通用音频播放工具类,可直接复用 public static class AudioHelper { /// <param name="filePath">音频文件路径</param> /// <param name="loop">是否循环播放,背景音乐传true即可</param> public static void PlayAudio(string filePath, bool loop = false) { var reader = new AudioFileReader(filePath); var player = new WaveOutEvent(); player.Init(reader); player.Play(); // 循环播放逻辑 if (loop) { player.PlaybackStopped += (sender, args) => { reader.Position = 0; player.Play(); }; } } } class Program { static void Main(string[] args) { Console.ReadLine(); // 播放循环背景音乐 AudioHelper.PlayAudio("你的背景音乐路径", loop: true); string input = Console.ReadLine(); if (input == "has") { // 播放攻击/选择音效,不会中断背景音乐 AudioHelper.PlayAudio("你的音效文件路径"); } Console.ReadLine(); } }
- 该方案支持wav、mp3等常见音频格式,所有播放操作都是异步非阻塞的,不会影响控制台其他业务逻辑运行,播放完成后会自动释放资源无需手动处理。
内容的提问来源于stack exchange,提问作者JayRyDee
相关产品推荐
相关产品推荐

