1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
|
/************************************************************************
IMPORTANT NOTE : this file contains two clearly delimited sections :
the ARCHITECTURE section (in two parts) and the USER section. Each section
is governed by its own copyright and license. Please check individually
each section for license and copyright information.
*************************************************************************/
/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/
/************************************************************************
FAUST Architecture File
Copyright (C) 2003-2019 GRAME, Centre National de Creation Musicale
---------------------------------------------------------------------
This Architecture section is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 3 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; If not, see <http://www.gnu.org/licenses/>.
EXCEPTION : As a special exception, you may create a larger work
that contains this FAUST architecture section and distribute
that work under terms of your choice, so long as this FAUST
architecture section is not modified.
************************************************************************
************************************************************************/
// faust -a params.d -lang dlang noise.dsp -o noise.d
import dplug.core.vec;
alias FAUSTFLOAT = float;
class Meta {
nothrow:
@nogc:
void declare(string name, string value) {}
}
class UI {
nothrow:
@nogc:
void declare(string id, string key, string value) {}
void declare(int id, string key, string value) {}
void declare(FAUSTFLOAT* id, string key, string value) {}
// -- layout groups
void openTabBox(string label) {}
void openHorizontalBox(string label) {}
void openVerticalBox(string label) {}
void closeBox() {}
// -- active widgets
void addButton(string label, FAUSTFLOAT* val) {}
void addCheckButton(string label, FAUSTFLOAT* val) {}
void addVerticalSlider(string label, FAUSTFLOAT* val, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) {}
void addHorizontalSlider(string label, FAUSTFLOAT* val, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) {}
void addNumEntry(string label, FAUSTFLOAT* val, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) {}
// -- passive display widgets
void addHorizontalBargraph(string label, FAUSTFLOAT* val, FAUSTFLOAT min, FAUSTFLOAT max) {}
void addVerticalBargraph(string label, FAUSTFLOAT* val, FAUSTFLOAT min, FAUSTFLOAT max) {}
}
interface dsp {
nothrow:
@nogc:
public:
void metadata(Meta* m);
int getNumInputs();
int getNumOutputs();
void buildUserInterface(UI* uiInterface);
int getSampleRate();
void instanceInit(int sample_rate);
void instanceResetUserInterface();
void compute(int count, FAUSTFLOAT*[] inputs, FAUSTFLOAT*[] outputs);
void initialize(int sample_rate);
}
/**
* Implements and overrides the methods that would provide parameters for use in
* a plug-in or GUI. These parameters are stored in a vector which can be accesed via
* `readParams()`
*/
class FaustParamAccess : UI {
nothrow:
@nogc:
this()
{
_faustParams = makeVec!FaustParam();
}
override void addButton(string label, FAUSTFLOAT* val)
{
_faustParams.pushBack(FaustParam(label, val, 0, 0, 0, 0, true));
}
override void addCheckButton(string label, FAUSTFLOAT* val)
{
_faustParams.pushBack(FaustParam(label, val, 0, 0, 0, 0, true));
}
override void addVerticalSlider(string label, FAUSTFLOAT* val, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step)
{
_faustParams.pushBack(FaustParam(label, val, init, min, max, step));
}
override void addHorizontalSlider(string label, FAUSTFLOAT* val, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step)
{
_faustParams.pushBack(FaustParam(label, val, init, min, max, step));
}
override void addNumEntry(string label, FAUSTFLOAT* val, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step)
{
_faustParams.pushBack(FaustParam(label, val, init, min, max, step));
}
FaustParam[] readParams()
{
return _faustParams.releaseData();
}
FaustParam readParam(int index)
{
return _faustParams[index];
}
ulong length()
{
return _faustParams.length();
}
private:
Vec!FaustParam _faustParams;
}
struct FaustParam
{
string label;
FAUSTFLOAT* val;
FAUSTFLOAT initial;
FAUSTFLOAT min;
FAUSTFLOAT max;
FAUSTFLOAT step;
bool isButton = false;
}
/******************************************************************************
*******************************************************************************
VECTOR INTRINSICS
*******************************************************************************
*******************************************************************************/
<<includeIntrinsic>>
/********************END ARCHITECTURE SECTION (part 1/2)****************/
/**************************BEGIN USER SECTION **************************/
<<includeclass>>
/***************************END USER SECTION ***************************/
/*******************BEGIN ARCHITECTURE SECTION (part 2/2)***************/
/********************END ARCHITECTURE SECTION (part 2/2)****************/
|