2011-12-01 2 views
0

Я пытаюсь загрузить и воспроизвести звуковой файл с помощью:URI Prefix не поддерживается

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 и SO пытается найти решение, ничего не получалось. Воспроизведение файла с прямым путем работает отлично

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

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

ответ

4

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

+0

Good гр все в конструкторе потока. –

+0

+1 спасибо. 'StreamResourceInfo sri = Application.GetResourceStream (uri);' не работает, поскольку я делаю это из файла dll, а не основного приложения exe. MediaPlayer слишком тяжел для того, что я делаю :(Любые другие идеи? – GETah

+1

Что значит «не работает»? Вам просто нужно добавить ссылку на PresentationFramework. Невозможно получить доступ к ресурсу с URI пакета независимо от WPF, если это то, что вы пытаетесь сделать ... –

1

F1 является вашим другом (в VS 2010 как минимум):

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

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

Смежные вопросы