我在这里找到了一个解决方案,在WPF中播放声音文件,我将其提取到一个方法中,并在另一个方法中调用此方法.但是当PlaySound()被称为声音的时候不播放.有没有人知道为什么会这样?声音文件也标记为内容,但更改为类型资源也没有解决问题?
我播放声音的方法:
private void PlaySound()
{
Uri uri = new Uri(@"pack://application:,,,/Sounds/jabSound.wav");
var player = new MediaPlayer();
player.Open(uri);
player.Play();
}
Run Code Online (Sandbox Code Playgroud)
然后我调用这样的方法,但它不播放声音文件, PlaySound();
Lia*_*roy 14
你也可以使用 SoundPlayer
SoundPlayer player = new SoundPlayer(path);
player.Load();
player.Play();
Run Code Online (Sandbox Code Playgroud)
非常自我解释.
奖励以下是如何让它以异步方式循环.
bool soundFinished = true;
if (soundFinished)
{
soundFinished = false;
Task.Factory.StartNew(() => { player.PlaySync(); soundFinished = true; });
}
Run Code Online (Sandbox Code Playgroud)
打开任务播放声音,等待声音结束,然后知道它已完成并再次播放.
Ana*_*aev 11
事实证明,MediaPlayer不播放嵌入式资源中的音乐文件,引用自 Matthew MacDonald book: Pro WPF 4.5 in C#. Chapter 26:
您提供文件的位置作为
URI.不幸的是,这个URIdoesn’t use the application pack syntax,所以不可能嵌入一个音频文件并使用MediaPlayer该类播放它.这种限制是因为MediaPlayer该类是基于WPF本机的功能而构建的,而是由Windows Media Player的一个独特的非托管组件提供的.
因此,请尝试设置音乐文件的本地路径:
private void PlaySound()
{
var uri = new Uri(@"your_local_path", UriKind.RelativeOrAbsolute);
var player = new MediaPlayer();
player.Open(uri);
player.Play();
}
Run Code Online (Sandbox Code Playgroud)
有关解决方法,请参阅此链接:
Playing embedded audio files in WPF
除了@Anatoly的答案之外,我建议听一下MediaFailed事件以检查是否有MediaPlayer失败(例如由于.wav文件路径错误而找不到文件).MediaPlayer如果无法加载媒体文件,则不会抛出异常,而是触发MediaFailed事件.
如果您尝试使用相对uri,请记住它相对于您的可执行文件位置.在开发阶段,它通常在bin\debug文件夹内.所以你的.wav文件的路径应该是"../../Sounds/jabSound.wav".
Uri uri = new Uri("../../Sounds/jabSound.wav", UriKind.Relative);
var player = new MediaPlayer();
player.MediaFailed += (o, args) =>
{
//here you can get hint of what causes the failure
//from method parameter args
};
player.Open(uri);
player.Play();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16348 次 |
| 最近记录: |