+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;
+
+ if (staff->num_notes == 0) {
+ staff->upper_ledger_lines = 0;
+ staff->lower_ledger_lines = 0;
+ }
+}
+
+void
+score_set_note_color_rgb (score_note_t *note,
+ double r,
+ double g,
+ double b)
+{
+ note->color.r = r;
+ note->color.g = g;
+ note->color.b = b;
+}
+
+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;
+}
+