按键时播放音频文件会延迟

时间:2018-03-29 12:19:33

标签: c# naudio

我制作了一个小程序,可以在按键时播放声音。

它使用global keyboard hook捕获按键并使用NAudio播放wav个文件。

然而,某些计算机上的播放滞后,并且在按下该键后几秒钟播放。这可能是HDD / SSD或CPU速度问题还是编程问题?可以做些什么来解决它?

在4台电脑上试过,2次落后,2次没有。

  • 我的SSD / i7 - 没有滞后。
  • 我的HDD / Core2Duo - 没有滞后。
  • 朋友的SSD / i7 - 滞后。
  • 朋友HDD / i7 - 滞后。

程序

信息
https://github.com/MattMcManis/Ink

来源
https://github.com/MattMcManis/Ink/tree/master/source/Ink

下载
https://github.com/MattMcManis/Ink/releases

App.xaml.cs

启动键盘监听器。

// Application Startup
//
private void Application_Startup(object sender, StartupEventArgs e)
{
    th = new Thread(() => RunKeyListener());
    th.IsBackground = true;
    th.Start();
    th.Join();
}

// Keyboard Listener
//
private void RunKeyListener()
{
    KListener.KeyDown += new RawKeyEventHandler(KListener_KeyDown);
}

// Key Down
//
void KListener_KeyDown(object sender, RawKeyEventArgs args)
{
    Sound.KeyPressed(args);
}

MainWindow.xaml.cs

KeyboardListener Class就在这里。

https://gist.github.com/Ciantic/471698

Sound.cs

private static string wavKeyChar = "Sounds\\character.wav";
private static string wavKeyNum = "Sounds\\number.wav";

public static WaveFileReader wav = null;
public static WaveOutEvent output = null;

// Key Pressed
//
public static void KeyPressed(RawKeyEventArgs args)
{
    // Letters
    if (args.Key >= Key.A && args.Key <= Key.Z)
    {
        PlaySound(wavKeyChar);
    }

    // Numbers
    else if (args.Key >= Key.D0 && args.Key <= Key.D9)
    {
        PlaySound(wavKeyNum);
    }
}

// Play Sound
//
public static void PlaySound(string sound)
{
    wav = new WaveFileReader(sound);

    output = new WaveOutEvent();
    output.NumberOfBuffers = 3;
    output.DesiredLatency = 500;
    output.Init(wav);
    output.Play();
}

1 个答案:

答案 0 :(得分:0)

尝试显示MessageBox或其他内容,以了解延迟事件是声音本身还是按键事件。 如果MessageBox在播放声音之前显示,那么这不是键盘钩子库的问题。