web-dev-qa-db-fra.com

Comment jouer un son dans NET Core?

J'essaie de jouer un son dans une application de console .Net Core et je ne peux pas comprendre cela.

Je recherche quelque chose de géré dans l'environnement .Net Core, peut-être comme .Net:

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

Trouvé un problème sur dotnet core Github où ils en parlent.

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

Ils disent qu'il n'y a pas d'API de haut niveau pour la lecture audio mais le problème est vieux de 9 mois, donc j'espère qu'il y a quelque chose de nouveau?

14
dbraillon

Il existe maintenant un moyen de le faire avec la bibliothèque NAudio (depuis 1.9.0-preview1 ) mais cela ne fonctionnera que sous Windows.

Donc, en utilisant NAudio, voici le code pour jouer un son dans .NET Core en supposant que vous le faites à partir d'un environnement Windows.

using (var waveOut = new WaveOutEvent())
using (var wavReader = new WavFileReader(@"c:\mywavfile.wav"))
{
   waveOut.Init(wavReader);
   waveOut.Play();
}

Pour une solution plus globale, vous devriez opter pour celle de @ Fiodar en profitant de Node.js.

4
dbraillon

Comme solution de contournement jusqu'à ce que .NET Core prenne en charge l'audio, vous pouvez essayer quelque chose comme ceci:

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

Bien sûr, cela ne fonctionne que sur Windows avec PowerShell installé, mais vous pouvez détecter le système d'exploitation sur lequel vous vous trouvez et agir en conséquence.

2
joshcomley

Il existe une façon indépendante de la plateforme de le faire. Essentiellement, toutes les fonctionnalités de lecture audio disponibles dans .NET Framework étaient spécifiques à Windows; par conséquent, rien de tout cela n'est entré dans .NET Core.

Cependant, la bonne nouvelle est que Node.js possède d'innombrables bibliothèques qui peuvent lire le son sur divers systèmes et il existe une bibliothèque disponible pour ASP.NET Core qui peut parler directement au code Node.js. Cela s'appelle NodeServices. Ne soyez pas rebuté par le fait qu'il n'est disponible que sur ASP.NET Core. Essentiellement, ASP.NET Core, contrairement à la version .NET Framework d'ASP.NET, n'est rien de plus qu'une fine couche de fonctionnalités d'hébergement Web fonctionnant au-dessus d'une application de console standard. Vous n'êtes pas obligé de l'utiliser comme une application Web, mais il vous fournira de nombreux extras utiles, comme une bibliothèque d'injection de dépendances facile à utiliser.

Plus

Cet article décrit le fonctionnement des NodeServices. C'est vraiment simple.

0
Fiodar Sazanavets