From 302e4b9e7e0dd5a2e5c3f087ef5688c046ec3b21 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Thu, 30 Mar 2017 00:50:03 +0200 Subject: Add config dumper --- config.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- config.h | 2 ++ 2 files changed, 77 insertions(+), 12 deletions(-) diff --git a/config.c b/config.c index 47506d5..fb8a6fa 100644 --- a/config.c +++ b/config.c @@ -17,6 +17,31 @@ int g_timetosilence = 30; int g_min_y = 0, g_max_y; +static int g_current_string; +StringConfig + g_string_conf[MAX_LINECOUNT]; +int g_string_count; + +void +config_reset() +{ + //Reinitialise string config array + memset(g_string_conf, 0, sizeof(g_string_conf)); + g_min_y = 0; + g_max_y = 1024; + g_current_string = 0; + + g_midi_main_control = -1; + g_midi_main_channel = 0; + g_midi_two_octave_split = 256 / 2; + g_midi_three_octave_split_1 = 256 / 3; + g_midi_three_octave_split_2 = 512 / 3; + g_midi_three_octave_split_inverse = 0; + g_settled_dist = 5; + g_timetosilence = 30; +} + + static char *midi_note[] = { "C-1", "C#-1", "D-1", "D#-1", "E-1", "F-1", "F#-1", "G-1", "G#-1", "A-1", "A#-1", "B-1", "C0", "C#0", "D0", "D#0", "E0", "F0", "F#0", "G0", "G#0", "A0", "A#0", "B0", @@ -31,6 +56,14 @@ static char *midi_note[] = { "C9", "C#9", "D9", "D#9", "E9", "F9", "F#9", "G9", "G#9", "A9", "A#9", "B9" }; +static char *modifier_names[] = { + "none", "pitch_bend_up", "pitch_bend_down", "midi_control", "midi_control_inverse" +}; + +static char *mode_names[] = { + "midi_one_octave", "midi_two_octaves", "midi_three_octaves", "midi_control", "midi_control_inverse" +}; + enum { KEYWORD_STRINGS, KEYWORD_STRING, @@ -51,11 +84,13 @@ enum { KEYWORD_MIDI_CONTROL_INVERSE, KEYWORD_CONTROLLER, KEYWORD_TIMETOSILENCE, + KEYWORD_PITCHFACTOR, KEYWORD_TWOOCTAVESPLIT, KEYWORD_THREEOCTAVESPLIT_1, KEYWORD_THREEOCTAVESPLIT_2, KEYWORD_MIDI_MAIN_CONTROL, - KEYWORD_MIDI_MAIN_CHANNEL + KEYWORD_MIDI_MAIN_CHANNEL, + KEYWORD_SETTLED_DIST }; typedef struct { @@ -83,6 +118,7 @@ static keyword keywords[] = { {KEYWORD_MIDI_CONTROL_INVERSE, "midi_control_inverse"}, {KEYWORD_CONTROLLER, "Controller"}, {KEYWORD_TIMETOSILENCE, "TimeToSilence"}, + {KEYWORD_PITCHFACTOR, "PitchFactor"}, {KEYWORD_TWOOCTAVESPLIT, "midi_two_octave_split"}, {KEYWORD_THREEOCTAVESPLIT_1, "midi_three_octave_split_1"}, {KEYWORD_THREEOCTAVESPLIT_2, "midi_three_octave_split_2"}, @@ -91,11 +127,6 @@ static keyword keywords[] = { {-1, 0} }; -static int g_current_string; -StringConfig - g_string_conf[MAX_LINECOUNT]; -int g_string_count; - static int config_findkeyword(char **line) @@ -265,6 +296,10 @@ config_handle_line(char *line) return -1; } break; + case KEYWORD_PITCHFACTOR: + sc->pitch_factor = atol(line); + printf("String %d is given a custom pitch factor of %d\n", 1 + g_current_string, sc->pitch_factor); + break; case KEYWORD_CONTROLLER: sc->controller = atol(line); printf("String %d is on midi_controller line %d\n", 1 + g_current_string, sc->controller); @@ -318,6 +353,10 @@ config_handle_line(char *line) return -1; } break; + case KEYWORD_SETTLED_DIST: + g_settled_dist = atol(line); + printf("All AfterTouch events take place only after movement has slown down to %d points\n", g_settled_dist); + break; default: fprintf(stderr, "Unhandled config line: %s\n", _line); return -1; @@ -339,16 +378,40 @@ config_handle_line(char *line) } void -config_reset() +config_dumpglobals(char *out, size_t outsize) { - //Reinitialise string config array - memset(g_string_conf, 0, sizeof(g_string_conf)); - g_current_string = 0; - g_max_y = 1024; + int tos1 = g_midi_three_octave_split_inverse ? g_midi_three_octave_split_2 : g_midi_three_octave_split_1; + int tos2 = g_midi_three_octave_split_inverse ? g_midi_three_octave_split_1 : g_midi_three_octave_split_2; + + size_t off = snprintf(out, outsize, + "Strings %d\n\nmidi_two_octave_split %d\nmidi_three_octave_split_1 %d\nmidi_three_octave_split_2 %d\nmidi_main_control %d\nmidi_main_channel %d\n", + g_string_count, g_midi_two_octave_split, tos1, tos2, g_midi_main_control, g_midi_main_channel ); + + if (g_settled_dist != 5) + off += snprintf(out + off, outsize - off, + "SettledDist %d\n\n", g_settled_dist); + snprintf(out + off, outsize - off, "\n" ); } void -config_write() +config_dumpstring(int string, char *out, size_t outsize) { + StringConfig *s = g_string_conf + string; + + if (string < 0 || string > g_string_count || !out) { + if (out && outsize) *out = 0; + return; + } + size_t off = snprintf(out, outsize, + "String %d\n Line %d %d %d %d\n Mode %s\n Channel %d\n Note %s\n AfterTouch %s\n Controller %d\n", + string + 1, s->line.x0, s->line.y0, s->line.x1, s->line.y1, + mode_names[s->mode], s->channel, midi_note[s->note], modifier_names[s->modifier], s->controller ); + if (s->timetosilence) + off += snprintf(out + off, outsize - off, + " TimeToSilence %d\n", s->timetosilence); + if (s->pitch_factor) + off += snprintf(out + off, outsize - off, + " PitchFactor %d\n", s->pitch_factor); + snprintf(out + off, outsize - off, "\n" ); } diff --git a/config.h b/config.h index 0a48ed7..d7399fa 100644 --- a/config.h +++ b/config.h @@ -70,4 +70,6 @@ extern StringConfig g_string_conf[MAX_LINECOUNT]; extern int g_string_count; void config_reset(); int config_handle_line( char *line); +void config_dumpglobals(char *out, size_t outsize); +void config_dumpstring(int string, char *out, size_t outsize); char *config_midi_note_to_string(int string); -- cgit v1.2.3