ref: 72598d67523d58bc2894edbb8d2e3bccb27653b5
parent: d545d89125a2025365abe3b2945add82c620bfef
author: Sigrid Haflínudóttir <ftrvxmtrx@gmail.com>
date: Mon Jan 13 18:41:08 EST 2020
kick drum: add gain and gate
--- a/kick_drum.c
+++ b/kick_drum.c
@@ -123,23 +123,27 @@
typedef struct {
- int iVec0[2];
+ FAUSTFLOAT fHslider0;
int fSamplingFreq;
float fConst0;
float fConst1;
- FAUSTFLOAT fHslider0;
FAUSTFLOAT fHslider1;
- FAUSTFLOAT fCheckbox0;
FAUSTFLOAT fHslider2;
+ FAUSTFLOAT fCheckbox0;
+ FAUSTFLOAT fButton0;
+ float fVec0[2];
FAUSTFLOAT fHslider3;
+ FAUSTFLOAT fHslider4;
float fVec1[2];
float fRec2[2];
float fConst2;
float fRec1[2];
- FAUSTFLOAT fHslider4;
FAUSTFLOAT fHslider5;
+ float fRec3[2];
FAUSTFLOAT fHslider6;
+ FAUSTFLOAT fHslider7;
float fRec5[2];
+ float fRec4[2];
} KickDrum;
@@ -232,14 +236,16 @@
void instanceResetUserInterfaceKickDrum(KickDrum* dsp) {
USED(dsp);
- dsp->fHslider0 = (FAUSTFLOAT)100.0f;
- dsp->fHslider1 = (FAUSTFLOAT)200.0f;
+ dsp->fHslider0 = (FAUSTFLOAT)1.0f;
+ dsp->fHslider1 = (FAUSTFLOAT)100.0f;
+ dsp->fHslider2 = (FAUSTFLOAT)200.0f;
dsp->fCheckbox0 = (FAUSTFLOAT)0.0f;
- dsp->fHslider2 = (FAUSTFLOAT)0.001f;
+ dsp->fButton0 = (FAUSTFLOAT)0.0f;
dsp->fHslider3 = (FAUSTFLOAT)0.001f;
dsp->fHslider4 = (FAUSTFLOAT)0.001f;
dsp->fHslider5 = (FAUSTFLOAT)0.001f;
- dsp->fHslider6 = (FAUSTFLOAT)0.01f;
+ dsp->fHslider6 = (FAUSTFLOAT)0.001f;
+ dsp->fHslider7 = (FAUSTFLOAT)0.01f;
}
@@ -249,7 +255,7 @@
{
int l1;
for (l1 = 0; (l1 < 2); l1 = (l1 + 1)) {
- dsp->iVec0[l1] = 0;
+ dsp->fVec0[l1] = 0.0f;
}
@@ -285,11 +291,29 @@
{
int l5;
for (l5 = 0; (l5 < 2); l5 = (l5 + 1)) {
- dsp->fRec5[l5] = 0.0f;
+ 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;
+
+ }
+
+ }
}
@@ -322,33 +346,40 @@
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->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, "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->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->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->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, "Release", &dsp->fHslider3, 0.00100000005f, 9.99999975e-06f, 1.0f, 0.00100000005f);
+ 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);
}
@@ -358,42 +389,50 @@
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);
+ float fSlow1 = (float)dsp->fHslider1;
+ float fSlow2 = ((float)dsp->fHslider2 * (float)dsp->fCheckbox0);
+ float fSlow3 = (float)dsp->fButton0;
+ float fSlow4 = (float)dsp->fHslider3;
+ float fSlow5 = (fSlow4 + (float)dsp->fHslider4);
+ float fSlow6 = (dsp->fConst0 * fSlow5);
+ float fSlow7 = (dsp->fConst0 * fSlow4);
+ float fSlow8 = (1.0f / (0.0f - (dsp->fConst0 * (fSlow4 - fSlow5))));
+ float fSlow9 = (dsp->fConst2 / fSlow4);
+ int iSlow10 = (fSlow3 > 0.0f);
+ int iSlow11 = (iSlow10 > 0);
+ float fSlow12 = (float)dsp->fHslider5;
+ float fSlow13 = (dsp->fConst0 * fSlow12);
+ int iSlow14 = ((fSlow3 == 0.0f) > 0);
+ float fSlow15 = (float)dsp->fHslider6;
+ float fSlow16 = (fSlow15 + (float)dsp->fHslider7);
+ float fSlow17 = (dsp->fConst0 * fSlow16);
+ float fSlow18 = (dsp->fConst0 * fSlow15);
+ float fSlow19 = (9.99999997e-07f * fSlow3);
+ float fSlow20 = ((fSlow19 + -1.0f) / (0.0f - (dsp->fConst0 * (fSlow15 - fSlow16))));
+ float fSlow21 = (dsp->fConst2 / fSlow15);
+ float fSlow22 = (dsp->fConst2 / fSlow12);
/* 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->fVec0[0] = fSlow3;
+ dsp->fVec1[0] = fSlow5;
+ dsp->fRec2[0] = ((((fSlow3 - dsp->fVec0[1]) > 0.0f) > 0)?0.0f:min(fSlow6, ((dsp->fRec2[1] + (dsp->fConst0 * (fSlow5 - dsp->fVec1[1]))) + 1.0f)));
+ int iTemp0 = (dsp->fRec2[0] < fSlow7);
+ float fTemp1 = ((dsp->fRec1[1] * (float)(1 - ((float)input0[i] > 0.0f))) + (dsp->fConst1 * (fSlow1 + (fSlow2 * (iTemp0?((dsp->fRec2[0] < 0.0f)?0.0f:(iTemp0?(fSlow9 * dsp->fRec2[0]):1.0f)):((dsp->fRec2[0] < fSlow6)?((fSlow8 * (0.0f - (dsp->fRec2[0] - fSlow7))) + 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->fRec3[0] = (iSlow11?0.0f:min(fSlow13, (dsp->fRec3[1] + 1.0f)));
+ dsp->fRec5[0] = (iSlow14?0.0f:min(fSlow17, (dsp->fRec5[1] + 1.0f)));
+ int iTemp2 = (dsp->fRec5[0] < fSlow18);
+ dsp->fRec4[0] = (iSlow10?((float)iSlow10 * (iTemp2?((dsp->fRec5[0] < 0.0f)?0.0f:(iTemp2?(fSlow21 * dsp->fRec5[0]):1.0f)):((dsp->fRec5[0] < fSlow17)?((fSlow20 * (dsp->fRec5[0] - fSlow18)) + 1.0f):fSlow19))):dsp->fRec4[1]);
+ output0[i] = (FAUSTFLOAT)(fSlow0 * (ftbl0KickDrumSIG0[(int)(65536.0f * dsp->fRec1[0])] * ((dsp->fRec3[0] < 0.0f)?dsp->fRec4[0]:((dsp->fRec3[0] < fSlow13)?(dsp->fRec4[0] + (fSlow22 * (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];
}
--- a/kick_drum.dsp
+++ b/kick_drum.dsp
@@ -11,4 +11,7 @@
bR = hslider("v:B/[2]Release[unit:s]", 0.001, 0.00001, 1, 0.001);
bFreq = checkbox("v:B/[3]Enable") * hslider("v:B/[0]Frequency[unit:Hz]", 200, -400, 400, 5);
-process = os.hs_oscsin(aFreq + bFreq*en.ar(bA, bR, 1)) * en.adsr(aA, aD, 0.000001, aR, 1.0);
+gain = hslider("v:Control/[0]Gain[style:knob]", 1, 0, 1, 0.01);
+gate = button("v:Control/[1]Gate");
+
+process = os.hs_oscsin(aFreq + bFreq*en.ar(bA, bR, gate)) * gain * en.adsr(aA, aD, 0.000001, aR, gate);