ref: 97b55a85c79a702579882a75a8ea47d5c1d00636
dir: /kick_drum.c/
/* ------------------------------------------------------------ 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 iRec0[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 l0; for (l0 = 0; (l0 < 2); l0 = (l0 + 1)) { dsp->iRec0[l0] = 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->iRec0[0] = (dsp->iRec0[1] + 1); output[i] = sinf((9.58738019e-05f * (float)(dsp->iRec0[0] + -1))); dsp->iRec0[1] = dsp->iRec0[0]; } } }; static float ftbl0KickDrumSIG0[65536]; #ifndef FAUSTCLASS #define FAUSTCLASS KickDrum #endif #ifdef __APPLE__ #define exp10f __exp10f #define exp10 __exp10 #endif typedef struct { int fSamplingFreq; float fConst0; float fConst1; FAUSTFLOAT fVslider0; FAUSTFLOAT fVslider1; FAUSTFLOAT fCheckbox0; FAUSTFLOAT fButton0; float fVec0[2]; FAUSTFLOAT fVslider2; FAUSTFLOAT fVslider3; float fVec1[2]; float fRec2[2]; float fConst2; float fRec1[2]; FAUSTFLOAT fVslider4; float fRec3[2]; FAUSTFLOAT fVslider5; FAUSTFLOAT fVslider6; float fRec5[2]; float fRec4[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"); } int getSampleRateKickDrum(KickDrum* dsp) { USED(dsp); return dsp->fSamplingFreq; } int getNumInputsKickDrum(KickDrum* dsp) { USED(dsp); return 1; } int getNumOutputsKickDrum(KickDrum* dsp) { USED(dsp); return 1; } int getInputRateKickDrum(KickDrum* dsp, int channel) { USED(dsp); int rate; switch (channel) { case 0: { rate = 1; break; } 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->fVslider0 = (FAUSTFLOAT)100.0f; dsp->fVslider1 = (FAUSTFLOAT)200.0f; dsp->fCheckbox0 = (FAUSTFLOAT)0.0f; dsp->fButton0 = (FAUSTFLOAT)0.0f; dsp->fVslider2 = (FAUSTFLOAT)0.001f; dsp->fVslider3 = (FAUSTFLOAT)0.001f; dsp->fVslider4 = (FAUSTFLOAT)0.001f; dsp->fVslider5 = (FAUSTFLOAT)0.001f; dsp->fVslider6 = (FAUSTFLOAT)0.01f; } void instanceClearKickDrum(KickDrum* dsp) { USED(dsp); /* C99 loop */ { int l1; for (l1 = 0; (l1 < 2); l1 = (l1 + 1)) { dsp->fVec0[l1] = 0.0f; } } /* C99 loop */ { int l2; for (l2 = 0; (l2 < 2); l2 = (l2 + 1)) { dsp->fVec1[l2] = 0.0f; } } /* C99 loop */ { int l3; for (l3 = 0; (l3 < 2); l3 = (l3 + 1)) { dsp->fRec2[l3] = 0.0f; } } /* C99 loop */ { int l4; for (l4 = 0; (l4 < 2); l4 = (l4 + 1)) { dsp->fRec1[l4] = 0.0f; } } /* C99 loop */ { int l5; for (l5 = 0; (l5 < 2); l5 = (l5 + 1)) { dsp->fRec3[l5] = 0.0f; } } /* C99 loop */ { int l6; for (l6 = 0; (l6 < 2); l6 = (l6 + 1)) { dsp->fRec5[l6] = 0.0f; } } /* C99 loop */ { int l7; for (l7 = 0; (l7 < 2); l7 = (l7 + 1)) { dsp->fRec4[l7] = 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->openHorizontalBox(ui_interface->uiInterface, "a"); ui_interface->declare(ui_interface->uiInterface, &dsp->fVslider0, "0", ""); ui_interface->declare(ui_interface->uiInterface, &dsp->fVslider0, "unit", "Hz"); ui_interface->addVerticalSlider(ui_interface->uiInterface, "frequency", &dsp->fVslider0, 100.0f, 10.0f, 400.0f, 5.0f); ui_interface->declare(ui_interface->uiInterface, &dsp->fVslider5, "1", ""); ui_interface->declare(ui_interface->uiInterface, &dsp->fVslider5, "unit", "s"); ui_interface->addVerticalSlider(ui_interface->uiInterface, "attack", &dsp->fVslider5, 0.00100000005f, 9.99999975e-06f, 0.200000003f, 0.00100000005f); ui_interface->declare(ui_interface->uiInterface, &dsp->fVslider6, "2", ""); ui_interface->declare(ui_interface->uiInterface, &dsp->fVslider6, "unit", "s"); ui_interface->addVerticalSlider(ui_interface->uiInterface, "delay", &dsp->fVslider6, 0.00999999978f, 9.99999975e-06f, 1.0f, 0.00100000005f); ui_interface->declare(ui_interface->uiInterface, &dsp->fVslider4, "3", ""); ui_interface->declare(ui_interface->uiInterface, &dsp->fVslider4, "unit", "s"); ui_interface->addVerticalSlider(ui_interface->uiInterface, "release", &dsp->fVslider4, 0.00100000005f, 9.99999975e-06f, 1.0f, 0.00100000005f); ui_interface->closeBox(ui_interface->uiInterface); ui_interface->openHorizontalBox(ui_interface->uiInterface, "b"); ui_interface->declare(ui_interface->uiInterface, &dsp->fVslider2, "0", ""); ui_interface->declare(ui_interface->uiInterface, &dsp->fVslider2, "unit", "s"); ui_interface->addVerticalSlider(ui_interface->uiInterface, "attack", &dsp->fVslider2, 0.00100000005f, 9.99999975e-06f, 0.200000003f, 0.00100000005f); ui_interface->declare(ui_interface->uiInterface, &dsp->fVslider1, "1", ""); ui_interface->addVerticalSlider(ui_interface->uiInterface, "frequency", &dsp->fVslider1, 200.0f, -400.0f, 400.0f, 5.0f); ui_interface->declare(ui_interface->uiInterface, &dsp->fVslider3, "2", ""); ui_interface->declare(ui_interface->uiInterface, &dsp->fVslider3, "unit", "s"); ui_interface->addVerticalSlider(ui_interface->uiInterface, "release", &dsp->fVslider3, 0.00100000005f, 9.99999975e-06f, 1.0f, 0.00100000005f); ui_interface->closeBox(ui_interface->uiInterface); ui_interface->openHorizontalBox(ui_interface->uiInterface, "control"); ui_interface->declare(ui_interface->uiInterface, &dsp->fButton0, "0", ""); ui_interface->addButton(ui_interface->uiInterface, "gate", &dsp->fButton0); ui_interface->declare(ui_interface->uiInterface, &dsp->fCheckbox0, "1", ""); ui_interface->addCheckButton(ui_interface->uiInterface, "b enable", &dsp->fCheckbox0); 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* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; float fSlow0 = (float)dsp->fVslider0; float fSlow1 = ((float)dsp->fVslider1 * (float)dsp->fCheckbox0); float fSlow2 = (float)dsp->fButton0; float fSlow3 = (float)dsp->fVslider2; float fSlow4 = (fSlow3 + (float)dsp->fVslider3); float fSlow5 = (dsp->fConst0 * fSlow4); float fSlow6 = (dsp->fConst0 * fSlow3); float fSlow7 = (1.0f / (0.0f - (dsp->fConst0 * (fSlow3 - fSlow4)))); float fSlow8 = (dsp->fConst2 / fSlow3); int iSlow9 = (fSlow2 > 0.0f); int iSlow10 = (iSlow9 > 0); float fSlow11 = (float)dsp->fVslider4; float fSlow12 = (dsp->fConst0 * fSlow11); int iSlow13 = ((fSlow2 == 0.0f) > 0); float fSlow14 = (float)dsp->fVslider5; float fSlow15 = (fSlow14 + (float)dsp->fVslider6); float fSlow16 = (dsp->fConst0 * fSlow15); float fSlow17 = (dsp->fConst0 * fSlow14); float fSlow18 = (9.99999997e-07f * fSlow2); float fSlow19 = ((fSlow18 + -1.0f) / (0.0f - (dsp->fConst0 * (fSlow14 - fSlow15)))); float fSlow20 = (dsp->fConst2 / fSlow14); float fSlow21 = (dsp->fConst2 / fSlow11); /* C99 loop */ { int i; for (i = 0; (i < count); i = (i + 1)) { dsp->fVec0[0] = fSlow2; dsp->fVec1[0] = fSlow4; dsp->fRec2[0] = ((((fSlow2 - dsp->fVec0[1]) > 0.0f) > 0)?0.0f:min(fSlow5, ((dsp->fRec2[1] + (dsp->fConst0 * (fSlow4 - dsp->fVec1[1]))) + 1.0f))); int iTemp0 = (dsp->fRec2[0] < fSlow6); float fTemp1 = ((dsp->fRec1[1] * (float)(1 - ((float)input0[i] > 0.0f))) + (dsp->fConst1 * (fSlow0 + (fSlow1 * (iTemp0?((dsp->fRec2[0] < 0.0f)?0.0f:(iTemp0?(fSlow8 * dsp->fRec2[0]):1.0f)):((dsp->fRec2[0] < fSlow5)?((fSlow7 * (0.0f - (dsp->fRec2[0] - fSlow6))) + 1.0f):0.0f)))))); dsp->fRec1[0] = (fTemp1 - floorf(fTemp1)); dsp->fRec3[0] = (iSlow10?0.0f:min(fSlow12, (dsp->fRec3[1] + 1.0f))); dsp->fRec5[0] = (iSlow13?0.0f:min(fSlow16, (dsp->fRec5[1] + 1.0f))); int iTemp2 = (dsp->fRec5[0] < fSlow17); dsp->fRec4[0] = (iSlow9?((float)iSlow9 * (iTemp2?((dsp->fRec5[0] < 0.0f)?0.0f:(iTemp2?(fSlow20 * dsp->fRec5[0]):1.0f)):((dsp->fRec5[0] < fSlow16)?((fSlow19 * (dsp->fRec5[0] - fSlow17)) + 1.0f):fSlow18))):dsp->fRec4[1]); output0[i] = (FAUSTFLOAT)(ftbl0KickDrumSIG0[(int)(65536.0f * dsp->fRec1[0])] * ((dsp->fRec3[0] < 0.0f)?dsp->fRec4[0]:((dsp->fRec3[0] < fSlow12)?(dsp->fRec4[0] + (fSlow21 * (dsp->fRec3[0] * (0.0f - dsp->fRec4[0])))):0.0f))); dsp->fVec0[1] = dsp->fVec0[0]; dsp->fVec1[1] = dsp->fVec1[0]; dsp->fRec2[1] = dsp->fRec2[0]; dsp->fRec1[1] = dsp->fRec1[0]; dsp->fRec3[1] = dsp->fRec3[0]; dsp->fRec5[1] = dsp->fRec5[0]; dsp->fRec4[1] = dsp->fRec4[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