2014-06-01 8 views
1

Я пытаюсь воспроизвести несколько звуков одновременно для простой игры, используя класс MediaPlayer (System.Windows.Media.Mediaplayer).Как проверить, закончил ли 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

Загрузка или воспроизведение? Когда медиазагрузка закончила воспроизведение, оно увеличивает событие MediaEnded, когда буферизация завершена, он увеличивает событие BufferingEnded. MediaPlayer events.

+0

Спасибо за список. Я не уверен, что это то, что мне нужно. Я хочу знать, закончил ли звук загрузку, а не если звук был воспроизведен полностью. Я просто установил звук в положение 0, прежде чем играть. (статический TimeSpan startZeit = новый TimeSpan (0); [...] sound [i] .Position = startZeit; sound [i] .Play();) – blue

+0

Похоже, что событие MediaOpened - это то, что мне нужно. Тестирование сейчас. – blue

+0

Я нашел очень странное решение: я подсчитываю звуки, которые хочу загрузить, и каждый раз, когда звук заканчивается, я увеличиваю счетчик. Если эти два счетчика равны, я включаю метод play() в моем звуковом классе. if (mustloadCounter == loadedCounter) {...}. И да, событие MediaOpened делает то, что я хочу. Еще раз спасибо за список. – blue

Смежные вопросы