C# 如何检查MediaPlayer是否已完成声音加载?
我正在尝试使用MediaPlayer类(C# 如何检查MediaPlayer是否已完成声音加载?,c#,audio,media-player,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 MediaPlaye
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
}
sound=newmediaplayer[count]//媒体播放器阵列
//...
对于(int a=0;a
这是我的问题:如果我尝试在游戏开始后不久播放一个声音,要么我听不到声音,要么我加载的第一个声音的开头将开始播放(即使我尝试播放完全不同的声音) 似乎所有这些媒体播放器(我正在加载~100)都需要一些时间来加载声音。
因此,我正在寻找一种方法来检查加载是否完成。加载还是播放?当媒体完成播放时,将引发MediaEnded事件,当缓冲完成时,将引发BufferingEnded事件 我找到了一个解决方案:MediaOpen事件。下面是一些示例代码:
sound[a].MediaOpened += new System.EventHandler(counter); //i do this in the for-loop
//..
void Counter(object sender, System.EventArgs e)
{
++loadedCounter;
}
我正在计算要加载的声音,每次加载完声音后,我都会增加另一个计数器。如果这两个计数器相等,我将在sound类中启用play()方法:
if(shouldloadCounter == loadedCounter)
{
//all sounds are ready
}
谢谢你的名单。我不确定哪个活动是我需要的。我想知道声音是否已完成加载,而不是声音是否已完全播放。我只是在播放之前将声音设置为0。(static TimeSpan startZeit=new TimeSpan(0);[…]sound[i].Position=startZeit;sound[i].Play();)看起来MediaOpen事件正是我需要的。现在测试它。我发现了一个非常奇怪的解决方案:我正在计算我想要加载的声音,每次加载完一个声音,我都会增加另一个计数器。如果这两个计数器相等,则在sound类中启用play()方法。如果(shouldlLoadCounter==loadedCounter){…}。是的,MediaOpen事件符合我的要求。再次感谢您的列表。如果我没有弄错的话,媒体播放器会在打开之前缓冲数据,这就是为什么您可以使用BufferingEnded事件。BufferingEnded事件从未出现在我的代码中。(我使用eventhandler中的MessageBox进行了测试,MessageBox从未弹出。)下面是我的代码,您应该将解决方案作为答案发布,然后将其标记为已接受。