如何在NETCore中播放声音?

dbr*_*lon 12 c# audio-player .net-core

我正试图在.Net Core控制台应用程序中播放声音,我无法解决这个问题.

我正在寻找.Net Core环境中管理的东西,也许就像普通的.Net:

// Not working on .Net Core    
System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"c:\mywavfile.wav");
player.Play();
Run Code Online (Sandbox Code Playgroud)

在dotnet核心Github上发现了一个问题,他们在那里谈论它.

https://github.com/dotnet/core/issues/74

他们说没有用于音频播放的高级API,但这个问题已经有9个月了,所以我希望有新的东西?

jos*_*ley 6

作为 .NET Core 提供音频支持之前的解决方法,您可以尝试如下操作:

public static void PlaySound(string file)
{
    Process.Start(@"powershell", $@"-c (New-Object Media.SoundPlayer '{file}').PlaySync();");
}
Run Code Online (Sandbox Code Playgroud)

当然,这仅适用于安装了 PowerShell 的 Windows,但您可以检测您所在的操作系统并采取相应的操作。


dbr*_*lon 5

There is now a way to do it with NAudio library (since 1.9.0-preview1) but it will only works on Windows.

So using NAudio, here the code to play a sound in .NET Core assuming you are doing it from a Windows environment.

using (var waveOut = new WaveOutEvent())
using (var wavReader = new WaveFileReader(@"c:\mywavfile.wav"))
{
   waveOut.Init(wavReader);
   waveOut.Play();
}
Run Code Online (Sandbox Code Playgroud)

For a more global solution, you should go for @Fiodar's one taking advantage of Node.js.

  • 仅供参考,我发现我需要在播放声音文件后立即放置 Thread.Sleep(n),睡眠持续时间至少为正在播放的声音的长度。这是在 Windows 10 上运行的简单 dotnet core 2.2 控制台应用程序中。 (2认同)