Как проверить, воспроизводится ли звуковой эффект (Looping a BG Song)
Вот настройки, которые я сейчас использую. Учитывая это, как я могу узнать, когда _BGMusic SoundEfect закончится? Я запускаю игровой цикл, который повторяется несколько раз в секунду, и я в конечном итоге хочу зациклить эту песню.
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
SoundEffect _BGMUSIC;
public Page1() {
...
LoadSound("sfx/piano.wav", out _BGMUSIC);
...
}
private void LoadSound(String SoundFilePath, out SoundEffect Sound) {
// For error checking, assume we'll fail to load the file.
Sound = null;
try {
// Holds informations about a file stream.
StreamResourceInfo SoundFileInfo =
App.GetResourceStream(new Uri(SoundFilePath, UriKind.Relative));
// Create the SoundEffect from the Stream
Sound = SoundEffect.FromStream(SoundFileInfo.Stream);
FrameworkDispatcher.Update();
} catch (NullReferenceException) {
// Display an error message
MessageBox.Show("Couldn't load sound " + SoundFilePath);
}
}
2 ответа
Хорошо, так что ответ на этот вопрос на самом деле очень прост и очень красиво обрисован на странице MSDN Microsoft (на этот раз).
Для реализации того, что я описал выше, вам нужно сделать следующее.
Создайте глобальный экземпляр SoundEffectInstance
SoundEffectInstance _BGMUSICINSTANCE;
В моем примере я инициализирую SoundEffect в своем основном методе, поэтому под ним я хочу инициализировать SoundEffectInstance.
_BGMUSICINSTANCE = _BGMUSIC.CreateInstance();
Теперь, когда экземпляр загружен и готов, мы можем установить для его свойства loop значение true. Вы можете сделать это также в основном методе или где угодно. Это глобальный
_BGMUSICINSTANCE.IsLooped = true;
Наконец-то сыграй песню
_BGMUSICINSTANCE.Play();
Ссылочная страница http://msdn.microsoft.com/en-us/library/dd940203(v=xnagamestudio.31).aspx
Из этого кода похоже, что вы только что сохранили звук в Sound
но вы не показываете, где вы реализуете Sound.Play()
метод. Пока нет Sound.IsPlaying
логическое значение, которое, вероятно, решит вашу проблему, есть Sound.Duration
свойство, которое вы можете использовать для решения вашей проблемы, особенно если вы сочетаете это с Timer
(который может использоваться в тандеме для установки флажка, показывающего, воспроизводится ли звук.
Также то, что я никогда не использовал, но только что нашел Sound.IsDisposed
имущество. Я бы определенно посмотрел на это, потому что это может быть именно то, что вы ищете.