MCPcopy Create free account
hub / github.com/LMMS/lmms / processOutEvent

Method processOutEvent

src/tracks/InstrumentTrack.cpp:384–433  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

382
383
384void InstrumentTrack::processOutEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset )
385{
386 // do nothing if we do not have an instrument instance (e.g. when loading settings)
387 if( m_instrument == NULL )
388 {
389 return;
390 }
391
392 const MidiEvent transposedEvent = applyMasterKey( event );
393 const int key = transposedEvent.key();
394
395 switch( event.type() )
396 {
397 case MidiNoteOn:
398 m_midiNotesMutex.lock();
399 m_piano.setKeyState( event.key(), true ); // event.key() = original key
400
401 if( key >= 0 && key < NumKeys )
402 {
403 if( m_runningMidiNotes[key] > 0 )
404 {
405 m_instrument->handleMidiEvent( MidiEvent( MidiNoteOff, midiPort()->realOutputChannel(), key, 0 ), time, offset );
406 }
407 ++m_runningMidiNotes[key];
408 m_instrument->handleMidiEvent( MidiEvent( MidiNoteOn, midiPort()->realOutputChannel(), key, event.velocity() ), time, offset );
409
410 }
411 m_midiNotesMutex.unlock();
412 emit newNote();
413 break;
414
415 case MidiNoteOff:
416 m_midiNotesMutex.lock();
417 m_piano.setKeyState( event.key(), false ); // event.key() = original key
418
419 if( key >= 0 && key < NumKeys && --m_runningMidiNotes[key] <= 0 )
420 {
421 m_instrument->handleMidiEvent( MidiEvent( MidiNoteOff, midiPort()->realOutputChannel(), key, 0 ), time, offset );
422 }
423 m_midiNotesMutex.unlock();
424 break;
425
426 default:
427 m_instrument->handleMidiEvent( transposedEvent, time, offset );
428 break;
429 }
430
431 // if appropriate, midi-port does futher routing
432 m_midiPort.processOutEvent( event, time );
433}
434
435
436

Callers

nothing calls this directly

Calls 10

midiPortFunction · 0.85
keyMethod · 0.80
setKeyStateMethod · 0.80
realOutputChannelMethod · 0.80
velocityMethod · 0.80
MidiEventClass · 0.50
typeMethod · 0.45
lockMethod · 0.45
handleMidiEventMethod · 0.45
unlockMethod · 0.45

Tested by

no test coverage detected