System.Media.SoundPlayer选择性播放

本文关键字:播放 选择性 SoundPlayer Media System | 更新日期: 2023-09-27 18:27:38

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

  1. 创建用于记录击键的对象的新实例
  2. 检查字典,获取System.Media.Soundplayer类的实例
  3. 修改屏幕上某个部分的背景色
  4. 在SoundPlayer中播放、async和.wav文件

Dictionary和SoundPlayer实例在加载表单时实例化,所有SoundPlayer示例在添加到Dictionary之前同步加载().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并将项目排队,但该选项有其自身的一系列后果。

有什么想法吗?我以前从来没有上过媒体课。

System.Media.SoundPlayer选择性播放

哎呀,刚刚意识到为什么会发生这种情况。有点像三步回答

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