Question

Je suis en train de charger et jouer un fichier wave en utilisant:

SoundPlayer simpleSound = new SoundPlayer(@"pack://application:,,,/MyAssembly;component/Sounds/10meters.wav");
            simpleSound.Play();

Sans succès. Je reçois un System.NotSupportedException :( voir ci-dessous.

System.NotSupportedException: The URI prefix is not recognized.
   at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
   at System.Net.WebRequest.Create(Uri requestUri)
   at System.Media.SoundPlayer.LoadSync()
   at System.Media.SoundPlayer.LoadAndPlay(Int32 flags)
   at System.Media.SoundPlayer.Play()

J'ai regardé sur google et SO essayer de trouver une solution, rien ne fonctionnait. Jouer le fichier avec un chemin d'accès direct fonctionne très bien

SoundPlayer simpleSound = new SoundPlayer(@"D:\Projects\MyAssembly\Sounds\10meters.wav");
simpleSound.Play();

J'ai aussi vérifié le contenu MyAssembly, la ressource est là. Ne prend pas en charge SoundPlayer emballage ou quelque chose que je ne fais pas correctement?

Était-ce utile?

La solution

Le schéma d'URI de pack:// est spécifique à WPF, si des composants non WPF ne savent pas comment le gérer ... Cependant, vous pouvez récupérer un flux pour cette ressource, et le transmettre au constructeur de SoundPlayer:

Uri uri = new Uri(@"pack://application:,,,/MyAssembly;component/Sounds/10meters.wav");
StreamResourceInfo sri = Application.GetResourceStream(uri);
SoundPlayer simpleSound = new SoundPlayer(sri.Stream);
simpleSound.Play();

Une autre option consiste à utiliser la classe MediaPlayer:

Uri uri = new Uri(@"pack://application:,,,/MyAssembly;component/Sounds/10meters.wav");
MediaPlayer player = new MediaPlayer();
player.Open(uri);
player.Play();

Cette classe prend en charge le système d'URI pack://

Autres conseils

F1 est votre ami (VS 2010 au moins):

La chaîne passée au paramètre soundLocation peut être un chemin de fichier ou une URL vers un fichier .wav.

URIs ne sont pas les URL (contrairement à l'inverse), cela ne fonctionnera pas. Vous pouvez enregistrer le fichier dans le dossier temporaire sur le disque si vous avez besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top