Ответ 1
У меня была такая же функция, и я использовал два экземпляра с одним и тем же аудиоклипом для его решения, один с циклом и один без него. Я переключил между ними. Возможно, это не лучшее решение, но это сработало для меня.
Мне нужен способ запуска/остановки цикла во время воспроизведения звука. Я обнаружил, что лучший способ воспроизвести несколько звуков - использовать XNA. Поэтому я создал SoundEffectInstance
, начиная с моего объекта SoundEffect
, который содержит аудиоклип.
Теперь проблема в том, что у меня есть кнопка, которая должна изменить состояние этого клипа с "зацикленного" на "non looping" и наоборот.
Здесь проблема:
он выдает исключение, говоря, что цикл должен быть установлен перед первым воспроизведением.
Поэтому я подумал, что, переключаясь с "non looping" на "looped", я мог просто ждать остановки звука, а затем воссоздать SoundEngineInstance
, установить IsLooped = true
и снова запустить его.
Это работает, но есть некоторые задержки, и это заставляет вас потерять время, так что это совершенно бесполезно.
Я ищу способ установить или отключить цикл во время воспроизведения звука и без какой-либо задержки.
EDIT:
Я попытался использовать два SoundEngineInstance
, один зацикленный и один нет, и просто переключаюсь между ними с помощью тома.
Проблема заключается в том, что не-петлевая запись останавливается только после первого воспроизведения, поэтому, если я зациклирую ее два раза, а затем поставлю ее в состояние без петли, звук не воспроизводится, потому что незатухающий клип уже закончился!
Предложения?
У меня была такая же функция, и я использовал два экземпляра с одним и тем же аудиоклипом для его решения, один с циклом и один без него. Я переключил между ними. Возможно, это не лучшее решение, но это сработало для меня.
Из http://msdn.microsoft.com/en-us/library/dd940203(v=xnagamestudio.31).aspx:
Объявите SoundEffect, используя метод, показанный в разделе How To: Воспроизведение звука.
Объявите параметр SoundEffectInstance и установите его для возвращаемого значения SoundEffect.CreateInstance.
Установите SoundEffectInstance.IsLooped в true.
Вызовите SoundEffectInstance.Play, чтобы воспроизвести звук цикла.
Вероятно, вы можете установить IsLooped в false, когда вы больше не хотите, чтобы он зациклился, но только для воспроизведения до конца.