System.Media.SoundPlayer选择性播放

时间:2013-08-14 21:49:03

标签: c# soundplayer

我有一个小应用程序,意图是当用户按下某个键时会发生一些事情

  1. 创建用于记录击键的对象的新实例
  2. 检查字典,抓取System.Media.Soundplayer类的实例
  3. 修改屏幕上某个部分的背景颜色
  4. 播放,异步,SoundPlayer中的.wav文件
  5. 在加载表单时实例化Dictionary和SoundPlayer实例,并且所有SoundPlayer实例在添加到字典之前同步Load().wav文件。

    表单的KeyDown事件如下所示:

    //do stuff up here, get the type, etc etc
    //players is Dictionary<EnumFoo, SoundPlayer>
    
    SoundPlayer sound = players[type];
    sound.Play();
    
    this.KeyUp += (sUp, eUp) =>
    {
        DateTime endTime = DateTime.Now;
        foo.Duration = endTime - startTime;
        sound.Stop();
        this.resetColors();
    };
    

    这是我的问题:它似乎只播放较短的声音。有些长度最长约30秒,有些则长度小于5.如果我在实例化SoundPlayer后放置断点,那么即使长音也能正常播放。

    我正在考虑使用ThreadPool并将项目排队,但该选项有其自己的一组分支。

    有什么想法吗?我以前从来没有遇到任何媒体课。

1 个答案:

答案 0 :(得分:0)

哎呀,刚才意识到为什么会这样。有点3步答案

  1. 一个很糟糕的假设,当我按住键时,只有一个KeyDown事件被触发。这不准确。它会多次发射。
  2. 我被指向了错误的音频文件,其中有一段沉默来预告噪音。
  3. 漫长的一天和糟糕的测试。代码本身很好(至少,对于我需要它的一次性应用程序是可行的),这对我来说只是糟糕的测试。