KeyDown和KeyUp Multiple

时间:2013-03-15 16:39:10

标签: c# keydown

我正在用C Sharp制作钢琴,目前我有键盘按键来播放声音。例如,键A播放音符C.问题我在那里我想要同时按下多个键并发出声音。很明显,我不想将所有组合放在keyDown类中,因为我必须生成数千个if语句。反正有吗?

2 个答案:

答案 0 :(得分:1)

您可以查看此link。它可以帮助您解决查询。

另请查看此Thread

如果您打算使用MIDI,请检查this

答案 1 :(得分:1)

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

修改


好的,让我们看看: 首先列出保存键的位置

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
 }

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