Windows phone 定时器触发->;音频文件播放不干净

Windows phone 定时器触发->;音频文件播放不干净,windows-phone,windows-phone-8,Windows Phone,Windows Phone 8,我正在编写一个Windows Phone 8应用程序,并试图在计时器启动时播放音频文件(在本例中是Metronome920.wav,一个0.07s,6kb的文件)。当计时器启动时,文件会播放,但可能有40-50%的时间,当它播放时,会发出噼啪声/砰砰声,并且播放不干净。该应用程序非常简单,只包含计时器/音频播放。我没有更改在VisualStudio中启动新项目时创建的默认GUI 这让我相信这可能是一个线程问题。有什么想法吗 namespace AudioTest1 { class MyT

我正在编写一个Windows Phone 8应用程序,并试图在计时器启动时播放音频文件(在本例中是Metronome920.wav,一个0.07s,6kb的文件)。当计时器启动时,文件会播放,但可能有40-50%的时间,当它播放时,会发出噼啪声/砰砰声,并且播放不干净。该应用程序非常简单,只包含计时器/音频播放。我没有更改在VisualStudio中启动新项目时创建的默认GUI

这让我相信这可能是一个线程问题。有什么想法吗

namespace AudioTest1
{
    class MyTimer
    {
        private Timer t; //Windows.Threading.Timer

        public MyTimer()
        {
            t = new Timer(new TimerCallback(timer_Tick), null, 0, 500);
        }

        private void PlaySound()
        {
            using (var stream = TitleContainer.OpenStream("Sounds\\Metronome920.wav"))
            {
                var effect = SoundEffect.FromStream(stream);
                FrameworkDispatcher.Update();
                effect.Play();
            }
        }
        private void timer_Tick(object sender)
        {
                PlaySound();
        }

    }
}
我正在使用MainPage.xaml.cs中的以下代码创建MyTimer对象:

    public MainPage()
    {
        InitializeComponent();
        MyTimer m = new MyTimer();
    }

编辑:在设备上运行时发生的情况的音频文件位于以下位置:

您可能需要尝试硬关机/重新启动手机设备。我得到的结果与你的结果相似,但一旦我对设备进行了硬复位,口吃的声音就停止了。我用一个普通计时器、一个调度器和一个MediaElement(而不是SoundEffect)尝试了这个方法。您可以在这里找到我的示例解决方案:

模拟器与物理设备上的行为不同吗?另外,您是否考虑过使用MediaElement而不是SoundEffect?我刚刚使用您的代码创建了一个示例项目,但是使用了我自己的“metronome.wav”文件,它在我的机器上运行得非常好。当我写这篇文章时,在背景中不断地听它。我正在一款新的诺基亚手机上运行这篇文章。我没有在模拟器上尝试过,因为我预计性能会比在手机上下降。我也尝试过使用MediaElement,但似乎遇到了同样的问题。@b斯塔汉姆,你是在使用仿真器,还是在使用设备?有趣的是,在仿真器上试过,效果更好。我们会进一步调查,反应很好。感谢您研究这个问题并提供示例代码!重启肯定有帮助,我也会根据你的建议/示例对代码进行调整。我一直在玩我的三个示例,看起来Dispatcher和SoundEffect效果最好。您的里程数可能会有所不同。我同意,这种组合似乎也是我手机上的最佳选择。再次感谢你!