2010-02-04 4 views
4

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

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() не удается остановить.

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

+0

Я не понимаю, вы говорите, что вы называете Стоп, когда он уже остановлен, почему? Тогда вы говорите, что вызываете стоп, потому что он играет, и вы хотите остановить его? Может, пожалуйста, объясните – Amirshk

+0

Звук еще не воспроизводится, но я вызываю 'Stop()', чтобы быть в безопасности. Но почему-то это все еще дает мне исключение, как если бы оно играло. –

ответ

2

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

Обратитесь к данному образцу: http://msdn.microsoft.com/en-us/library/dd940205.aspx

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