/// <summary> /// Marks the specified note as released /// </summary> /// <param name="note">The note to release</param> public void MarkKeyReleased(NoteEnum note) { if (!(note == NoteEnum.None || note == lastMouseNote)) { MidiPlayer.StopNote(note); if (pressedNotes.ContainsKey(note)) { Staff.StopAdjustingNote(pressedNotes[note]); pressedNotes.Remove(note); } Invalidate(GetNoteArea(note), false); } SilenceStopwatch.Restart(); }
/// <summary> /// Called when a mouse button is released on the piano keyboard /// </summary> protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); if (e.Button == MouseButtons.Left) { leftMouseDown = false; if (lastMouseNote != NoteEnum.None) { MidiPlayer.StopNote(lastMouseNote); Staff.StopAdjustingNote(currentMouseNote); currentMouseNote = null; Invalidate(GetNoteArea(lastMouseNote), false); pressedNotes.Remove(lastMouseNote); lastMouseNote = NoteEnum.None; } } SilenceStopwatch.Restart(); }
/// <summary> /// Called when the mouse is moved on the piano keyboard /// </summary> protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); if (leftMouseDown) { Stopwatch stopwatch = Stopwatch.StartNew(); lastCursorLocation = e.Location; NoteEnum currentNote = GetNoteAtPoint(e.Location); NoteEnum oldNote = lastMouseNote; if (!pressedNotes.ContainsKey(currentNote)) { lastMouseNote = currentNote; if (oldNote != NoteEnum.None) { MidiPlayer.StopNote(oldNote); } if (currentNote != NoteEnum.None) { MidiPlayer.PlayNote(currentNote); } if (oldNote != NoteEnum.None) { Staff.StopAdjustingNote(currentMouseNote); currentMouseNote = null; pressedNotes.Remove(oldNote); Invalidate(GetNoteArea(oldNote)); } if (currentNote != NoteEnum.None) { currentMouseNote = Staff.AddNote(currentNote, NoteLength.HemiDemiSemiQuaver); pressedNotes.Add(currentNote, currentMouseNote); Staff.StartAdjustingNote(currentMouseNote, stopwatch); Invalidate(GetNoteArea(currentNote)); } } } }