/** * Add in the extra notes in rhythm practice */ void CConductor::expandPianistInput(CMidiEvent inputNote) { if (m_playMode == PB_PLAY_MODE_rhythmTapping) { CChord chord; int i; CMidiEvent newNote = inputNote; if (inputNote.type() == MIDI_NOTE_ON || inputNote.type() == MIDI_NOTE_OFF) { chord = m_wantedChord; CChord chordForOneHand; int notesFound = 0; if (inputNote.type() == MIDI_NOTE_OFF) { chord = m_piano->removeSavedChord(inputNote.note()); for(i = 0; i < chord.length(); i++) { inputNote.setNote( chord.getNote(i).pitch()); pianistInput(inputNote); } // We have already played and removed this chord if (chord.length() > 0) return; } whichPart_t targetPart = (inputNote.note() >= MIDDLE_C) ? PB_PART_right : PB_PART_left; for(i = 0; i < chord.length(); i++) { if (chord.getNote(i).part() == targetPart && playingMusic()) { newNote.setNote(chord.getNote(i).pitch()); if ( notesFound >= 1 && cfg_rhythmTapping == PB_RHYTHM_TAP_drumsOnly) newNote.setVelocity(-1); else chordForOneHand.addNote(targetPart, chord.getNote(i).pitch()); pianistInput(newNote); notesFound++; } } if (notesFound > 0) m_piano->addSavedChord(inputNote, chordForOneHand); else { inputNote.setChannel(MIDI_DRUM_CHANNEL); pianistInput(inputNote); } } else { pianistInput(inputNote); } } else { pianistInput(inputNote); } }