X-Git-Url: https://git.cworth.org/git?p=mnemon;a=blobdiff_plain;f=mnemon.c;h=c334f22d7ef0915289fd9ed20f229fe9b700bd42;hp=054e21cb59494210f1eccfb6b236482beb6ca92f;hb=6aebbea659aa5e537d79796553f4fd4150d6384f;hpb=76e8fc87b1de4f8967ad86287aa026956074c284 diff --git a/mnemon.c b/mnemon.c index 054e21c..c334f22 100644 --- a/mnemon.c +++ b/mnemon.c @@ -64,7 +64,8 @@ typedef enum { typedef enum { CHALLENGE_TYPE_TEXT, CHALLENGE_TYPE_IMAGE, - CHALLENGE_TYPE_AUDIO + CHALLENGE_TYPE_AUDIO, + CHALLENGE_TYPE_MIDI } challenge_type_t; typedef struct _category { @@ -80,6 +81,8 @@ typedef struct _category { int bin_zero_head; /* Support challenges of non-text types (image, audio, etc.) */ challenge_type_t challenge_type; + /* Whether to repeat afterwards (for a little extra reinforcement) */ + bool_t repeat; } category_t; typedef struct _mnemon { @@ -208,6 +211,7 @@ category_init (category_t *category, category->time_limit = 0.0; category->bin_zero_head = 0; category->challenge_type = CHALLENGE_TYPE_TEXT; + category->repeat = 0; } static void @@ -288,9 +292,14 @@ category_print (category_t *category, case CHALLENGE_TYPE_AUDIO: fprintf (file, "audio"); break; + case CHALLENGE_TYPE_MIDI: + fprintf (file, "midi"); + break; } fprintf (file, "\n\n"); + fprintf (file, "repeat = %d\n\n", category->repeat); + for (i = 0; i < category->num_items; i++) { item = &category->items[i]; if (i != 0) @@ -654,11 +663,18 @@ mnemon_load_category (mnemon_t *mnemon, category->challenge_type = CHALLENGE_TYPE_IMAGE; } else if (strcmp (value, "audio") == 0) { category->challenge_type = CHALLENGE_TYPE_AUDIO; + } else if (strcmp (value, "midi") == 0) { + category->challenge_type = CHALLENGE_TYPE_MIDI; } else { fprintf (stderr, "Unknown value for \"challenge\" option \"%s\" at %s:%d\n", value, path, line_count); exit (1); } + } else if (strcmp (name, "repeat") == 0) { + if (strcmp (value, "0") == 0) + category->repeat = 0; + else + category->repeat = 1; } else { fprintf (stderr, "Unknown option %s at %s:%d\n", name, path, line_count); @@ -1041,6 +1057,7 @@ mnemon_handle_command (mnemon_t *mnemon, const char *arg; int len; switch (command[0]) { + /* 'h' for histogram */ case 'h': { char *category = NULL; @@ -1059,6 +1076,12 @@ mnemon_handle_command (mnemon_t *mnemon, mnemon_print_histogram (mnemon, category, length); } break; + /* 'r' for repeat */ + case 'r': + { + /* Nothing necessary for repeating. */ + } + break; default: printf ("Unknown command: %s\n", command); break; @@ -1182,6 +1205,9 @@ mnemon_show_challenge (mnemon_t *mnemon, case CHALLENGE_TYPE_AUDIO: program = "play"; break; + case CHALLENGE_TYPE_MIDI: + program = "timidity -Os"; + break; } xasprintf (&command, "%s %s/%s >/dev/null 2>&1 &", @@ -1291,10 +1317,12 @@ mnemon_do_challenges (mnemon_t *mnemon) free (response); /* Replay audio challenges for reinforcement. */ - if (category->challenge_type == CHALLENGE_TYPE_AUDIO) { + if (category->repeat) + { mnemon_show_challenge (mnemon, category->challenge_type, item->challenge); - sleep (1); + printf ("%s\n", item->challenge); + sleep (2); } } while (mnemon->to_introduce || mnemon->unlearned ||