在C#中播放.wav文件的问题

时间:2017-05-10 14:50:08

标签: c# wav soundplayer

我正在开展一个项目,当某些动作发生时应播放声音(.wav文件)。这些文件位于项目/位置的子文件夹中的本地驱动器上。

为了一个接一个地同步播放声音,我有以下课程:

public class Player
{
    private readonly BlockingCollection<Sound> _queue;

    public Player()
    {
        _queue = new BlockingCollection<Sound>();
        Task.Factory.StartNew(Play);
    }

    public void PlaySound(Sound sound)
    {
        _queue.Add(sound);
    }

    private void Play()
    {
        foreach (var sound in _queue.GetConsumingEnumerable())
        {
             var filename = GetFile(sound);
             using (var player = new System.Media.SoundPlayer(filename))
             {
                 player.PlaySync();
             }
        }
    }
}

我遇到的问题有时候,PlaySync方法运行超过一分钟,直到播放声音。声音文件的持续时间为0.2秒。这仅在方法的第一次调用时发生。我尝试将文件存入内存并调用SoundPlayer类的Load / LoadAsync方法。这对情况没有影响。 PlaySync呼叫有时需要一分钟以上。

我还尝试了System.Windows.Media.MediaPlayer类,但它看起来这个类只能播放异步声音,我需要声音同步。从未调用过类似MediaEnded的事件。

我试了很多天才找到解决这个问题的方法,但没找到任何东西。有谁可以帮助我?

我正在使用WPF和MVVM框架Prism,这个类在viewmodel中实例化。

0 个答案:

没有答案