不支持URI前缀

时间:2011-12-01 16:03:58

标签: c# wpf soundplayer

我正在尝试使用以下方式加载和播放波形文件:

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

我查看谷歌和SO试图找到解决方案,没有任何效果。 使用直接路径播放文件可以正常工作

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

我还检查了MyAssembly内容,资源就在那里。 SoundPlayer不支持打包或有什么我没做错吗?

2 个答案:

答案 0 :(得分:4)

pack:// URI方案特定于WPF,因此非WPF组件不知道如何处理它...但是,您可以检索此资源的流,并将其传递给{{ 1}}构造函数:

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(); URI方案

答案 1 :(得分:1)

F1 是你的朋友(至少在VS 2010中):

  

传递给soundLocation参数的字符串可以是文件路径,也可以是.wav文件的URL。

URI不是URL(与其他方式不同),这不起作用。如果需要,可以将文件保存到磁盘上的临时文件夹中。