【问题标题】:Is there a faster way to play a sound than SoundPlayer in C#?有没有比 C# 中的 SoundPlayer 更快的方法来播放声音?
【发布时间】:2019-06-02 15:00:24
【问题描述】:

我尝试使用 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 左右的打字速度)。

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

【问题讨论】:

  • 没有人稳定地打字。 SoundPlayer 非常简单,它没有重叠或混合声音的选项。以 NAudio 库为例。
  • 拥有一个播放器实例会更快吗?并且每次都简单地调用 play?
  • @the.Doc 两种方法都试过了,没有区别。
  • @HansPassant 我刚刚尝试使用 NAudio 和教程中的代码进行播放。工作得更好一点,但在短时间内崩溃,尽管在“尝试”块内。我会仔细看看我是否可以让它工作,如果我做不到,我会问一个更好的问题。

标签: c# soundplayer


【解决方案1】:

按照您的操作方式,您将在每个 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();
}

在我的情况下,这更流畅。

【讨论】:

  • 一开始我也是这么做的,没什么实际区别。
猜你喜欢
  • 2014-04-01
  • 2023-04-04
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
相关资源
最近更新 更多