Воспроизведение второго SoundEffect после завершения первого - PullRequest
0 голосов
/ 22 апреля 2011

В моем приложении я использую SoundEffect для воспроизведения некоторых звуков.Я хочу знать, есть ли способ узнать, когда SoundEffect завершил свой запуск, поэтому сразу начнется второй.

Ответы [ 3 ]

2 голосов
/ 22 апреля 2011

Насколько мне известно, этот сценарий не поддерживается XNA "из коробки".

Класс SoundEffect предоставляет свойство Duration , которое вы можете использовать для достижения своей цели.

Создайте некоторый класс "SoundManager" (в основном простой планировщик), который будет выполнять всю необычную координацию воспроизведения звуков.

Этот класс начнет воспроизведение SoundEffect, запланировав следующее, которое произойдет ровно после того, как Длительность истекла.

1 голос
/ 15 августа 2013

старый вопрос, но мне пришлось сделать то же самое сегодня, я попробовал метод, основанный на длительности, но в конце концов остановился на собственном решении, которое кажется мне самым простым:

1) создайте статический вспомогательный класс, скажем, 'SoundsManager', как в ответе лизергиновой кислоты.

2) создайте очередь SoundsEffectInstanses и воспроизведите первый из них ("_sheduledSounds" в приведенном ниже коде).

3) Обновите класс с каждым игровым циклом и проверьте, остановлен ли звуковой инстанс:

public static void Update()
        {
            if (_sheduledSounds != null && _sheduledSounds.Count > 1)
            {
                if (_sheduledSounds.Peek().State == SoundState.Stopped)
                {
                    _sheduledSounds.Dequeue();
                    _sheduledSounds.Peek().Play();
                }
            }
        }
0 голосов
/ 22 апреля 2011

Установите этот флаг BufferDescription.GlobalFocus = True;

Это сообщит SoundEffect о завершении работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...