/* * 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 #include 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; }