From f80decf4c0a37d4441328673bb472e7a1ff2275f Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Mon, 16 Mar 2020 17:36:16 +0100 Subject: [PATCH 1/4] Extend the range of opcodes tune and pitch --- src/sfizz/Defaults.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sfizz/Defaults.h b/src/sfizz/Defaults.h index 3f53ecc3..9e2684b7 100644 --- a/src/sfizz/Defaults.h +++ b/src/sfizz/Defaults.h @@ -177,7 +177,7 @@ namespace Default constexpr int transpose { 0 }; constexpr Range transposeRange { -127, 127 }; constexpr int tune { 0 }; - constexpr Range tuneRange { -100, 100 }; + constexpr Range tuneRange { -9600, 9600 }; // ±100 in SFZv1, more in ARIA constexpr Range bendBoundRange { -9600, 9600 }; constexpr Range bendStepRange { 1, 1200 }; constexpr int bendUp { 200 }; // No range here because the bounds can be inverted From 4065d406f757a553113248925c9715e9f053ecca Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Mon, 16 Mar 2020 17:37:52 +0100 Subject: [PATCH 2/4] Rewrite a division as multiplication --- src/sfizz/MathHelpers.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sfizz/MathHelpers.h b/src/sfizz/MathHelpers.h index d126992b..b43428f8 100644 --- a/src/sfizz/MathHelpers.h +++ b/src/sfizz/MathHelpers.h @@ -110,7 +110,7 @@ namespace Random { */ inline float midiNoteFrequency(const int noteNumber) { - return 440.0f * std::pow(2.0f, (noteNumber - 69) / 12.0f); + return 440.0f * std::pow(2.0f, (noteNumber - 69) * (1.0f / 12.0f)); } /** From 2002a58da28ae7c3d98f30b8cd9c48b0d5e652d2 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Mon, 16 Mar 2020 17:54:47 +0100 Subject: [PATCH 3/4] Apply the pitch ratio to wavetable oscillator --- src/sfizz/Voice.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sfizz/Voice.cpp b/src/sfizz/Voice.cpp index 659f3a80..423dda3a 100644 --- a/src/sfizz/Voice.cpp +++ b/src/sfizz/Voice.cpp @@ -506,7 +506,8 @@ void sfz::Voice::fillWithGenerator(AudioSpan buffer) noexcept auto frequencies = tempSpan1.first(buffer.getNumFrames()); auto bends = tempSpan2.first(buffer.getNumFrames()); - fill(frequencies, baseFrequency); + float keycenterFrequency = midiNoteFrequency(region->pitchKeycenter); + fill(frequencies, pitchRatio * keycenterFrequency); if (region->bendStep > 1) pitchBendEnvelope.getQuantizedBlock(bends, bendStepFactor); From 797e703dfd30bbaec4b0e81c78cbe68817ef58a7 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Mon, 16 Mar 2020 18:29:45 +0100 Subject: [PATCH 4/4] Update the test --- tests/RegionT.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/RegionT.cpp b/tests/RegionT.cpp index c96f34ae..354cd06b 100644 --- a/tests/RegionT.cpp +++ b/tests/RegionT.cpp @@ -792,10 +792,10 @@ TEST_CASE("[Region] Parsing opcodes") REQUIRE(region.tune == 40); region.parseOpcode({ "tune", "-1" }); REQUIRE(region.tune == -1); - region.parseOpcode({ "tune", "154" }); - REQUIRE(region.tune == 100); - region.parseOpcode({ "tune", "-154" }); - REQUIRE(region.tune == -100); + region.parseOpcode({ "tune", "15432" }); + REQUIRE(region.tune == 9600); + region.parseOpcode({ "tune", "-15432" }); + REQUIRE(region.tune == -9600); } SECTION("bend_up, bend_down, bend_step")