File tree 3 files changed +9
-6
lines changed
3 files changed +9
-6
lines changed Original file line number Diff line number Diff line change @@ -91,7 +91,7 @@ void close_game_controllers() {
91
91
}
92
92
93
93
static input_msg_s handle_keyjazz (SDL_Event * event , uint8_t keyvalue ) {
94
- input_msg_s key = {keyjazz , keyvalue };
94
+ input_msg_s key = {keyjazz , keyvalue , event -> type };
95
95
switch (event -> key .keysym .scancode ) {
96
96
case SDL_SCANCODE_Z :
97
97
key .value = keyjazz_base_octave * 12 ;
Original file line number Diff line number Diff line change @@ -32,6 +32,7 @@ typedef enum special_messages_t {
32
32
typedef struct input_msg_s {
33
33
input_type_t type ;
34
34
uint8_t value ;
35
+ uint32_t eventType ;
35
36
} input_msg_s ;
36
37
37
38
void close_game_controllers ();
Original file line number Diff line number Diff line change @@ -72,6 +72,7 @@ int main(int argc, char *argv[]) {
72
72
#endif
73
73
74
74
uint8_t prev_input = 0 ;
75
+ uint8_t prev_note = 0 ;
75
76
76
77
// main loop
77
78
while (run ) {
@@ -87,14 +88,15 @@ int main(int argc, char *argv[]) {
87
88
}
88
89
break ;
89
90
case keyjazz :
90
- if (input .value != prev_input ) {
91
- prev_input = input .value ;
92
- if (input .value != 0 ) {
91
+ if (input .value != 0 ) {
92
+ if (input .eventType == SDL_KEYDOWN && input .value != prev_input ) {
93
93
send_msg_keyjazz (port , input .value , 0xFF );
94
- } else {
95
- send_msg_keyjazz (port , 0 , 0 );
94
+ prev_note = input .value ;
95
+ } else if (input .eventType == SDL_KEYUP && input .value == prev_note ) {
96
+ send_msg_keyjazz (port , 0xFF , 0 );
96
97
}
97
98
}
99
+ prev_input = input .value ;
98
100
break ;
99
101
case special :
100
102
if (input .value != prev_input ) {
You can’t perform that action at this time.
0 commit comments