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());
|
pitchBendEnvelope.reset(midiState.getPitchBend());
|
||||||
|
|
||||||
sourcePosition = region->getOffset();
|
sourcePosition = region->getOffset();
|
||||||
|
triggerDelay = delay;
|
||||||
initialDelay = delay + static_cast<uint32_t>(region->getDelay() * sampleRate);
|
initialDelay = delay + static_cast<uint32_t>(region->getDelay() * sampleRate);
|
||||||
baseFrequency = midiNoteFrequency(number);
|
baseFrequency = midiNoteFrequency(number);
|
||||||
bendStepFactor = centsFactor(region->bendStep);
|
bendStepFactor = centsFactor(region->bendStep);
|
||||||
|
|
@ -267,6 +268,7 @@ void sfz::Voice::renderBlock(AudioSpan<float> buffer) noexcept
|
||||||
reset();
|
reset();
|
||||||
|
|
||||||
powerHistory.push(buffer.meanSquared());
|
powerHistory.push(buffer.meanSquared());
|
||||||
|
this->triggerDelay = absl::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sfz::Voice::processMono(AudioSpan<float> buffer) noexcept
|
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)
|
if (region == nullptr)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (delay == this->triggerDelay)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (triggerType == TriggerType::NoteOn && region->offBy && *region->offBy == group) {
|
if (triggerType == TriggerType::NoteOn && region->offBy && *region->offBy == group) {
|
||||||
release(delay, region->offMode == SfzOffMode::fast);
|
release(delay, region->offMode == SfzOffMode::fast);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -267,6 +267,7 @@ private:
|
||||||
TriggerType triggerType;
|
TriggerType triggerType;
|
||||||
int triggerNumber;
|
int triggerNumber;
|
||||||
uint8_t triggerValue;
|
uint8_t triggerValue;
|
||||||
|
absl::optional<int> triggerDelay;
|
||||||
|
|
||||||
float speedRatio { 1.0 };
|
float speedRatio { 1.0 };
|
||||||
float pitchRatio { 1.0 };
|
float pitchRatio { 1.0 };
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue