From d8eaf4a9876bd9db70707b5a144f9c7cb9eeb443 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Tue, 29 Sep 2020 01:26:04 +0200 Subject: [PATCH] Fix pitch_veltrack --- src/sfizz/Region.cpp | 2 +- tests/RegionT.cpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index c599bc66..1cc907d2 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -1707,7 +1707,7 @@ float sfz::Region::getBasePitchVariation(float noteNumber, float velocity) const auto pitchVariationInCents = pitchKeytrack * (noteNumber - pitchKeycenter); // note difference with pitch center pitchVariationInCents += tune; // sample tuning pitchVariationInCents += config::centPerSemitone * transpose; // sample transpose - pitchVariationInCents += static_cast(velocity) * pitchVeltrack; // track velocity + pitchVariationInCents += velocity * pitchVeltrack; // track velocity pitchVariationInCents += pitchDistribution(Random::randomGenerator); // random pitch changes return centsFactor(pitchVariationInCents); } diff --git a/tests/RegionT.cpp b/tests/RegionT.cpp index cc2714a0..77aff25a 100644 --- a/tests/RegionT.cpp +++ b/tests/RegionT.cpp @@ -1845,3 +1845,17 @@ TEST_CASE("[Region] Offsets with CCs") midiState.ccEvent(0, 4, 0); REQUIRE( region.getOffset() == 10 ); } + +TEST_CASE("[Region] Pitch variation with veltrack") +{ + MidiState midiState; + Region region { 0, midiState }; + + REQUIRE(region.getBasePitchVariation(60.0, 0_norm) == 1.0); + REQUIRE(region.getBasePitchVariation(60.0, 64_norm) == 1.0); + REQUIRE(region.getBasePitchVariation(60.0, 127_norm) == 1.0); + region.parseOpcode({ "pitch_veltrack", "1200" }); + REQUIRE(region.getBasePitchVariation(60.0, 0_norm) == 1.0); + REQUIRE(region.getBasePitchVariation(60.0, 64_norm) == Approx(centsFactor(600.0)).margin(0.01f)); + REQUIRE(region.getBasePitchVariation(60.0, 127_norm) == Approx(centsFactor(1200.0)).margin(0.01f)); +}