synththing/src/synths/fm_core.c

41 lines
930 B
C

/*
* Filename: fm_core.c
*
* Description:
*
*
* Version:
* Created: Thu Oct 31 02:06:11 2019
* Revision: None
* Author: Rachel Fae Fox (foxiepaws),fox@foxiepa.ws
*
*/
#include "../common.h"
#include "../utils/envelope.h"
#include "fm_core.h"
#include <math.h>
#include <stdlib.h>
float core_fm_run(Operator* self, EngineState * t,float phase) {
self->e.gate = self->gate;
float out = 0;
out = sin(2 * M_PI * t->t * (self->mul * self->freq) / 44100 + ((self->feedback_level > 0.0) ? self->feedback_buffer : phase));
out *= (self->level * self->e.process(&self->e,t));
self->feedback_buffer = out;
return out;
}
Operator* operator_new() {
Operator *o = malloc(sizeof(Operator));
Envelope e = *envelope_new();
o->level = 1.0;
o->e = e;
o->gate = false;
o->feedback_level = 0.0;
o->run = core_fm_run;
o->feedback_buffer = 0.0;
return o;
}