void Piano::mousePressEvent(QMouseEvent *evt) { int note = -1; findNote(evt, note); m_held = true; m_recentNote = note; m_highlightNotes[note] = true; emit gotNote(note); emit pressed(); repaint(); }
void Piano::mouseReleaseEvent(QMouseEvent *evt) { int note = -1; findNote(evt, note); m_held = false; m_recentNote = note; m_highlightNotes[m_recentNote] = false; emit gotNote(m_recentNote); emit released(); repaint(); }
void Piano::mouseMoveEvent(QMouseEvent *evt) { if(!m_held) return; int note = -1; findNote(evt, note); if(note != m_recentNote) { m_highlightNotes[m_recentNote] = false; emit gotNote(m_recentNote); emit released(); m_recentNote = note; m_highlightNotes[note] = true; emit gotNote(note); emit pressed(); repaint(); } }
void noteEvent(uint16_t noteNumber, uint8_t eventType) { Oscillator * pOsc = NULL; NoteKey * pNote = NULL; /** 1. Check current mode first * */ //pNote = &keyStatus[noteNumber - currentOctave*NOTES_PER_OCTAVE]; switch(currentSelectedMode) { case SYNTH_FREESTYLE: { switch(eventType) { /** Note button is pressed down */ case NOTE_EVENT_ON: { switch(currentLayer) { case LAYER_MELODY_1: case LAYER_MELODY_2: { /** Melody 1 and 2 follow the same logic */ newPlayNote(noteNumber, NOTE_SRC_KB); break; } /** END CASE MELODY_1 MELODY_2 */ case LAYER_CHORD_1: case LAYER_CHORD_2: { /** Chord 1 and 2 follow the same logic */ break; } case LAYER_DRUM_1: case LAYER_DRUM_2: { /** Drum 1 and 2 follow the same logic */ break; } case LAYER_EFFECTS: { break; } case LAYER_MACRO: { break; } } /** END SWITCH currentLayer */ break; } /** END CASE eventType NOTE_EVENT_ON */ /** Note button is released */ case NOTE_EVENT_OFF: { /* Set note to release state of envelope*/ pNote = findNote(NOTE_ID(NOTE_SRC_KB, noteNumber)); if(pNote) pNote->noteState = NOTE_RELEASE; break; } } break; } /** END CASE SYNTH_FREESTYLE */ case SYNTH_RECORDING: { /** We have to add this note to the current loop */ switch(eventType) { //pNote = &keyStatus[noteNumber - currentOctave*NOTES_PER_OCTAVE]; case NOTE_EVENT_ON: { /** 1. Check to see if there is a note currently playing in this spot */ switch(currentLayer) { case LAYER_MELODY_1: case LAYER_MELODY_2: { /** Melody 1 and 2 follow the same logic */ /** The note is currently NOT playing so trigger it for the keyboard */ pNote = newPlayNote(noteNumber, NOTE_SRC_KB); addSequencerNote(noteNumber); currentNoteDown = noteNumber; break; } case LAYER_CHORD_1: case LAYER_CHORD_2: { /** Chord 1 and 2 follow the same logic */ break; } case LAYER_DRUM_1: case LAYER_DRUM_2: { /** Drum 1 and 2 follow the same logic */ break; } case LAYER_EFFECTS: { break; } case LAYER_MACRO: { break; } } /** END SWITCH currentLayer */ break; } /** END CASE NOTE_EVENT_ON */ case NOTE_EVENT_OFF: { switch(currentLayer) { case LAYER_MELODY_1: case LAYER_MELODY_2: { /** Melody 1 and 2 follow the same logic */ /* Set note to release state of envelope*/ pNote = findNote(NOTE_ID(NOTE_SRC_KB, noteNumber)); if(pNote) pNote->noteState = NOTE_RELEASE; currentNoteDown = 0xFF; break; } case LAYER_CHORD_1: case LAYER_CHORD_2: { /** Chord 1 and 2 follow the same logic */ break; } case LAYER_DRUM_1: case LAYER_DRUM_2: { /** Drum 1 and 2 follow the same logic */ break; } case LAYER_EFFECTS: { break; } case LAYER_MACRO: { break; } } /** END SWITCH currentLayer of SYNTH RECORDING note OFF*/ break; } } /** END SWITCH eventType */ } /* END CASE SYNTH_RECORDING */ break; } /* END SWITCH currentMode */ }