From 9ec76136781097d0c2346515b594d2eceb2460b9 Mon Sep 17 00:00:00 2001 From: "Raine M. Ekman" Date: Mon, 7 Jan 2013 21:14:04 +0100 Subject: [PATCH] InstrumentTrack: Add support for more MIDI commands MIDI commands All Notes Off, All Sound Off and Omni/Mono/Poly mode will now silence all playing notes, as they should. Signed-off-by: Tobias Doerffel --- include/midi.h | 10 ++++++++++ src/tracks/InstrumentTrack.cpp | 11 +++++++++++ 2 files changed, 21 insertions(+) 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 );