From c13e988094bca2c19b0676f8cfd60f3cff2f4a57 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 9 Sep 2007 18:08:21 +0000 Subject: Possible fix for crash on weird MIDI note input. git-svn-id: http://svn.drobilla.net/lad/ingen@701 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/engine/MidiNoteNode.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/libs/engine/MidiNoteNode.cpp b/src/libs/engine/MidiNoteNode.cpp index d8db7100..e4ad4f87 100644 --- a/src/libs/engine/MidiNoteNode.cpp +++ b/src/libs/engine/MidiNoteNode.cpp @@ -221,14 +221,19 @@ MidiNoteNode::note_off(uchar note_num, FrameTime time, SampleCount nframes, Fram if (key->state == Key::ON_ASSIGNED) { // Assigned key, turn off voice and key - assert(_voices[key->voice].state == Voice::ACTIVE); - assert(_voices[key->voice].note == note_num); - key->state = Key::OFF; - - if ( ! _sustain) - free_voice(key->voice, time, nframes, start, end); - else - _voices[key->voice].state = Voice::HOLDING; + if (_voices[key->voice].state == Voice::ACTIVE) { + assert(_voices[key->voice].note == note_num); + + if ( ! _sustain) + free_voice(key->voice, time, nframes, start, end); + else + _voices[key->voice].state = Voice::HOLDING; + + } else { +#ifndef NDEBUG + cerr << "WARNING: Assigned key, but voice not active" << endl; +#endif + } } key->state = Key::OFF; -- cgit v1.2.1