1

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

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

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

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

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

4

2 回答 2

5

URI 方案特定于 WPF,因此pack://非 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 方案

于 2011-12-01T16:17:20.410 回答
1

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

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

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

于 2011-12-01T16:14:01.130 回答