shithub: neindaw

ref: c95bf4bfce31c128bc251d3c43122b61fc090747
dir: /kick_drum.c/

View raw version
/* ------------------------------------------------------------
name: "Kick Drum"
Code generated with Faust 2.5.23 (https://faust.grame.fr)
Compilation options: c, -scal -ftz 0
------------------------------------------------------------ */

#ifndef  __KickDrum_H__
#define  __KickDrum_H__

/* KickDrum Plan 9 C architecture for Faust. */

#include <u.h>
#include <libc.h>
#include "uiglue.h"

#define max(x,y) (((x) > (y)) ? (x) : (y))
#define min(x,y) (((x) < (y)) ? (x) : (y))

#ifndef FAUSTFLOAT
#define FAUSTFLOAT float
#endif 


#ifdef __cplusplus
extern "C" {
#endif

#include <math.h>
#include <stdlib.h>


typedef struct {
	
	int iRec1[2];
	
} KickDrumSIG0;

static KickDrumSIG0* newKickDrumSIG0(void) { return (KickDrumSIG0*)malloc(sizeof(KickDrumSIG0)); }
static void deleteKickDrumSIG0(KickDrumSIG0* dsp) {
	USED(dsp); free(dsp); }

int getNumInputsKickDrumSIG0(KickDrumSIG0* dsp) {
	USED(dsp);
	return 0;
	
}
int getNumOutputsKickDrumSIG0(KickDrumSIG0* dsp) {
	USED(dsp);
	return 1;
	
}
int getInputRateKickDrumSIG0(KickDrumSIG0* dsp, int channel) {
	USED(dsp);
	int rate;
	switch (channel) {
		default: {
			rate = -1;
			break;
		}
		
	}
	return rate;
	
}
int getOutputRateKickDrumSIG0(KickDrumSIG0* dsp, int channel) {
	USED(dsp);
	int rate;
	switch (channel) {
		case 0: {
			rate = 0;
			break;
		}
		default: {
			rate = -1;
			break;
		}
		
	}
	return rate;
	
}

static void instanceInitKickDrumSIG0(KickDrumSIG0* dsp, int samplingFreq) {
	USED(samplingFreq);
	USED(dsp);
	/* C99 loop */
	{
		int l1;
		for (l1 = 0; (l1 < 2); l1 = (l1 + 1)) {
			dsp->iRec1[l1] = 0;
			
		}
		
	}
	
}

static void fillKickDrumSIG0(KickDrumSIG0* dsp, int count, float* output) {
	USED(dsp);
	/* C99 loop */
	{
		int i;
		for (i = 0; (i < count); i = (i + 1)) {
			dsp->iRec1[0] = (dsp->iRec1[1] + 1);
			output[i] = sinf((9.58738019e-05f * (float)(dsp->iRec1[0] + -1)));
			dsp->iRec1[1] = dsp->iRec1[0];
			
		}
		
	}
	
};

static float ftbl0KickDrumSIG0[65536];

#ifndef FAUSTCLASS 
#define FAUSTCLASS KickDrum
#endif
#ifdef __APPLE__ 
#define exp10f __exp10f
#define exp10 __exp10
#endif

typedef struct {
	
	FAUSTFLOAT fHslider0;
	float fRec0[2];
	FAUSTFLOAT fButton0;
	float fVec0[2];
	int fSamplingFreq;
	float fConst0;
	float fConst1;
	FAUSTFLOAT fHslider1;
	FAUSTFLOAT fHslider2;
	FAUSTFLOAT fCheckbox0;
	FAUSTFLOAT fHslider3;
	FAUSTFLOAT fHslider4;
	float fVec1[2];
	float fRec3[2];
	float fConst2;
	float fRec2[2];
	FAUSTFLOAT fHslider5;
	float fRec4[2];
	FAUSTFLOAT fHslider6;
	FAUSTFLOAT fHslider7;
	float fRec6[2];
	float fRec5[2];
	
} KickDrum;

KickDrum* newKickDrum(void) { 
	KickDrum* dsp = (KickDrum*)malloc(sizeof(KickDrum));
	return dsp;
}

void deleteKickDrum(KickDrum* dsp) {
	USED(dsp); 
	free(dsp);
}

void metadataKickDrum(MetaGlue* m) { 
	m->declare(m->metaInterface, "basics.lib/name", "Faust Basic Element Library");
	m->declare(m->metaInterface, "basics.lib/version", "0.0");
	m->declare(m->metaInterface, "envelopes.lib/author", "GRAME");
	m->declare(m->metaInterface, "envelopes.lib/copyright", "GRAME");
	m->declare(m->metaInterface, "envelopes.lib/license", "LGPL with exception");
	m->declare(m->metaInterface, "envelopes.lib/name", "Faust Envelope Library");
	m->declare(m->metaInterface, "envelopes.lib/version", "0.0");
	m->declare(m->metaInterface, "filename", "kick_drum");
	m->declare(m->metaInterface, "group", "Synthesis");
	m->declare(m->metaInterface, "maths.lib/author", "GRAME");
	m->declare(m->metaInterface, "maths.lib/copyright", "GRAME");
	m->declare(m->metaInterface, "maths.lib/license", "LGPL with exception");
	m->declare(m->metaInterface, "maths.lib/name", "Faust Math Library");
	m->declare(m->metaInterface, "maths.lib/version", "2.1");
	m->declare(m->metaInterface, "name", "Kick Drum");
	m->declare(m->metaInterface, "oscillators.lib/name", "Faust Oscillator Library");
	m->declare(m->metaInterface, "oscillators.lib/version", "0.0");
	m->declare(m->metaInterface, "signals.lib/name", "Faust Signal Routing Library");
	m->declare(m->metaInterface, "signals.lib/version", "0.0");
}

int getSampleRateKickDrum(KickDrum* dsp) {
	USED(dsp); return dsp->fSamplingFreq; }

int getNumInputsKickDrum(KickDrum* dsp) {
	USED(dsp);
	return 0;
	
}
int getNumOutputsKickDrum(KickDrum* dsp) {
	USED(dsp);
	return 1;
	
}
int getInputRateKickDrum(KickDrum* dsp, int channel) {
	USED(dsp);
	int rate;
	switch (channel) {
		default: {
			rate = -1;
			break;
		}
		
	}
	return rate;
	
}
int getOutputRateKickDrum(KickDrum* dsp, int channel) {
	USED(dsp);
	int rate;
	switch (channel) {
		case 0: {
			rate = 1;
			break;
		}
		default: {
			rate = -1;
			break;
		}
		
	}
	return rate;
	
}

void classInitKickDrum(int samplingFreq) {
	USED(samplingFreq);
	KickDrumSIG0* sig0 = newKickDrumSIG0();
	instanceInitKickDrumSIG0(sig0, samplingFreq);
	fillKickDrumSIG0(sig0, 65536, ftbl0KickDrumSIG0);
	deleteKickDrumSIG0(sig0);
	
}

void instanceResetUserInterfaceKickDrum(KickDrum* dsp) {
	USED(dsp);
	dsp->fHslider0 = (FAUSTFLOAT)1.0f;
	dsp->fButton0 = (FAUSTFLOAT)0.0f;
	dsp->fHslider1 = (FAUSTFLOAT)100.0f;
	dsp->fHslider2 = (FAUSTFLOAT)200.0f;
	dsp->fCheckbox0 = (FAUSTFLOAT)0.0f;
	dsp->fHslider3 = (FAUSTFLOAT)0.001f;
	dsp->fHslider4 = (FAUSTFLOAT)0.001f;
	dsp->fHslider5 = (FAUSTFLOAT)0.001f;
	dsp->fHslider6 = (FAUSTFLOAT)0.001f;
	dsp->fHslider7 = (FAUSTFLOAT)0.01f;
	
}

void instanceClearKickDrum(KickDrum* dsp) {
	USED(dsp);
	/* C99 loop */
	{
		int l0;
		for (l0 = 0; (l0 < 2); l0 = (l0 + 1)) {
			dsp->fRec0[l0] = 0.0f;
			
		}
		
	}
	/* C99 loop */
	{
		int l2;
		for (l2 = 0; (l2 < 2); l2 = (l2 + 1)) {
			dsp->fVec0[l2] = 0.0f;
			
		}
		
	}
	/* C99 loop */
	{
		int l3;
		for (l3 = 0; (l3 < 2); l3 = (l3 + 1)) {
			dsp->fVec1[l3] = 0.0f;
			
		}
		
	}
	/* C99 loop */
	{
		int l4;
		for (l4 = 0; (l4 < 2); l4 = (l4 + 1)) {
			dsp->fRec3[l4] = 0.0f;
			
		}
		
	}
	/* C99 loop */
	{
		int l5;
		for (l5 = 0; (l5 < 2); l5 = (l5 + 1)) {
			dsp->fRec2[l5] = 0.0f;
			
		}
		
	}
	/* C99 loop */
	{
		int l6;
		for (l6 = 0; (l6 < 2); l6 = (l6 + 1)) {
			dsp->fRec4[l6] = 0.0f;
			
		}
		
	}
	/* C99 loop */
	{
		int l7;
		for (l7 = 0; (l7 < 2); l7 = (l7 + 1)) {
			dsp->fRec6[l7] = 0.0f;
			
		}
		
	}
	/* C99 loop */
	{
		int l8;
		for (l8 = 0; (l8 < 2); l8 = (l8 + 1)) {
			dsp->fRec5[l8] = 0.0f;
			
		}
		
	}
	
}

void instanceConstantsKickDrum(KickDrum* dsp, int samplingFreq) {
	USED(samplingFreq);
	USED(dsp);
	dsp->fSamplingFreq = samplingFreq;
	dsp->fConst0 = min(192000.0f, max(1.0f, (float)dsp->fSamplingFreq));
	dsp->fConst1 = (1.0f / dsp->fConst0);
	dsp->fConst2 = (1.0f / dsp->fConst0);
	
}

void instanceInitKickDrum(KickDrum* dsp, int samplingFreq) {
	USED(samplingFreq);
	USED(dsp);
	instanceConstantsKickDrum(dsp, samplingFreq);
	instanceResetUserInterfaceKickDrum(dsp);
	instanceClearKickDrum(dsp);
}

void initKickDrum(KickDrum* dsp, int samplingFreq) {
	USED(samplingFreq);
	USED(dsp);
	classInitKickDrum(samplingFreq);
	instanceInitKickDrum(dsp, samplingFreq);
}

void buildUserInterfaceKickDrum(KickDrum* dsp, UIGlue* ui_interface) {
	USED(dsp);
	ui_interface->openVerticalBox(ui_interface->uiInterface, "Kick Drum");
	ui_interface->openVerticalBox(ui_interface->uiInterface, "A");
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider1, "0", "");
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider1, "unit", "Hz");
	ui_interface->addHorizontalSlider(ui_interface->uiInterface, "Frequency", &dsp->fHslider1, 100.0f, 10.0f, 400.0f, 5.0f);
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider6, "1", "");
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider6, "unit", "s");
	ui_interface->addHorizontalSlider(ui_interface->uiInterface, "Attack", &dsp->fHslider6, 0.00100000005f, 9.99999975e-06f, 0.200000003f, 0.00100000005f);
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider7, "2", "");
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider7, "unit", "s");
	ui_interface->addHorizontalSlider(ui_interface->uiInterface, "Delay", &dsp->fHslider7, 0.00999999978f, 9.99999975e-06f, 1.0f, 0.00100000005f);
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider5, "3", "");
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider5, "unit", "s");
	ui_interface->addHorizontalSlider(ui_interface->uiInterface, "Release", &dsp->fHslider5, 0.00100000005f, 9.99999975e-06f, 1.0f, 0.00100000005f);
	ui_interface->closeBox(ui_interface->uiInterface);
	ui_interface->openVerticalBox(ui_interface->uiInterface, "B");
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider2, "0", "");
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider2, "unit", "Hz");
	ui_interface->addHorizontalSlider(ui_interface->uiInterface, "Frequency", &dsp->fHslider2, 200.0f, -400.0f, 400.0f, 5.0f);
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider3, "1", "");
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider3, "unit", "s");
	ui_interface->addHorizontalSlider(ui_interface->uiInterface, "Attack", &dsp->fHslider3, 0.00100000005f, 9.99999975e-06f, 0.200000003f, 0.00100000005f);
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider4, "2", "");
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider4, "unit", "s");
	ui_interface->addHorizontalSlider(ui_interface->uiInterface, "Release", &dsp->fHslider4, 0.00100000005f, 9.99999975e-06f, 1.0f, 0.00100000005f);
	ui_interface->declare(ui_interface->uiInterface, &dsp->fCheckbox0, "3", "");
	ui_interface->addCheckButton(ui_interface->uiInterface, "Enable", &dsp->fCheckbox0);
	ui_interface->closeBox(ui_interface->uiInterface);
	ui_interface->openVerticalBox(ui_interface->uiInterface, "Control");
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider0, "0", "");
	ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider0, "style", "knob");
	ui_interface->addHorizontalSlider(ui_interface->uiInterface, "Gain", &dsp->fHslider0, 1.0f, 0.0f, 1.0f, 0.00999999978f);
	ui_interface->declare(ui_interface->uiInterface, &dsp->fButton0, "1", "");
	ui_interface->addButton(ui_interface->uiInterface, "Gate", &dsp->fButton0);
	ui_interface->closeBox(ui_interface->uiInterface);
	ui_interface->closeBox(ui_interface->uiInterface);
	
}

void computeKickDrum(KickDrum* dsp, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) {
	USED(inputs);
	USED(dsp);
	FAUSTFLOAT* output0 = outputs[0];
	float fSlow0 = (0.00100000005f * (float)dsp->fHslider0);
	float fSlow1 = (float)dsp->fButton0;
	int iSlow2 = ((fSlow1 == 0.0f) > 0);
	int iSlow3 = (1 - iSlow2);
	float fSlow4 = (float)dsp->fHslider1;
	float fSlow5 = ((float)dsp->fHslider2 * (float)dsp->fCheckbox0);
	float fSlow6 = (float)dsp->fHslider3;
	float fSlow7 = (fSlow6 + (float)dsp->fHslider4);
	float fSlow8 = (dsp->fConst0 * fSlow7);
	float fSlow9 = (dsp->fConst0 * fSlow6);
	float fSlow10 = (1.0f / (0.0f - (dsp->fConst0 * (fSlow6 - fSlow7))));
	float fSlow11 = (dsp->fConst2 / fSlow6);
	int iSlow12 = (fSlow1 > 0.0f);
	int iSlow13 = (iSlow12 > 0);
	float fSlow14 = (float)dsp->fHslider5;
	float fSlow15 = (dsp->fConst0 * fSlow14);
	float fSlow16 = (float)dsp->fHslider6;
	float fSlow17 = (fSlow16 + (float)dsp->fHslider7);
	float fSlow18 = (dsp->fConst0 * fSlow17);
	float fSlow19 = (dsp->fConst0 * fSlow16);
	float fSlow20 = (9.99999997e-07f * fSlow1);
	float fSlow21 = ((fSlow20 + -1.0f) / (0.0f - (dsp->fConst0 * (fSlow16 - fSlow17))));
	float fSlow22 = (dsp->fConst2 / fSlow16);
	float fSlow23 = (dsp->fConst2 / fSlow14);
	/* C99 loop */
	{
		int i;
		for (i = 0; (i < count); i = (i + 1)) {
			dsp->fRec0[0] = (fSlow0 + (0.999000013f * dsp->fRec0[1]));
			dsp->fVec0[0] = fSlow1;
			dsp->fVec1[0] = fSlow7;
			dsp->fRec3[0] = ((((fSlow1 - dsp->fVec0[1]) > 0.0f) > 0)?0.0f:min(fSlow8, ((dsp->fRec3[1] + (dsp->fConst0 * (fSlow7 - dsp->fVec1[1]))) + 1.0f)));
			int iTemp0 = (dsp->fRec3[0] < fSlow9);
			float fTemp1 = (((float)iSlow3 * dsp->fRec2[1]) + (dsp->fConst1 * (fSlow4 + (fSlow5 * (iTemp0?((dsp->fRec3[0] < 0.0f)?0.0f:(iTemp0?(fSlow11 * dsp->fRec3[0]):1.0f)):((dsp->fRec3[0] < fSlow8)?((fSlow10 * (0.0f - (dsp->fRec3[0] - fSlow9))) + 1.0f):0.0f))))));
			dsp->fRec2[0] = (fTemp1 - floorf(fTemp1));
			dsp->fRec4[0] = (iSlow13?0.0f:min(fSlow15, (dsp->fRec4[1] + 1.0f)));
			dsp->fRec6[0] = (iSlow2?0.0f:min(fSlow18, (dsp->fRec6[1] + 1.0f)));
			int iTemp2 = (dsp->fRec6[0] < fSlow19);
			dsp->fRec5[0] = (iSlow12?((float)iSlow12 * (iTemp2?((dsp->fRec6[0] < 0.0f)?0.0f:(iTemp2?(fSlow22 * dsp->fRec6[0]):1.0f)):((dsp->fRec6[0] < fSlow18)?((fSlow21 * (dsp->fRec6[0] - fSlow19)) + 1.0f):fSlow20))):dsp->fRec5[1]);
			output0[i] = (FAUSTFLOAT)((dsp->fRec0[0] * ftbl0KickDrumSIG0[(int)(65536.0f * dsp->fRec2[0])]) * ((dsp->fRec4[0] < 0.0f)?dsp->fRec5[0]:((dsp->fRec4[0] < fSlow15)?(dsp->fRec5[0] + (fSlow23 * (dsp->fRec4[0] * (0.0f - dsp->fRec5[0])))):0.0f)));
			dsp->fRec0[1] = dsp->fRec0[0];
			dsp->fVec0[1] = dsp->fVec0[0];
			dsp->fVec1[1] = dsp->fVec1[0];
			dsp->fRec3[1] = dsp->fRec3[0];
			dsp->fRec2[1] = dsp->fRec2[0];
			dsp->fRec4[1] = dsp->fRec4[0];
			dsp->fRec6[1] = dsp->fRec6[0];
			dsp->fRec5[1] = dsp->fRec5[0];
			
		}
		
	}
	
}

#ifdef __cplusplus
}
#endif


#define DSP KickDrum

#include "dspf.h"

static DSPf dspf = {
	.new = newKickDrum,
	.init = instanceInitKickDrum,
	.delete = deleteKickDrum,
	.metadata = metadataKickDrum,
	.num_in = getNumInputsKickDrum,
	.num_out = getNumOutputsKickDrum,
	.clear = instanceClearKickDrum,
	.reset_ui = instanceResetUserInterfaceKickDrum,
	.build_ui = buildUserInterfaceKickDrum,
	.compute = computeKickDrum,
};

void *
class_init(int rate)
{
	classInitKickDrum(rate);
	return &dspf;
}

#endif