gpt4 book ai didi

c# - KeyDown 和 KeyUp 倍数

转载 作者:太空狗 更新时间:2023-10-29 23:39:53 30 4
gpt4 key购买 nike

我正在用 C Sharp 创建一架钢琴,目前我有键盘键来播放声音。例如,键 A 播放音符 C。我遇到的问题是我想同时按下多个键并发出声音。显然我不想将所有组合都放在 keyDown 类中,因为我将不得不制作数千个 if 语句。有什么办法吗?

最佳答案

Windows 仅使用一个消息队列,因此每次在一个时间单位内只会处理一个按键消息。您可以做的是在短时间间隔(例如 0.5 秒)内获取所有按键按下事件,将所有按下的按键保存在列表或队列中,然后根据按键异步播放所有声音(使用线程)。我以前从未这样做过,但我认为应该可行。希望有所帮助...

编辑


好的,让我们看看:首先是保存 key 的列表

List<Key> _keys = new List<Key>();

然后启动一个计时器来检查在一个时间间隔内按下的键:

        var t = new System.Timers.Timer(500);    //you may try using an smaller value
t.Elapsed += t_Elapsed;
t.Start();

然后 t_Elapsed方法(请注意,如果您在 WPF 中,则应使用 DispatcherTimer,此计时器开启 System.Timers)

    void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (_keys.Count > 0)
{
//Here get all keys and play the sound using threads
_keys.Clear();
}
}

然后是 on key down 方法:

void OnKeyDownMethod(object sender, KeyPressedEventArgs e)  //not sure this is the name of the EventArgs class
{
_keys.Add(e.Key); //need to check
}

你可以试试这个,希望对你有帮助。

关于c# - KeyDown 和 KeyUp 倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15437684/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com