C# XNA: остановка и воспроизведение объектов Cue (звук)

Я пытаюсь остановить Cue, а затем воспроизвести его снова. Этот код находится в цикле Update():

Cue torpedoSound = soundBank.GetCue("torpedo");
torpedoSound.Stop(AudioStopOptions.AsAuthored);
torpedoSound.Play(); // Invalid Operation Exception

Однако я всегда получаю InvalidOperationException в указанном выше месте. В документации сказано, что это произойдет, если Play() вызывается для Cue, для которого isPlaying истинно. Но если я позвоню Stop() непосредственно перед этим, как это может быть?

Это отлично работает:

soundBank.PlayCue("torpedo");

Вызов Stop() сразу после этого позволяет звуку воспроизводиться в любом случае, что меня удивляет:

soundBank.PlayCue("torpedo");
torpedoSound.Stop(AudioStopOptions.Immediate);

Разве это не должно сделать его никогда не слышимым для пользователя?

Кроме того, когда звук уже воспроизводится, вызов Stop() не может его остановить.

Я новичок в С#/XNA.


person Nick Heiner    schedule 04.02.2010    source источник
comment
Я не понимаю, вы говорите, что вызываете Стоп, когда он уже остановлен, почему? Затем вы говорите, что звоните стоп, потому что он играет, и вы хотите его остановить? Не могли бы вы объяснить   -  person Amirshk    schedule 04.02.2010
comment
Звук еще не воспроизводится, но я звоню Stop() на всякий случай. Тем не менее, каким-то образом он все еще дает мне исключение, как если бы он играл.   -  person Nick Heiner    schedule 04.02.2010


Ответы (1)


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

См. этот пример: http://msdn.microsoft.com/en-us/library/dd940205.aspx

Что касается остановки, Cue не останавливается немедленно, когда вы вызываете Stop. Это может занять кадр или два, или даже больше, если определен конечный переход.

person Dave Carlile    schedule 05.02.2010