diff --git a/Source/BlepOsc.h b/Source/BlepOsc.h index 4f3d894..807f063 100644 --- a/Source/BlepOsc.h +++ b/Source/BlepOsc.h @@ -6,10 +6,24 @@ enum class BlepWave : int { Sine = 0, Saw, Square, Triangle }; class BlepOsc { public: - void prepare (double sampleRate) { sr = sampleRate; resetPhase(); } + void prepare (double sampleRate) + { + sr = juce::jmax (1.0, sampleRate); + setFrequency ((float) freq); + resetPhase(); + } void setWave (BlepWave w) { wave = w; } - void setFrequency (float f) { freq = juce::jmax (0.0f, f); inc = freq / (float) sr; } - void resetPhase (float p = 0.0f) { phase = juce::jlimit (0.0f, 1.0f, p); } + void setFrequency (float f) + { + const float nyquist = 0.5f * (float) sr; + freq = juce::jlimit (0.0f, juce::jmax (0.0f, nyquist), f); + inc = freq / (float) sr; + } + void resetPhase (float p = 0.0f) + { + phase = juce::jlimit (0.0f, 1.0f, p); + z1 = 0.0f; + } inline float process() {