Beispiel #1
0
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();
}
Beispiel #2
0
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();
}
Beispiel #3
0
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();
    }
}
Beispiel #4
0
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 */
	
}