static void
scherzo_release_pedal (scherzo_t *scherzo);
-static void
-_judge_pitch (scherzo_t *scherzo, pitch_t pitch);
-
-static void
-_score_challenge (scherzo_t *scherzo);
-
static void
pitch_group_remove_pitches (pitch_group_t *group);
pitch = scherzo_key_spell_pitch (&scherzo->key, pitch);
scherzo_press_note (scherzo, pitch);
- _judge_pitch (scherzo, pitch);
- gtk_widget_queue_draw (scherzo->window);
return TRUE;
}
pitch = scherzo_key_spell_pitch (&scherzo->key, pitch);
scherzo_release_note (scherzo, pitch);
- _score_challenge (scherzo);
- gtk_widget_queue_draw (scherzo->window);
return TRUE;
}
static void
scherzo_update_notes_and_chord (scherzo_t *scherzo)
-{
- if (scherzo->notes_pressed.num_pitches == 0 &&
- scherzo->notes_pedaled.num_pitches == 0)
- {
- score_remove_notes (scherzo->score);
-
- score_remove_chords (scherzo->score);
-
- gtk_widget_queue_draw (scherzo->window);
- }
-}
-
-static void
-scherzo_press_note (scherzo_t *scherzo, pitch_t pitch)
{
void *local = talloc_new (NULL);
pitch_group_t *chord;
pitch_t *root;
int i;
- /* Do nothing if this note is already pressed. */
- for (i = 0; i < scherzo->notes_pressed.num_pitches; i++)
- if (scherzo->notes_pressed.pitches[i] == pitch)
- return;
-
- pitch_group_add_pitch (&scherzo->notes_pressed, pitch);
-
- if (scherzo->pedal_pressed)
- pitch_group_add_pitch (&scherzo->notes_pedaled, pitch);
-
/* Remove all notes/chords from score, then add current notes. */
score_remove_notes (scherzo->score);
score_remove_chords (scherzo->score);
SCORE_DURATION_WHOLE);
}
+ gtk_widget_queue_draw (scherzo->window);
+
talloc_free (local);
}
+static void
+scherzo_press_note (scherzo_t *scherzo, pitch_t pitch)
+{
+ int i;
+
+ /* Do nothing if this note is already pressed. */
+ for (i = 0; i < scherzo->notes_pressed.num_pitches; i++)
+ if (scherzo->notes_pressed.pitches[i] == pitch)
+ return;
+
+ pitch_group_add_pitch (&scherzo->notes_pressed, pitch);
+
+ if (scherzo->pedal_pressed)
+ pitch_group_add_pitch (&scherzo->notes_pedaled, pitch);
+
+ scherzo_update_notes_and_chord (scherzo);
+}
+
static void
scherzo_release_note (scherzo_t *scherzo, pitch_t pitch)
{
pitch_group_remove_pitch_enharmonic (&scherzo->notes_pressed, pitch);
- if (scherzo->notes_pressed.num_pitches == 0)
- scherzo_update_notes_and_chord (scherzo);
+ scherzo_update_notes_and_chord (scherzo);
}
-static pitch_t
+static void
scherzo_press_note_midi (scherzo_t *scherzo, unsigned char midi_note)
{
- pitch_t pitch = pitch_from_midi (midi_note);
-
- scherzo_press_note (scherzo, pitch);
-
- return pitch;
+ scherzo_press_note (scherzo, pitch_from_midi (midi_note));
}
static void
scherzo_update_notes_and_chord (scherzo);
}
+#if 0
static void
_select_challenge (scherzo_t *scherzo)
{
_select_challenge (scherzo);
}
+#endif
static int
on_midi_input (unused (GIOChannel *channel),
scherzo_t *scherzo = user_data;
ssize_t remaining;
snd_seq_event_t event;
- pitch_t pitch;
- int need_redraw = FALSE;
remaining = read (scherzo->midi_fd, buf, MIDI_BUF_SIZE);
/* Incomplete event. Nothing to do. */
break;
case SND_SEQ_EVENT_NOTEON:
- pitch = scherzo_press_note_midi (scherzo, event.data.note.note);
- _judge_pitch (scherzo, pitch);
- need_redraw = TRUE;
+ scherzo_press_note_midi (scherzo, event.data.note.note);
break;
case SND_SEQ_EVENT_NOTEOFF:
scherzo_release_note_midi (scherzo, event.data.note.note);
- _score_challenge (scherzo);
- need_redraw = TRUE;
break;
case SND_SEQ_EVENT_CLOCK:
/* Ignore for now as my piano sends a constant stream of these. */
}
}
- if (need_redraw)
- gtk_widget_queue_draw (scherzo->window);
-
/* Return TRUE to continue to get called in the future. */
return TRUE;
}