From fee161a38d301c129468c022413752f835fdd8ed Mon Sep 17 00:00:00 2001 From: Markus Schmidt Date: Mon, 12 Mar 2018 21:43:54 +0100 Subject: [PATCH] Event handler for modulation, pitch bend and panic button --- src/jack-keyboard.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/jack-keyboard.c b/src/jack-keyboard.c index 924dc57..c6081c0 100644 --- a/src/jack-keyboard.c +++ b/src/jack-keyboard.c @@ -67,6 +67,15 @@ #define VELOCITY_LOW 32 #define VELOCITY_MIN 1 +#define MOD_MIN 0 +#define MOD_MAX 127 +#define MOD_INIT 0 + +#define PITCH_MIN -100 +#define PITCH_MAX 100 +#define PITCH_INIT 0 +#define PITCH_RANGE 8192 + #define OUTPUT_PORT_NAME "midi_out" #define INPUT_PORT_NAME "midi_in" #define PACKAGE_NAME "jack-keyboard" @@ -100,13 +109,15 @@ lash_client_t *lash_client; #define MIDI_NOTE_OFF 0x80 #define MIDI_PROGRAM_CHANGE 0xC0 #define MIDI_CONTROLLER 0xB0 -#define MIDI_RESET 0xFF +#define MIDI_PITCH 0xE0 +#define MIDI_RESET 0xFF #define MIDI_HOLD_PEDAL 64 #define MIDI_ALL_SOUND_OFF 120 #define MIDI_ALL_MIDI_CONTROLLERS_OFF 121 #define MIDI_ALL_NOTES_OFF 123 #define MIDI_BANK_SELECT_MSB 0 #define MIDI_BANK_SELECT_LSB 32 +#define MIDI_MOD_CC 1 #define BANK_MIN 0 #define BANK_MAX 127 @@ -116,7 +127,7 @@ lash_client_t *lash_client; #define CHANNEL_MAX 16 GtkWidget *window, *sustain_button, *channel_spin, *bank_spin, *program_spin, *connected_to_combo, - *velocity_hscale, *grab_keyboard_checkbutton, *octave_spin; + *velocity_hscale, *grab_keyboard_checkbutton, *octave_spin, *mod_scale, *pitch_scale, *panic_button; PianoKeyboard *keyboard; GtkListStore *connected_to_store; @@ -1031,6 +1042,26 @@ velocity_event_handler(GtkRange *range, gpointer notused) keyboard->current_velocity = gtk_range_get_value(range); } +void +mod_event_handler(GtkRange *range, gpointer notused) +{ + int val = (int) gtk_range_get_value(range); + queue_new_message(MIDI_CONTROLLER, MIDI_MOD_CC, val); +} + +void +pitch_event_handler(GtkRange *range, gpointer notused) +{ + uint16_t val = (uint16_t) (gtk_range_get_value(range) * ((float)PITCH_RANGE / (float)PITCH_MAX) + (float)PITCH_RANGE); + queue_new_message(MIDI_PITCH, val & 127, (val >> 7) & 127); +} + +void +panic_event_handler(GtkWidget *widget) +{ + panic(); +} + #ifdef HAVE_X11 int grab_x_error_handler(Display *dpy, XErrorEvent *notused)