diff --git a/lib/fm_modulator.c b/lib/fm_modulator.c index 275d0ac..5fbb3a7 100644 --- a/lib/fm_modulator.c +++ b/lib/fm_modulator.c @@ -9,8 +9,7 @@ void init_fm_modulator(FMModulator *fm, float frequency, float deviation, float float modulate_fm(FMModulator *fm, float sample) { float inst_freq = fm->frequency+(sample*fm->deviation); - if (inst_freq < 0.0f) inst_freq = 0.0f; - float out = sinf(fm->osc_phase); - fm->osc_phase = fmodf(fm->osc_phase + ((M_2PI * inst_freq) / fm->sample_rate), M_2PI); - return out; + fm->osc_phase += (M_2PI * inst_freq) / fm->sample_rate; + fm->osc_phase -= (fm->osc_phase >= M_2PI) ? M_2PI : 0.0f; + return sinf(fm->osc_phase); } \ No newline at end of file