Префикс URI не поддерживается - PullRequest
0 голосов
/ 01 декабря 2011

Я пытаюсь загрузить и воспроизвести волновой файл, используя:

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

Безуспешно. Я получаю System.NotSupportedException :( см. Ниже.

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()

Я просмотрел Google и ТАК пытался найти решение, ничего не помогло. Воспроизведение файла с прямым путем отлично работает

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

Я также проверил содержимое MyAssembly, ресурс есть. SoundPlayer не поддерживает упаковку или я что-то не правильно делаю?

Ответы [ 2 ]

4 голосов
/ 01 декабря 2011

Схема pack:// URI специфична для WPF, поэтому компоненты, не являющиеся WPF, не знают, как с ней обращаться ... однако вы можете получить поток для этого ресурса и передать его конструктору 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();

Другой вариант - использовать класс MediaPlayer:

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

Этот класс поддерживает pack:// схему URI

1 голос
/ 01 декабря 2011

F1 ваш друг (по крайней мере в VS 2010):

Строка, передаваемая параметру soundLocation, может быть либо путем к файлу, либо URL-адресом файла .wav.

URI не являются URL (в отличие от других), это не будет работать. Вы можете сохранить файл во временную папку на диске, если вам нужно.

...