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不支持包装或有什么我不这样做是否正确?
该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 方案
| 归档时间: |
|
| 查看次数: |
6233 次 |
| 最近记录: |