--- linuxsampler/trunk/src/engines/sfz/EG.cpp 2010/07/22 08:12:12 2113 +++ linuxsampler/trunk/src/engines/sfz/EG.cpp 2010/08/10 12:05:19 2114 @@ -34,10 +34,17 @@ // TODO: add support for loops // TODO: optimization: use segment_lin for linear stages + // TODO: support cancel_release events? void EG::update(event_t Event, uint SampleRate) { if (atEnd(Event)) return; + // ignore duplicated release events + if (Event == event_release) { + if (GotRelease) return; + GotRelease = true; + } + if (Event == event_stage_end || Event == event_release) { if (Stage == eg->node.size() - 1) { enterFadeOutStage(); @@ -83,6 +90,7 @@ Stage = 0; this->eg = ⪚ TimeCoeff = exp(0.0054578518 * Velocity); // pow(2, Velcocity / 127) + GotRelease = false; enterFirstStage(); update(event_stage_end, SampleRate);