Есть ли более быстрый способ воспроизведения звука, чем SoundPlayer в C #? - PullRequest
2 голосов
/ 02 июня 2019

Я пытаюсь воспроизводить звук при каждом нажатии клавиши, используя класс SoundPlayer (для имитации звуков пишущей машинки).

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

Работает нормально ... до тех пор, пока вы набираете около 20 слов в минуту. Чуть быстрее, и звуки не воспроизводятся полностью или даже не перестают воспроизводиться полностью, пока вы не замедлитесь

2.wav - это звуковой файл объемом 8 КБ с длительностью 0,1 секунды, поэтому, исходя только из продолжительности звука, файл может воспроизводиться полностью 600 раз в минуту (этого достаточно для скорости печати около 90 Вт / мин).

Есть ли более быстрый способ воспроизведения звукового файла или проблема в другом месте?

1 Ответ

0 голосов
/ 02 июня 2019

Как вы это сделаете, вы создадите новый экземпляр SoundPlayer на каждом KeyDown, который должен будет каждый раз перезагружать один и тот же семпл с диска. Класс 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();
}

В моем случае это работало более свободно.

...