tags:

views:

322

answers:

1

I am trying to stop a Cue, then play it again. This code is in the Update() loop:

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

However, I always get an InvalidOperationException at the above location. The documentation says that will occur if Play() is called on a Cue for which isPlaying is true. But if I call Stop() immediately before, how can this be?

This works fine:

soundBank.PlayCue("torpedo");

Placing a call to Stop() immediately after that allows the sound to play anyway, which surprises me:

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

Shouldn't this make it never be audible to the user?

Additionally, when the sound is already playing, calling Stop() fails to stop it.

I'm new to C#/XNA.

+1  A: 

Once a Cue is stopped it can no longer be used. You have to get a new Cue instance from the audio engine.

Refer to this sample: http://msdn.microsoft.com/en-us/library/dd940205.aspx

Regarding the stopping, the Cue doesn't immediately stop when you call Stop. It can take a frame or two, or even more if there's an ending transition defined.

Crappy Coding Guy