synththing/src/synths/fm_2op.c

45 lines
1.0 KiB
C

/*
* 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 <stdlib.h>
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;
}