我试图使用SoundPlayer类(每次模拟打字机声音)每次按下按键时播放打字声音。

public void MyKeyDown(object sender, KeyEventArgs)
{
    player = new System.Media.SoundPlayer(@"f:\sounds\2.wav");
    player.Play();
}


只要您每分钟输入大约20个单词,它就可以正常工作。任何比这快的速度,声音都不会完全播放,甚至完全停止播放,直到您放慢速度

2.wav是一个8kb的声音文件,持续时间为0.1秒,因此,仅根据声音持续时间,该文件就可以每分钟完整播放600次(键入速度约为90 wpm)。

有没有更快的播放声音文件的方法,还是其他地方的问题?

最佳答案

这样,您将在每个KeyDown上创建一个SoundPlayer的新实例,然后每次都需要从光盘重新加载相同的样本。 SoundPlayer类具有一个构造函数,该构造函数将声音文件的位置作为参数。在这种情况下,您可以重复使用SoundPlayer实例,并且文件将缓存在内存中。我可以想象这会更快。

这样的事情应该可以解决问题:

private SoundPlayer soundPlayer;

// Call this on App Startup / Initialization...
private void InitializeSoundPlayer()
{
  this.soundPlayer = new SoundPlayer("sound.wav");
}

public void MyKeyDown(object sender, KeyEventArgs)
{
    this.soundPlayer.Play();
}


就我而言,这种方法更加流畅。

10-06 12:20