我制作了一个小程序,可以在按键时播放声音。
它使用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
启动键盘监听器。
// 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);
}
KeyboardListener Class就在这里。
https://gist.github.com/Ciantic/471698
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();
}
答案 0 :(得分:0)
尝试显示MessageBox或其他内容,以了解延迟事件是声音本身还是按键事件。 如果MessageBox在播放声音之前显示,那么这不是键盘钩子库的问题。