+void
+score_remove_note (score_note_t *note)
+{
+ score_staff_t *staff = note->staff;
+ int i;
+
+ for (i = 0; i < staff->num_notes; i++)
+ if (staff->notes[i] == note)
+ break;
+
+ if (i == staff->num_notes)
+ return;
+
+ if (i < staff->num_notes - 1)
+ {
+ memmove (staff->notes + i,
+ staff->notes + i + 1,
+ (staff->num_notes - 1 - i) * sizeof (score_note_t *));
+ }
+
+ staff->num_notes -= 1;
+}
+
+score_note_t *
+score_staff_find_note (score_staff_t *staff,
+ score_pitch_t pitch,
+ int octave,
+ score_duration_t duration)
+{
+ int i;
+ score_note_t *note;
+
+ for (i = 0; i < staff->num_notes; i++) {
+ note = staff->notes[i];
+ if (note->pitch == pitch &&
+ note->octave == octave &&
+ note->duration == duration)
+ {
+ return note;
+ }
+ }
+
+ return NULL;
+}
+