diff --git a/src/sfizz/LFO.cpp b/src/sfizz/LFO.cpp index 547e296c..053ef1b1 100644 --- a/src/sfizz/LFO.cpp +++ b/src/sfizz/LFO.cpp @@ -102,31 +102,35 @@ template <> inline float LFO::eval(float phase) { float x = phase + phase - 1; - return 4 * x * (1 - std::fabs(x)); + return -4 * x * (1 - std::fabs(x)); } +// Pulse and Square levels +static constexpr float loPulse = 0.0f; // 0 in ARIA, -1 in Cakewalk +static constexpr float hiPulse = 1.0f; + template <> inline float LFO::eval(float phase) { - return (phase < 0.75f) ? +1.0f : -1.0f; + return (phase < 0.75f) ? hiPulse : loPulse; } template <> inline float LFO::eval(float phase) { - return (phase < 0.5f) ? +1.0f : -1.0f; + return (phase < 0.5f) ? hiPulse : loPulse; } template <> inline float LFO::eval(float phase) { - return (phase < 0.25f) ? +1.0f : -1.0f; + return (phase < 0.25f) ? hiPulse : loPulse; } template <> inline float LFO::eval(float phase) { - return (phase < 0.125f) ? +1.0f : -1.0f; + return (phase < 0.125f) ? hiPulse : loPulse; } template <> diff --git a/src/sfizz/effects/CommonLFO.hpp b/src/sfizz/effects/CommonLFO.hpp index ef6eef36..d43c0e88 100644 --- a/src/sfizz/effects/CommonLFO.hpp +++ b/src/sfizz/effects/CommonLFO.hpp @@ -11,6 +11,10 @@ namespace sfz { namespace fx { namespace lfo { + // Pulse and Square levels + static constexpr float loPulse = 0.0f; // 0 in ARIA, -1 in Cakewalk + static constexpr float hiPulse = 1.0f; + template <> inline float evaluateAtPhase(float phase) { @@ -24,31 +28,31 @@ namespace lfo { inline float evaluateAtPhase(float phase) { float x = phase + phase - 1; - return 4 * x * (1 - std::fabs(x)); + return -4 * x * (1 - std::fabs(x)); } template <> inline float evaluateAtPhase(float phase) { - return (phase < 0.75f) ? +1.0f : -1.0f; + return (phase < 0.75f) ? hiPulse : loPulse; } template <> inline float evaluateAtPhase(float phase) { - return (phase < 0.5f) ? +1.0f : -1.0f; + return (phase < 0.5f) ? hiPulse : loPulse; } template <> inline float evaluateAtPhase(float phase) { - return (phase < 0.25f) ? +1.0f : -1.0f; + return (phase < 0.25f) ? hiPulse : loPulse; } template <> inline float evaluateAtPhase(float phase) { - return (phase < 0.125f) ? +1.0f : -1.0f; + return (phase < 0.125f) ? hiPulse : loPulse; } template <>