diff --git a/include/midi.h b/include/midi.h index 61a9e8ebf..71a1d0f57 100644 --- a/include/midi.h +++ b/include/midi.h @@ -98,6 +98,16 @@ enum MidiStandardControllers MidiControllerSostenuto = 66, MidiControllerSoftPedal = 67, MidiControllerLegatoFootswitch = 68, + // Channel Mode Messages are controllers too... + MidiControllerAllSoundOff = 120, + MidiControllerResetAllControllers = 121, + MidiControllerLocalControl = 122, + MidiControllerAllNotesOff = 123, + MidiControllerOmniOn = 124, + MidiControllerOmniOff = 125, + MidiControllerMonoOn = 126, + MidiControllerPolyOn = 127, + }; const int MidiChannelCount = 16; diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp index 267af765b..016c54d3d 100644 --- a/src/tracks/InstrumentTrack.cpp +++ b/src/tracks/InstrumentTrack.cpp @@ -315,6 +315,17 @@ void InstrumentTrack::processInEvent( const midiEvent & _me, m_sustainPedalPressed = false; } } + if( _me.controllerNumber() == MidiControllerAllSoundOff || + _me.controllerNumber() == MidiControllerAllNotesOff || + _me.controllerNumber() == MidiControllerOmniOn || + _me.controllerNumber() == MidiControllerOmniOff || + _me.controllerNumber() == MidiControllerMonoOn || + _me.controllerNumber() == MidiControllerPolyOn ) + { + silenceAllNotes(); + } + m_instrument->handleMidiEvent( _me, _time ); + break; case MidiProgramChange: m_instrument->handleMidiEvent( _me, _time );