不支持 URI 前缀

GET*_*Tah 1 c# wpf soundplayer

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

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

没有成功。我得到一个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()
Run Code Online (Sandbox Code Playgroud)

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

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

我还检查了 MyAssembly 内容,资源在那里。难道SoundPlayer不支持包装或有什么我不这样做是否正确?

Tho*_*que 5

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();
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用MediaPlayer该类:

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

此类支持pack://URI 方案