Merge pull request #126 from jpcima/wavetable-tune
Proper tuning of wavetable generators
This commit is contained in:
commit
474f221f91
4 changed files with 8 additions and 7 deletions
|
|
@ -177,7 +177,7 @@ namespace Default
|
||||||
constexpr int transpose { 0 };
|
constexpr int transpose { 0 };
|
||||||
constexpr Range<int> transposeRange { -127, 127 };
|
constexpr Range<int> transposeRange { -127, 127 };
|
||||||
constexpr int tune { 0 };
|
constexpr int tune { 0 };
|
||||||
constexpr Range<int> tuneRange { -100, 100 };
|
constexpr Range<int> tuneRange { -9600, 9600 }; // ±100 in SFZv1, more in ARIA
|
||||||
constexpr Range<int> bendBoundRange { -9600, 9600 };
|
constexpr Range<int> bendBoundRange { -9600, 9600 };
|
||||||
constexpr Range<int> bendStepRange { 1, 1200 };
|
constexpr Range<int> bendStepRange { 1, 1200 };
|
||||||
constexpr int bendUp { 200 }; // No range here because the bounds can be inverted
|
constexpr int bendUp { 200 }; // No range here because the bounds can be inverted
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,7 @@ namespace Random {
|
||||||
*/
|
*/
|
||||||
inline float midiNoteFrequency(const int noteNumber)
|
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));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -506,7 +506,8 @@ void sfz::Voice::fillWithGenerator(AudioSpan<float> buffer) noexcept
|
||||||
auto frequencies = tempSpan1.first(buffer.getNumFrames());
|
auto frequencies = tempSpan1.first(buffer.getNumFrames());
|
||||||
auto bends = tempSpan2.first(buffer.getNumFrames());
|
auto bends = tempSpan2.first(buffer.getNumFrames());
|
||||||
|
|
||||||
fill<float>(frequencies, baseFrequency);
|
float keycenterFrequency = midiNoteFrequency(region->pitchKeycenter);
|
||||||
|
fill<float>(frequencies, pitchRatio * keycenterFrequency);
|
||||||
|
|
||||||
if (region->bendStep > 1)
|
if (region->bendStep > 1)
|
||||||
pitchBendEnvelope.getQuantizedBlock(bends, bendStepFactor);
|
pitchBendEnvelope.getQuantizedBlock(bends, bendStepFactor);
|
||||||
|
|
|
||||||
|
|
@ -792,10 +792,10 @@ TEST_CASE("[Region] Parsing opcodes")
|
||||||
REQUIRE(region.tune == 40);
|
REQUIRE(region.tune == 40);
|
||||||
region.parseOpcode({ "tune", "-1" });
|
region.parseOpcode({ "tune", "-1" });
|
||||||
REQUIRE(region.tune == -1);
|
REQUIRE(region.tune == -1);
|
||||||
region.parseOpcode({ "tune", "154" });
|
region.parseOpcode({ "tune", "15432" });
|
||||||
REQUIRE(region.tune == 100);
|
REQUIRE(region.tune == 9600);
|
||||||
region.parseOpcode({ "tune", "-154" });
|
region.parseOpcode({ "tune", "-15432" });
|
||||||
REQUIRE(region.tune == -100);
|
REQUIRE(region.tune == -9600);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("bend_up, bend_down, bend_step")
|
SECTION("bend_up, bend_down, bend_step")
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue