45 lines
1.0 KiB
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;
|
|
}
|