/* * Filename: fm_2op.c * * Description: * * * Version: * Created: Thu Oct 31 02:02:19 2019 * Revision: None * Author: Rachel Fae Fox (foxiepaws),fox@foxiepa.ws * */ #include "../common.h" #include "fm_2op.h" #include float fm2_process(struct FM2 *self, EngineState *t) { self->Carrier.freq=self->Modulator.freq=self->freq; self->Carrier.gate=self->Modulator.gate=self->gate; switch (self->Algorithm) { case _fm2_0: __asm ("nop"); float v1 = (self->Carrier).run(&self->Carrier, t, 0.0); float v2 = (self->Modulator).run(&self->Modulator, t, 0.0); double z = (double) v1 + (double) v2 - ((double)v1*(double)v2); return z; break; case _fm2_1: return (self->Carrier).run(&self->Carrier, t, (self->Modulator).run(&self->Modulator,t,0.0)); break; } } FM2* fm2_new() { FM2 *fm = malloc(sizeof(FM2)); fm->Carrier = *operator_new(); fm->Modulator = *operator_new(); fm->process = fm2_process; fm->Algorithm = _fm2_1; // do what i mean value. fm->gate = false; return fm; }