Do not "auto-off" simultaneous events
This commit is contained in:
parent
fb2287b729
commit
342f1b13d8
2 changed files with 6 additions and 0 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -267,6 +267,7 @@ private:
|
|||
TriggerType triggerType;
|
||||
int triggerNumber;
|
||||
uint8_t triggerValue;
|
||||
absl::optional<int> triggerDelay;
|
||||
|
||||
float speedRatio { 1.0 };
|
||||
float pitchRatio { 1.0 };
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue