Merge branch 'master' into develop

This commit is contained in:
paulfd 2019-09-29 02:54:42 +02:00
commit ba0a8bb747

View file

@ -96,10 +96,10 @@ void sfz::Voice::startVoice(Region* region, int delay, int channel, int number,
// DBG("Base width: " << baseWidth << " - with modifier: " << width); // DBG("Base width: " << baseWidth << " - with modifier: " << width);
sourcePosition = region->getOffset(); sourcePosition = region->getOffset();
// DBG("Offset: " << sourcePosition); DBG("Offset: " << sourcePosition);
initialDelay = delay + static_cast<uint32_t>(region->getDelay() / sampleRate); initialDelay = delay + static_cast<uint32_t>(region->getDelay() * sampleRate);
baseFrequency = midiNoteFrequency(number) * pitchRatio; baseFrequency = midiNoteFrequency(number) * pitchRatio;
prepareEGEnvelope(delay, value); prepareEGEnvelope(initialDelay, value);
} }
void sfz::Voice::prepareEGEnvelope(int delay, uint8_t velocity) noexcept void sfz::Voice::prepareEGEnvelope(int delay, uint8_t velocity) noexcept
@ -236,15 +236,21 @@ void sfz::Voice::renderBlock(AudioSpan<float> buffer) noexcept
return; return;
} }
auto delay = min(static_cast<size_t>(initialDelay), buffer.getNumFrames());
auto delayed_buffer = buffer.subspan(delay);
initialDelay -= delay;
if (delayed_buffer.getNumFrames() == 0)
return;
if (region->isGenerator()) if (region->isGenerator())
fillWithGenerator(buffer); fillWithGenerator(delayed_buffer);
else else
fillWithData(buffer); fillWithData(delayed_buffer);
if (region->isStereo()) if (region->isStereo())
processStereo(buffer); processStereo(delayed_buffer);
else else
processMono(buffer); processMono(delayed_buffer);
if (!egEnvelope.isSmoothing()) if (!egEnvelope.isSmoothing())
reset(); reset();