2010-02-04 6 views
4

J'essaye d'arrêter un Cue, puis de le rejouer. Ce code est dans la boucle de mise à jour():C# XNA: arrêt et lecture d'objets Cue (son)

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

Cependant, je reçois toujours un InvalidOperationException à l'emplacement ci-dessus. La documentation dit que cela se produira si Play() est appelée sur un Cue pour lequel isPlaying est vrai. Mais si j'appelle Stop() immédiatement avant, comment cela peut-il être?

Cela fonctionne très bien:

soundBank.PlayCue("torpedo"); 

Placer un appel à Stop() immédiatement après le son qui permet de jouer de toute façon, ce qui me surprend:

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

Si pas le rendre jamais être audible à l'utilisateur?

En outre, lorsque le son est déjà en cours de lecture, l'appel Stop() ne parvient pas à l'arrêter.

Je suis nouveau à C#/XNA.

+0

Je ne comprends pas, vous dites que vous appelez Stop quand il est déjà arrêté, pourquoi? Ensuite, vous dites que vous appelez stop parce qu'il joue et que vous voulez l'arrêter? Pouvez-vous m'expliquer? – Amirshk

+0

Le son n'est pas déjà joué, mais j'appelle 'Stop()' pour être sûr. Pourtant, d'une manière ou d'une autre, ça me donne toujours une exception comme si c'était en train de jouer. –

Répondre

2

Une fois qu'un Cue est arrêté, il ne peut plus être utilisé. Vous devez obtenir une nouvelle instance Cue du moteur audio.

Se reporter à cet exemple: http://msdn.microsoft.com/en-us/library/dd940205.aspx

En ce qui concerne l'arrêt, la Cue ne vous arrêtez pas immédiatement lorsque vous appelez Stop. Il peut prendre une trame ou deux, voire plus s'il y a une transition de fin définie.