如何检查MediaPlayer是否已完成加载声音?

时间:2014-06-01 20:15:40

标签: c# audio media-player

我正在尝试使用MediaPlayer类(System.Windows.Media.Mediaplayer)同时播放多个声音进行简单游戏。

为了同时多次播放同一个声音,我创建了自己的类,多次加载相同的声音。

这是一个简短的例子:

sound = new MediaPlayer[count]; //array of MediaPlayers

//...

for (int a = 0; a < count; a++)
{
      sound[a] = new MediaPlayer();
      sound[a].Open(new System.Uri(sp + pfad)); //load sound
}

这是我的问题:
如果我在开始游戏后不久尝试播放声音,我听不到声音或者我加载的第一个声音的开头将开始播放(即使我尝试播放完全不同的声音)。

似乎所有这些MediaPlayers(我正在加载~100)需要一些时间来加载声音。 因此,我正在寻找一种检查加载是否完成的方法。

2 个答案:

答案 0 :(得分:2)

我找到了一个解决方案:MediaOpened事件。这里有一些示例代码:

sound[a].MediaOpened += new System.EventHandler(counter); //i do this in the for-loop
//..
void Counter(object sender, System.EventArgs e)
{
    ++loadedCounter;
}

我正在计算我要加载的声音,每次声音加载后我都会增加另一个计数器。如果这两个计数器相等,我在声音类中启用play()方法:

if(shouldloadCounter == loadedCounter)
{
   //all sounds are ready
}

答案 1 :(得分:1)

加载还是播放?当媒体播放完毕后,它会升级MediaEnded事件,当缓冲完成后,它会上升BufferingEnded事件。 MediaPlayer events.