首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SoundEffect同时播放音频片段时出现滞后

使用SoundEffect同时播放音频片段时出现滞后
EN

Stack Overflow用户
提问于 2011-04-24 04:29:57
回答 1查看 1.2K关注 0票数 2

我正在开发一个Windows Phone应用程序,遇到了以下问题。我有一个循环的.Wav文件的背景音乐,可以切换或关闭。按下按钮即可播放额外的音效(如Sound1)。当背景音乐关闭时,音效可以正常播放。然而,当背景音乐打开时,按下按钮和声音效果之间有一个轻微的(但非常明显的)延迟。有什么我可以通过编程来避免这种情况的吗?根据MSDN网站http://msdn.microsoft.com/en-us/library/ff431744%28v=vs.92%29.aspx上的建议,我设置了一个dispatcherTimer来每隔50ms调用FrameworkDispatcher.Update一次。然而,这似乎没有太大的帮助...我已经粘贴了下面的一些代码。我还能做些什么来摆脱这种延迟呢?

代码语言:javascript
复制
public partial class Modules : PhoneApplicationPage
{
    static SoundEffectInstance loopedSound = null;
    static SoundEffectInstance sound1=null;
    double pitchValue = 4.0;
    static double pitchAdjust = 0.0;

    public Modules()
    {
        InitializeComponent();

        // Timer to simulate the XNA game loop (SoundEffect classes are from the XNA Framework)
        DispatcherTimer XnaDispatchTimer = new DispatcherTimer();
        XnaDispatchTimer.Interval = TimeSpan.FromMilliseconds(50);
        XnaDispatchTimer.Tick += delegate { try { FrameworkDispatcher.Update(); } catch { } };
        XnaDispatchTimer.Start();
    }



    private void playButton_Click(object sender, RoutedEventArgs e)
    {
        if (loopedSound!=null) 
            loopedSound.Dispose();
        SoundEffect sound = SoundEffect.FromStream(Application.GetResourceStream(new Uri(@"BackgroundSound.wav", UriKind.Relative)).Stream);
        LoopClip(sound);

    }

    private void stopButton_Click(object sender, RoutedEventArgs e)
    {
        loopedSound.Stop();
    }

    static protected void LoopClip(SoundEffect soundEffect)
    {
        loopedSound = soundEffect.CreateInstance();
        loopedSound.IsLooped = true;
        loopedSound.Pitch = (float) pitchAdjust;
        loopedSound.Play();
    }

    static protected void sound1Clip(SoundEffect soundEffect)
    {
        sound1 = soundEffect.CreateInstance();
        sound1.IsLooped = false;
        sound1.Play();
    }


    private void Sound1Button_Click(object sender, RoutedEventArgs e)
    {
        if (sound1 == null)
        {
            SoundEffect sound =    SoundEffect.FromStream(Application.GetResourceStream(new Uri(@"sound1.wav", UriKind.Relative)).Stream);
            sound1Clip(sound);
        }
        if (sound1 != null)
        {

            sound1.Play();
        }


    }



}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-24 04:56:21

预先加载SoundEffect,这样就不会从FromStream()得到延迟。然而,这对手机来说并不是很友好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5766740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档