From c763e819bbafcb11421cc53e517ab7727aa9a2ad Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Fri, 13 Dec 2019 13:59:49 +0100 Subject: [PATCH] Add a bend step factor in the voice --- src/sfizz/Voice.cpp | 13 +++++++++---- src/sfizz/Voice.h | 1 + 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/sfizz/Voice.cpp b/src/sfizz/Voice.cpp index 480f3d5e..9d138520 100644 --- a/src/sfizz/Voice.cpp +++ b/src/sfizz/Voice.cpp @@ -105,6 +105,7 @@ void sfz::Voice::startVoice(Region* region, int delay, int channel, int number, sourcePosition = region->getOffset(); initialDelay = delay + static_cast(region->getDelay() * sampleRate); baseFrequency = midiNoteFrequency(number); + bendStepFactor = centsFactor(region->bendStep); prepareEGEnvelope(initialDelay, value); } @@ -371,8 +372,10 @@ void sfz::Voice::fillWithData(AudioSpan buffer) noexcept auto rightCoeffs = tempSpan2.first(buffer.getNumFrames()); fill(jumps, pitchRatio * speedRatio); - if (region->bendStep > 1) - pitchBendEnvelope.getQuantizedBlock(bends, region->bendStep); + if (region->bendStep > 1){ + pitchBendEnvelope.getQuantizedBlock(bends, bendStepFactor); + DBG("Last bend value " << bends.back()); + } else pitchBendEnvelope.getBlock(bends); @@ -459,8 +462,10 @@ void sfz::Voice::fillWithGenerator(AudioSpan buffer) noexcept const float step = baseFrequency * twoPi / sampleRate; fill(jumps, step); - if (region->bendStep > 1) - pitchBendEnvelope.getQuantizedBlock(bends, region->bendStep); + if (region->bendStep > 1){ + pitchBendEnvelope.getQuantizedBlock(bends, bendStepFactor); + DBG("Last bend value " << bends.back()); + } else pitchBendEnvelope.getBlock(bends); diff --git a/src/sfizz/Voice.h b/src/sfizz/Voice.h index 22617162..7f073d7f 100644 --- a/src/sfizz/Voice.h +++ b/src/sfizz/Voice.h @@ -318,6 +318,7 @@ private: LinearEnvelope positionEnvelope; LinearEnvelope widthEnvelope; MultiplicativeEnvelope pitchBendEnvelope; + float bendStepFactor { centsFactor(1) }; HistoricalBuffer powerHistory { config::powerHistoryLength }; LEAK_DETECTOR(Voice);