ref: 28edbad1381db30b4ecb567d3bb6422b988aaa14
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 iVec0[2];
int fSamplingFreq;
float fConst0;
float fConst1;
FAUSTFLOAT fHslider0;
FAUSTFLOAT fHslider1;
FAUSTFLOAT fCheckbox0;
FAUSTFLOAT fHslider2;
FAUSTFLOAT fHslider3;
float fVec1[2];
float fRec2[2];
float fConst2;
float fRec1[2];
FAUSTFLOAT fHslider4;
FAUSTFLOAT fHslider5;
FAUSTFLOAT fHslider6;
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");
}
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->fHslider0 = (FAUSTFLOAT)100.0f;
dsp->fHslider1 = (FAUSTFLOAT)200.0f;
dsp->fCheckbox0 = (FAUSTFLOAT)0.0f;
dsp->fHslider2 = (FAUSTFLOAT)0.001f;
dsp->fHslider3 = (FAUSTFLOAT)0.001f;
dsp->fHslider4 = (FAUSTFLOAT)0.001f;
dsp->fHslider5 = (FAUSTFLOAT)0.001f;
dsp->fHslider6 = (FAUSTFLOAT)0.01f;
}
void instanceClearKickDrum(KickDrum* dsp) {
USED(dsp);
/* C99 loop */
{
int l1;
for (l1 = 0; (l1 < 2); l1 = (l1 + 1)) {
dsp->iVec0[l1] = 0;
}
}
/* 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->fRec5[l5] = 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->fHslider0, "0", "");
ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider0, "unit", "Hz");
ui_interface->addHorizontalSlider(ui_interface->uiInterface, "Frequency", &dsp->fHslider0, 100.0f, 10.0f, 400.0f, 5.0f);
ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider5, "1", "");
ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider5, "unit", "s");
ui_interface->addHorizontalSlider(ui_interface->uiInterface, "Attack", &dsp->fHslider5, 0.00100000005f, 9.99999975e-06f, 0.200000003f, 0.00100000005f);
ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider6, "2", "");
ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider6, "unit", "s");
ui_interface->addHorizontalSlider(ui_interface->uiInterface, "Delay", &dsp->fHslider6, 0.00999999978f, 9.99999975e-06f, 1.0f, 0.00100000005f);
ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider4, "3", "");
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->closeBox(ui_interface->uiInterface);
ui_interface->openVerticalBox(ui_interface->uiInterface, "B");
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, 200.0f, -400.0f, 400.0f, 5.0f);
ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider2, "1", "");
ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider2, "unit", "s");
ui_interface->addHorizontalSlider(ui_interface->uiInterface, "Attack", &dsp->fHslider2, 0.00100000005f, 9.99999975e-06f, 0.200000003f, 0.00100000005f);
ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider3, "2", "");
ui_interface->declare(ui_interface->uiInterface, &dsp->fHslider3, "unit", "s");
ui_interface->addHorizontalSlider(ui_interface->uiInterface, "Release", &dsp->fHslider3, 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->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->fHslider0;
float fSlow1 = ((float)dsp->fHslider1 * (float)dsp->fCheckbox0);
float fSlow2 = (float)dsp->fHslider2;
float fSlow3 = (fSlow2 + (float)dsp->fHslider3);
float fSlow4 = (dsp->fConst0 * fSlow3);
float fSlow5 = (dsp->fConst0 * fSlow2);
float fSlow6 = (1.0f / (0.0f - (dsp->fConst0 * (fSlow2 - fSlow3))));
float fSlow7 = (dsp->fConst2 / fSlow2);
float fSlow8 = (float)dsp->fHslider4;
float fSlow9 = (dsp->fConst0 * fSlow8);
float fSlow10 = (float)dsp->fHslider5;
float fSlow11 = (fSlow10 + (float)dsp->fHslider6);
float fSlow12 = (dsp->fConst0 * fSlow11);
float fSlow13 = (dsp->fConst0 * fSlow10);
float fSlow14 = (1.0f / (0.0f - (dsp->fConst0 * (fSlow10 - fSlow11))));
float fSlow15 = (dsp->fConst2 / fSlow10);
float fSlow16 = (dsp->fConst2 / fSlow8);
/* C99 loop */
{
int i;
for (i = 0; (i < count); i = (i + 1)) {
dsp->iVec0[0] = 1;
dsp->fVec1[0] = fSlow3;
dsp->fRec2[0] = ((((1 - dsp->iVec0[1]) > 0) > 0)?0.0f:min(fSlow4, ((dsp->fRec2[1] + (dsp->fConst0 * (fSlow3 - dsp->fVec1[1]))) + 1.0f)));
int iTemp0 = (dsp->fRec2[0] < fSlow5);
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?(fSlow7 * dsp->fRec2[0]):1.0f)):((dsp->fRec2[0] < fSlow4)?((fSlow6 * (0.0f - (dsp->fRec2[0] - fSlow5))) + 1.0f):0.0f))))));
dsp->fRec1[0] = (fTemp1 - floorf(fTemp1));
int iRec3 = 0;
dsp->fRec5[0] = min(fSlow12, (dsp->fRec5[1] + 1.0f));
int iTemp2 = (dsp->fRec5[0] < fSlow13);
float fRec4 = (iTemp2?((dsp->fRec5[0] < 0.0f)?0.0f:(iTemp2?(fSlow15 * dsp->fRec5[0]):1.0f)):((dsp->fRec5[0] < fSlow12)?((fSlow14 * (0.0f - (0.999998987f * (dsp->fRec5[0] - fSlow13)))) + 1.0f):9.99999997e-07f));
output0[i] = (FAUSTFLOAT)(ftbl0KickDrumSIG0[(int)(65536.0f * dsp->fRec1[0])] * ((iRec3 < 0)?fRec4:(((float)iRec3 < fSlow9)?(fRec4 + (fSlow16 * ((float)iRec3 * (0.0f - fRec4)))):0.0f)));
dsp->iVec0[1] = dsp->iVec0[0];
dsp->fVec1[1] = dsp->fVec1[0];
dsp->fRec2[1] = dsp->fRec2[0];
dsp->fRec1[1] = dsp->fRec1[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