diff --git a/src/sfizz/Voice.cpp b/src/sfizz/Voice.cpp index f9516f84..aa50fde3 100644 --- a/src/sfizz/Voice.cpp +++ b/src/sfizz/Voice.cpp @@ -471,8 +471,14 @@ void sfz::Voice::fillWithData(AudioSpan buffer) noexcept multiplicativeEnvelope(events, *bends, bendLambda, bendStepFactor); else multiplicativeEnvelope(events, *bends, bendLambda); - applyGain(*bends, *jumps); + + for (const auto& mod : region->tuneCC) { + const auto events = resources.midiState.getCCEvents(mod.cc); + multiplicativeEnvelope(events, *bends, [&](float x) { return centsFactor(x * mod.value); }); + applyGain(*bends, *jumps); + } + jumps->front() += floatPositionOffset; cumsum(*jumps, *jumps); sfzInterpolationCast(*jumps, *indices, *leftCoeffs, *rightCoeffs); @@ -562,9 +568,14 @@ void sfz::Voice::fillWithGenerator(AudioSpan buffer) noexcept multiplicativeEnvelope(events, *bends, bendLambda, bendStepFactor); else multiplicativeEnvelope(events, *bends, bendLambda); - applyGain(*bends, *frequencies); + for (const auto& mod : region->tuneCC) { + const auto events = resources.midiState.getCCEvents(mod.cc); + multiplicativeEnvelope(events, *bends, [&](float x) { return centsFactor(x * mod.value); }); + applyGain(*bends, *frequencies); + } + waveOscillator.processModulated(frequencies->data(), leftSpan.data(), buffer.getNumFrames()); copy(leftSpan, rightSpan); }