C# XNA:停止和播放Cue(声音)对象

4
我正在尝试停止一个Cue,然后再次播放它。以下代码位于Update()循环中:
Cue torpedoSound = soundBank.GetCue("torpedo");
torpedoSound.Stop(AudioStopOptions.AsAuthored);
torpedoSound.Play(); // Invalid Operation Exception

然而,我总是在上述位置收到一个“InvalidOperationException”异常。文档表示,如果对“isPlaying”为true的“Cue”调用“Play()”,则会发生这种情况。但是,如果我立即调用“Stop()”,这怎么可能呢?
这个没问题:
soundBank.PlayCue("torpedo");

在此之后立即调用 Stop() 可以让声音继续播放,这让我感到惊讶:

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

这难道不会使用户听不到声音吗?

此外,当声音已经在播放时,调用Stop()无法停止它。

我是C# / XNA的新手。


我不明白,你说当它已经停止时你调用Stop,为什么?然后你又说你调用stop是因为它正在播放而你想要停止它?能否请你解释一下? - Amirshk
声音尚未播放,但我调用“Stop()”以确保安全。然而,不知何故,它仍然给我一个异常,就像它正在播放一样。 - Nick Heiner
1个回答

2

一旦Cue停止,它就不能再使用了。您需要从音频引擎获取新的Cue实例。

请参考此示例: http://msdn.microsoft.com/en-us/library/dd940205.aspx

关于停止,当您调用Stop时,Cue不会立即停止。如果定义了结束转换,则可能需要一帧或两帧,甚至更多时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接