// reads the real midi event CMidiEvent CMidiDeviceRt::readMidiInput() { CMidiEvent midiEvent; unsigned int channel; if (Cfg::midiInputDump) { QString str; for (unsigned int i = 0; i < m_inputMessage.size(); i++) str += " 0x" + QString::number(m_inputMessage[i], 16) + ','; ppLogInfo("midi input %s", qPrintable(str)); } channel = m_inputMessage[0] & 0x0f; switch (m_inputMessage[0] & 0xf0 ) { case MIDI_NOTE_ON: if (m_inputMessage[2] != 0 ) midiEvent.noteOnEvent(0, channel, m_inputMessage[1], m_inputMessage[2]); else midiEvent.noteOffEvent(0,channel, m_inputMessage[1], m_inputMessage[2]); break; case MIDI_NOTE_OFF: midiEvent.noteOffEvent(0, channel, m_inputMessage[1], m_inputMessage[2]); break; case MIDI_NOTE_PRESSURE: //MIDI_CMD_NOTE_PRESSURE: //POLY_AFTERTOUCH: // fixme fill in the blanks //midi_input_bytes[midi_input_length++] = channel | MIDI_CMD_NOTE_PRESSURE; //midi_input_bytes[midi_input_length++] = ev->data.note.note; //midi_input_bytes[midi_input_length++] = ev->data.note.velocity; break; case MIDI_CONTROL_CHANGE: //CONTROL_CHANGE: midiEvent.controlChangeEvent(0, channel, m_inputMessage[1], m_inputMessage[2]); break; case MIDI_PROGRAM_CHANGE: //PROGRAM_CHANGE: //midiEvent.programChangeEvent(0, ev->data.control.channel, ev->data.control.value); break; case MIDI_CHANNEL_PRESSURE: //AFTERTOUCH: // fixme fill in the blanks //midi_input_bytes[midi_input_length++] = ev->data.control.channel | MIDI_CMD_CHANNEL_PRESSURE; //midi_input_bytes[midi_input_length++] = ev->data.control.value; break; case MIDI_PITCH_BEND: //PITCH_BEND: // fixme fill in the blanks //midi_input_bytes[midi_input_length++] = ev->data.control.channel | MIDI_CMD_CHANNEL_PRESSURE; //midi_input_bytes[midi_input_length++] = ev->data.control.value; break; } m_inputMessage.clear(); return midiEvent; }
// Fakes a midi piano keyboard using the PC keyboard bool CSong::pcKeyPress(int key, bool down) { int i; size_t j; CMidiEvent midi; const int cfg_pcKeyVolume = 64; const int cfg_pcKeyChannel = 1-1; if (key == 't') // the tab key on the PC fakes good notes { if (down) m_fakeChord = getWantedChord(); for (i = 0; i < m_fakeChord.length(); i++) { if (down) midi.noteOnEvent(0, cfg_pcKeyChannel, m_fakeChord.getNote(i).pitch() + getTranspose(), cfg_pcKeyVolume); else midi.noteOffEvent(0, cfg_pcKeyChannel, m_fakeChord.getNote(i).pitch() + getTranspose(), cfg_pcKeyVolume); expandPianistInput(midi); } return true; } for (j = 0; j < arraySize(pcNoteLookup); j++) { if ( key==pcNoteLookup[j].key) { if (down) midi.noteOnEvent(0, cfg_pcKeyChannel, pcNoteLookup[j].note, cfg_pcKeyVolume); else midi.noteOffEvent(0, cfg_pcKeyChannel, pcNoteLookup[j].note, cfg_pcKeyVolume); expandPianistInput(midi); return true; } } //printf("pcKeyPress %d %d\n", m_pcNote, key); return false; }
void CConductor::turnOnKeyboardLights(bool on) { int note; int i; CMidiEvent event; // exit if not enable if (Cfg::keyboardLightsChan == -1) return; for(i = 0; i < m_wantedChord.length(); i++) { note = m_wantedChord.getNote(i).pitch(); if (on == true) event.noteOnEvent(0, Cfg::keyboardLightsChan, note, 1); else event.noteOffEvent(0, Cfg::keyboardLightsChan, note, 1); playMidiEvent( event ); // don't use the track settings } }