我正在尝试使用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)需要一些时间来加载声音。 因此,我正在寻找一种检查加载是否完成的方法。
答案 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.