如何不依赖System.Media为控制台程序添加音频?求替代方案
控制台程序播放音频的替代方案
一、先处理原错误(可选)
如果不想更换方案,直接按错误提示添加System.Windows.Extensions引用即可:
- 在项目文件(.csproj)中添加:
<PackageReference Include="System.Windows.Extensions" Version="6.0.0" />(版本号可根据你的.NET版本调整) - 或者通过NuGet包管理器搜索安装该包
二、无需依赖System.Media的替代方案
1. 使用NAudio包
这是.NET生态中常用的音频处理库,支持多格式,适配控制台场景:
- 先安装NuGet包:
Install-Package NAudio - 播放WAV示例代码:
using NAudio.Wave; using var audioReader = new AudioFileReader("your-audio-file.wav"); using var player = new WaveOutEvent(); player.Init(audioReader); player.Play(); // 控制台程序需阻塞等待播放完成,否则会直接退出 while (player.PlaybackState == PlaybackState.Playing) { System.Threading.Thread.Sleep(100); }
- 若需播放MP3等格式,额外安装对应扩展包(如
NAudio.Lame、NAudio.Vorbis)即可
2. 调用Windows原生API(无额外依赖)
直接调用winmm.dll的函数,适合不想引入第三方包的场景:
using System.Runtime.InteropServices; public static class NativeAudioPlayer { [DllImport("winmm.dll")] private static extern uint mciSendString(string cmd, StringBuilder returnVal, int returnLen, IntPtr hwndCallback); public static void PlayAudio(string filePath) { mciSendString($"open \"{filePath}\" type waveaudio alias audioFile", null, 0, IntPtr.Zero); mciSendString("play audioFile wait", null, 0, IntPtr.Zero); mciSendString("close audioFile", null, 0, IntPtr.Zero); } } // 调用示例 NativeAudioPlayer.PlayAudio("test.wav");
- 仅支持Windows系统,兼容winmm支持的音频格式(如WAV、MP3)
内容的提问来源于stack exchange,提问作者Abhinav B
相关产品推荐
相关产品推荐

