You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不依赖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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:50:29