我试图在.Net Core控制台应用程序中播放声音,但我无法解决这个问题。
我正在寻找.Net Core环境中管理的东西,可能像普通的.Net:
// Not working on .Net Core
System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"c:\mywavfile.wav");
player.Play();
在dotnet核心Github上发现了一个问题,他们在那里谈论它。
https://github.com/dotnet/core/issues/74
他们说没有用于音频播放的高级API,但这个问题已经有9个月了,所以我希望有新的东西?
答案 0 :(得分:1)
作为一种解决方法,直到.NET Core获得音频支持,你可以尝试这样的事情:
public static void PlaySound(string file)
{
Process.Start(@"powershell", $@"-c (New-Object Media.SoundPlayer '{file}').PlaySync();");
}
当然,仅适用于安装了PowerShell的Windows ,但您可以检测到您所使用的操作系统并采取相应措施。
答案 1 :(得分:1)
有一种与平台无关的方法。从本质上讲,.NET Framework中可用的所有声音播放功能都是特定于Windows的;因此,它都没有成为.NET Core。
然而,好消息是 Node.js 有无数的库可以在各种系统上播放声音,并且有一个可用于ASP.NET Core的库可以直接与Node.js代码对话。它被称为NodeServices。不要因为它只在ASP.NET Core上可用而被推迟。从本质上讲,与.NET Framework版本的ASP.NET不同,ASP.NET Core只不过是在标准控制台应用程序之上运行的薄层Web托管功能。您不必将其用作Web应用程序,但它将为您提供许多有用的附加功能,例如易于使用的依赖注入库。
This article描述了NodeServices的工作原理。这真的很直白。
答案 2 :(得分:1)
现在有一种使用NAudio库(自1.9.0-preview1起)的方法,但是它仅适用于Windows。
因此,使用NAudio,这里的代码假设您是在Windows环境中播放.NET Core中的声音。
using (var waveOut = new WaveOutEvent())
using (var wavReader = new WavFileReader(@"c:\mywavfile.wav"))
{
waveOut.Init(mp3Reader);
waveOut.Play();
}
要获得更全面的解决方案,您应该使用@Fiodar的Node.js。
答案 3 :(得分:1)
将包System.Windows.Extensions添加到您的项目中。
答案 4 :(得分:0)
对我来说最好的解决方案是使用 VLC 媒体播放器。它在 Windows 和 Linux 上可用(我想也许是 mac ?)。所以,有了这个代码就可以了(在 windows + linux 上运行。我不知道 MAC):
public static void Play(string sound)
{
string program = "vlc.exe";
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
program = "cvlc";
string path = GetPathSound(sound);
var pi = new ProcessStartInfo(path)
{
Arguments = Path.GetFileName(path) + " --play-and-exit",
UseShellExecute = true,
WorkingDirectory = Path.GetDirectoryName(path),
FileName = program,
Verb = "OPEN",
WindowStyle = ProcessWindowStyle.Hidden
};
Process p = new Process();
p.StartInfo = pi;
p.Start();
p.WaitForExit();
}