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 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)); } /** 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); 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")