Windows-Phone-7:检查是否有一个soundffectinstance实例正在播放

本文关键字:实例 播放 soundffectinstance 有一个 检查 是否 Windows-Phone-7 | 更新日期: 2023-09-27 18:05:26

我有一个按钮,将控制声音效果。当点击按钮时,声音应该开始播放。如果你在声音还在播放的时候点击它,它应该会停止播放声音。如果你在声音自己停止播放后点击它,声音应该会重新开始播放。

我已经尝试过了,但是我使用的SoundState方法不正确,因为它不起作用:

public void playGenericSound(string fileName)
{
    if (playingSound.State != SoundState.Playing)
    {
        using (var stream = TitleContainer.OpenStream(fileName))
        {
            var effect = SoundEffect.FromStream(stream);
            playingSound = effect.CreateInstance();
            FrameworkDispatcher.Update();
            playingSound.Play();
        }
    }
    else
    {
        playingSound.Stop();
    }
}

任何想法?提前感谢!会的。

Windows-Phone-7:检查是否有一个soundffectinstance实例正在播放

对于XNA应用程序:

update()方法检查你的声音效果的playingSound。状态字段,如果播放已停止,则播放另一个。

Silverlight的

:

这部分有点棘手,因为SoundEffectInstance是作为XNA的一部分设计的。例如,您可以使用Timer创建自己的循环,并在事件处理程序中添加状态检查逻辑。

第二个想法是使用计时器,它的间隔设置为播放声音的持续时间,并添加一个标志,如bool isPlaying。当你第一次播放时,设置isPlaying标志为true并开始计时。在计时器处理程序中,将isPlaying标志设置为false。每次你按下按钮检查isPlaying标志。换句话说,创造你自己的游戏状态逻辑。

我想我应该把我在一个程序中所做的事情贴出来,我现在正在为某人工作。

// Play Audio File and allow stop
        if (new Rectangle(rV.X, rV.Y, rect.Width, rect.Height).Contains(mosX, mosY) && mouseClick)
        {
            if (driversmeeting.State != SoundState.Playing && !globalAudioPlaying)
            {
                globalAudioPlaying = true;
                driversmeeting.Play();
            }
            else if (driversmeeting.State == SoundState.Playing)
            {
                driversmeeting.Stop();
                globalAudioPlaying = false;
            }
        }