c# - Windows-Phone-7:检查是否正在播放 soundEffectInstance 实例

标签 c# silverlight windows-phone-7 audio

我有一个按钮可以控制音效。单击按钮时,声音应开始播放。如果在声音仍在播放时单击它,它应该停止声音。如果在声音自行停止播放后单击它,声音应该会重新开始播放。

我已经试过了,但是我错误地使用了 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();
    }
}

有什么想法吗? 提前谢谢了! 会。

最佳答案

对于 XNA 应用:

update() 方法中检查您的音效的 playingSound.State 字段,如果播放已停止,则播放另一个。

对于 Silverlight:

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

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

您可以组合使用这些方法。

关于c# - Windows-Phone-7:检查是否正在播放 soundEffectInstance 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7056393/

相关文章:

silverlight - silverlight代码需要保护吗?

Silverlight 单元测试

windows-phone-7 - 暂停/恢复Windows Phone中当前播放的歌曲

windows-phone-7 - WP7如何启动音频代理程序

c# - 使用 SetTarget 方法针对多个对象的 Storyboard不起作用

c# - 尝试访问 NetworkLobby 中的 LobbyPlayer 实例时出现 Unity NullPointerException

c# - javascript从一个cshtml页面验证值来检查其他cshtml页面?

javascript - 调用 Web 服务时序列化 JSON 表现得很奇怪

c# - 如何在c#中传递回调?

c# - 第一次访问缓存时出现 IsolatedStorage 异常