Do not "auto-off" simultaneous events

This commit is contained in:
Paul Ferrand 2019-12-28 00:25:58 +01:00
parent fb2287b729
commit 342f1b13d8
2 changed files with 6 additions and 0 deletions

View file

@ -101,6 +101,7 @@ void sfz::Voice::startVoice(Region* region, int delay, int number, uint8_t value
pitchBendEnvelope.reset(midiState.getPitchBend());
sourcePosition = region->getOffset();
triggerDelay = delay;
initialDelay = delay + static_cast<uint32_t>(region->getDelay() * sampleRate);
baseFrequency = midiNoteFrequency(number);
bendStepFactor = centsFactor(region->bendStep);
@ -267,6 +268,7 @@ void sfz::Voice::renderBlock(AudioSpan<float> buffer) noexcept
reset();
powerHistory.push(buffer.meanSquared());
this->triggerDelay = absl::nullopt;
}
void sfz::Voice::processMono(AudioSpan<float> buffer) noexcept
@ -489,6 +491,9 @@ bool sfz::Voice::checkOffGroup(int delay, uint32_t group) noexcept
if (region == nullptr)
return false;
if (delay == this->triggerDelay)
return false;
if (triggerType == TriggerType::NoteOn && region->offBy && *region->offBy == group) {
release(delay, region->offMode == SfzOffMode::fast);
return true;

View file

@ -267,6 +267,7 @@ private:
TriggerType triggerType;
int triggerNumber;
uint8_t triggerValue;
absl::optional<int> triggerDelay;
float speedRatio { 1.0 };
float pitchRatio { 1.0 };