我正在尝试使用以下方式加载和播放波形文件:
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
不支持打包或有什么我没做错吗?
答案 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(与其他方式不同),这不起作用。如果需要,可以将文件保存到磁盘上的临时文件夹中。