score_staff_t *treble;
score_staff_t *bass;
score_chord_t *chord;
+
+ /* This is for a "computer keyboard". Any "piano keyboard" key
+ * knows its own octave. */
+ int keyboard_octave;
+
int midi_fd;
snd_midi_event_t *snd_midi_event;
if (scherzo->challenge.note)
octave = scherzo->challenge.note->octave;
else
- octave = 4;
+ octave = scherzo->keyboard_octave;
switch (key->keyval) {
case GDK_KEY_plus:
case GDK_KEY_B:
pitch = SCORE_PITCH_B;
break;
+ case GDK_KEY_0:
+ case GDK_KEY_1:
+ case GDK_KEY_2:
+ case GDK_KEY_3:
+ case GDK_KEY_4:
+ case GDK_KEY_5:
+ case GDK_KEY_6:
+ case GDK_KEY_7:
+ case GDK_KEY_8:
+ scherzo->keyboard_octave = key->keyval - GDK_KEY_0;
+ break;
}
if ((key->keyval >= GDK_KEY_A && key->keyval <= GDK_KEY_G) ||
if (scherzo->challenge.note)
octave = scherzo->challenge.note->octave;
else
- octave = 4;
+ octave = scherzo->keyboard_octave;
switch (key->keyval) {
case GDK_KEY_c:
score_note_t *note;
int i;
- if (scherzo->challenge.note)
+ if (scherzo->challenge.note) {
staff = scherzo->challenge.staff;
- else
+ } else if (octave >= 4) {
staff = scherzo->treble;
+ } else {
+ staff = scherzo->bass;
+ }
/* Do nothing if this note is already pressed. */
for (i = 0; i < scherzo->num_notes_pressed; i++) {
scherzo.chord = NULL;
+ /* Default to octave 4 for computer keyboard keypresses. */
+ scherzo.keyboard_octave = 4;
+
scherzo.num_notes_pressed = 0;
scherzo.notes_pressed = NULL;