4518 lines
261 KiB
Plaintext
4518 lines
261 KiB
Plaintext
{
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 486.0, 193.0, 645.0, 868.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"id": "obj-54",
|
||
"maxclass": "newobj",
|
||
"numinlets": 2,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 59.0, 125.0, 356.0, 453.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"id": "obj-4",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 186.5, 223.0, 69.0, 22.0 ],
|
||
"text": "param q2 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-1",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 77.5, 223.0, 79.0, 22.0 ],
|
||
"text": "param f2 200"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-36",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 0.0, 0.0, 1000.0, 780.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// gen~ codebox version\nParam time(10); // ramp time in ms\nHistory state(0);\n\n// compute smoothing coefficient\n// gen~ uses samples, so we convert ms to coeff\ncoeff = exp(-1 / (time * samplerate * 0.001));\n\n// smooth toward input\nout = mix(in1, state, coeff);\nstate = out;",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-242",
|
||
"maxclass": "codebox",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 441.0, 207.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-34",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-35",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 367.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-35", 0 ],
|
||
"source": [ "obj-242", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-242", 0 ],
|
||
"source": [ "obj-34", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 132.0, 175.0, 89.0, 22.0 ],
|
||
"text": "gen @title fade"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-25",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 100.0, 151.0, 22.0 ],
|
||
"text": "scale -100. 100. -18. 18. 1."
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-31",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 139.0, 39.0, 22.0 ],
|
||
"text": "dbtoa"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-29",
|
||
"maxclass": "newobj",
|
||
"numinlets": 3,
|
||
"numoutlets": 5,
|
||
"outlettype": [ "", "", "", "", "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 134.0, 157.0, 1078.0, 978.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// -----------------------------------------------------\n// Peak/Notch (Peaking EQ) biquad coefficient generator\n//\n// Inlets:\n// in1 = frequency (Hz)\n// in2 = gain (dB, boost/cut)\n// in3 = Q\n//\n// Outlets:\n// out1 = b0\n// out2 = b1\n// out3 = b2\n// out4 = a1\n// out5 = a2\n// -----------------------------------------------------\n\nfreq = max(1, in1);\n//gainDB = in2;\ngain = in2;\r\nQ = max(0.0001, in3);\n\n// Convert gain from dB → amplitude ratio\n//A = pow(10, gainDB / 40);\nA = sqrt(gain);\r\n\n// Angular frequency\nw0 = twopi * freq / samplerate;\ncosw = cos(w0);\nsinw = sin(w0);\n\n// alpha controls the bandwidth\nalpha = sinw / (2 * Q);\n\n// -----------------------------------------------------\n// RBJ Peaking EQ formulas\n//\n// b0 = 1 + alpha*A\n// b1 = -2*cos(w0)\n// b2 = 1 - alpha*A\n//\n// a0 = 1 + alpha/A\n// a1 = -2*cos(w0)\n// a2 = 1 - alpha/A\n// -----------------------------------------------------\n\nb0 = 1 + alpha * A;\nb1 = -2 * cosw;\nb2 = 1 - alpha * A;\n\na0 = 1 + alpha / A;\na1 = -2 * cosw;\na2 = 1 - alpha / A;\n\n// Normalize by a0\nb0 /= a0;\nb1 /= a0;\nb2 /= a0;\na1 /= a0;\na2 /= a0;\n\n// Outputs\nout1 = b0;\nout2 = b1;\nout3 = b2;\nout4 = a1;\nout5 = a2;\n",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-17",
|
||
"maxclass": "codebox",
|
||
"numinlets": 3,
|
||
"numoutlets": 5,
|
||
"outlettype": [ "", "", "", "", "" ],
|
||
"patching_rect": [ 50.0, 118.0, 356.0, 794.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-21",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 13.0, 269.0, 22.0 ],
|
||
"text": "in 1 @comment frequency @default 100 @min 0"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-22",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 218.5, 47.0, 225.0, 22.0 ],
|
||
"text": "in 2 @comment gain @default 1 @min 0"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-23",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 387.0, 76.0, 178.0, 22.0 ],
|
||
"text": "in 3 @default 1 @min 0.000001"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-24",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-25",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 303.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 4"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-26",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 387.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 5"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-27",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 134.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-28",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 218.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 3"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-24", 0 ],
|
||
"source": [ "obj-17", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-25", 0 ],
|
||
"source": [ "obj-17", 3 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-26", 0 ],
|
||
"source": [ "obj-17", 4 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-27", 0 ],
|
||
"source": [ "obj-17", 1 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-28", 0 ],
|
||
"source": [ "obj-17", 2 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 0 ],
|
||
"source": [ "obj-21", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 1 ],
|
||
"source": [ "obj-22", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 2 ],
|
||
"source": [ "obj-23", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 77.0, 261.0, 128.60000000000002, 22.0 ],
|
||
"text": "gen @title filtercoeff"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-16",
|
||
"maxclass": "newobj",
|
||
"numinlets": 6,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 59.0, 125.0, 1000.0, 780.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// ----- state (delay memory) -----\nHistory x1(0); // x[n-1]\nHistory x2(0); // x[n-2]\nHistory y1(0); // y[n-1]\nHistory y2(0); // y[n-2]\n\n// ----- per-sample processing -----\ninSig = in1;\n\n// coefficients from inlets\nb0 = in2;\nb1 = in3;\nb2 = in4;\na1 = in5;\na2 = in6;\n\n// difference equation:\n// y[n] = b0*x[n] + b1*x[n-1] + b2*x[n-2] - a1*y[n-1] - a2*y[n-2]\ny = b0 * inSig\n + b1 * x1\n + b2 * x2\n - a1 * y1\n - a2 * y2;\n\n// update state for next sample\nx2 = x1;\nx1 = inSig;\ny2 = y1;\ny1 = y;\n\n// output\nout1 = y;\n",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-3",
|
||
"maxclass": "codebox",
|
||
"numinlets": 6,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 444.0, 391.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-9",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-10",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 135.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-11",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 220.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 3"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-12",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 305.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 4"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-13",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 390.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 5"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-14",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 475.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 6"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-15",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 551.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 1 ],
|
||
"source": [ "obj-10", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 2 ],
|
||
"source": [ "obj-11", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 3 ],
|
||
"source": [ "obj-12", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 4 ],
|
||
"source": [ "obj-13", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 5 ],
|
||
"source": [ "obj-14", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-15", 0 ],
|
||
"source": [ "obj-3", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 0 ],
|
||
"source": [ "obj-9", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 50.0, 305.0, 155.0, 22.0 ],
|
||
"text": "gen @title biquad"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-37",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-38",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-39",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 346.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 0 ],
|
||
"source": [ "obj-1", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-39", 0 ],
|
||
"source": [ "obj-16", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-31", 0 ],
|
||
"source": [ "obj-25", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 5 ],
|
||
"source": [ "obj-29", 4 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 4 ],
|
||
"source": [ "obj-29", 3 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 3 ],
|
||
"source": [ "obj-29", 2 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 2 ],
|
||
"source": [ "obj-29", 1 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 1 ],
|
||
"source": [ "obj-29", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-36", 0 ],
|
||
"source": [ "obj-31", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 1 ],
|
||
"source": [ "obj-36", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 0 ],
|
||
"source": [ "obj-37", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-25", 0 ],
|
||
"source": [ "obj-38", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 2 ],
|
||
"source": [ "obj-4", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 53.0, 192.0, 233.0, 22.0 ],
|
||
"text": "gen @title 200Hz~"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-53",
|
||
"maxclass": "newobj",
|
||
"numinlets": 2,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 424.0, 478.0, 397.0, 415.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"id": "obj-10",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 115.0, 100.0, 151.0, 22.0 ],
|
||
"text": "scale -100. 100. -18. 18. 1."
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-3",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 115.0, 136.0, 39.0, 22.0 ],
|
||
"text": "dbtoa"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-33",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 0.0, 0.0, 1000.0, 780.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// gen~ codebox version\nParam time(10); // ramp time in ms\nHistory state(0);\n\n// compute smoothing coefficient\n// gen~ uses samples, so we convert ms to coeff\ncoeff = exp(-1 / (time * samplerate * 0.001));\n\n// smooth toward input\nout = mix(in1, state, coeff);\nstate = out;",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-242",
|
||
"maxclass": "codebox",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 441.0, 207.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-34",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-35",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 367.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-35", 0 ],
|
||
"source": [ "obj-242", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-242", 0 ],
|
||
"source": [ "obj-34", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 115.0, 178.0, 89.0, 22.0 ],
|
||
"text": "gen @title fade"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-49",
|
||
"maxclass": "newobj",
|
||
"numinlets": 2,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 228.0, 29.5, 22.0 ],
|
||
"text": "*"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-50",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-51",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 115.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-52",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 291.284302, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 0 ],
|
||
"source": [ "obj-10", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-33", 0 ],
|
||
"source": [ "obj-3", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-49", 1 ],
|
||
"source": [ "obj-33", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-52", 0 ],
|
||
"source": [ "obj-49", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-49", 0 ],
|
||
"source": [ "obj-50", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-10", 0 ],
|
||
"source": [ "obj-51", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 53.0, 782.0, 233.0, 22.0 ],
|
||
"text": "gen @title Level~"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-47",
|
||
"maxclass": "newobj",
|
||
"numinlets": 2,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 459.0, 291.0, 400.0, 471.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"id": "obj-4",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 186.5, 223.0, 69.0, 22.0 ],
|
||
"text": "param q7 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-1",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 77.5, 223.0, 86.0, 22.0 ],
|
||
"text": "param f7 6400"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-36",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 0.0, 0.0, 1000.0, 780.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// gen~ codebox version\nParam time(10); // ramp time in ms\nHistory state(0);\n\n// compute smoothing coefficient\n// gen~ uses samples, so we convert ms to coeff\ncoeff = exp(-1 / (time * samplerate * 0.001));\n\n// smooth toward input\nout = mix(in1, state, coeff);\nstate = out;",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-242",
|
||
"maxclass": "codebox",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 441.0, 207.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-34",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-35",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 367.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-35", 0 ],
|
||
"source": [ "obj-242", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-242", 0 ],
|
||
"source": [ "obj-34", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 132.0, 175.0, 89.0, 22.0 ],
|
||
"text": "gen @title fade"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-25",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 100.0, 151.0, 22.0 ],
|
||
"text": "scale -100. 100. -18. 18. 1."
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-31",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 139.0, 39.0, 22.0 ],
|
||
"text": "dbtoa"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-29",
|
||
"maxclass": "newobj",
|
||
"numinlets": 3,
|
||
"numoutlets": 5,
|
||
"outlettype": [ "", "", "", "", "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 134.0, 157.0, 1078.0, 978.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// -----------------------------------------------------\n// High-Shelf biquad coefficient generator (RBJ Cookbook)\n//\n// Inlets:\n// in1 = frequency (Hz)\n// in2 = gain (dB)\n// in3 = Q (slope)\n//\n// Outputs:\n// out1 = b0\n// out2 = b1\n// out3 = b2\n// out4 = a1\n// out5 = a2\n// -----------------------------------------------------\n\nfreq = max(1, in1); // avoid 0 Hz\n//gainDB = in2;\ngain = in2;\nQ = max(0.0001, in3); // avoid divide by zero\n\n// Convert gain from dB → amplitude ratio\n//A = pow(10, gainDB / 40);\r\nA = sqrt(gain);\n\n// Angular frequency\nw0 = twopi * freq / samplerate;\ncosw = cos(w0);\nsinw = sin(w0);\n\n// RBJ alpha definition for shelving EQs\nalpha = sinw / (2 * Q) * sqrt( (A + 1/A) );\n\n// Helper\ntwosqrtAalpha = 2 * sqrt(A) * alpha;\n\nAplus = A + 1;\nAminus = A - 1;\n\n// -----------------------------------------------------\n// High-Shelf formulas\n//\n// b0 = A[(A+1) + (A−1)cos(w0) + twosqrtAalpha]\n// b1 = -2A[(A−1) + (A+1)cos(w0)]\n// b2 = A[(A+1) + (A−1)cos(w0) - twosqrtAalpha]\n//\n// a0 = (A+1) - (A−1)cos(w0) + twosqrtAalpha\n// a1 = 2[(A−1) - (A+1)cos(w0)]\n// a2 = (A+1) - (A−1)cos(w0) - twosqrtAalpha\n// -----------------------------------------------------\n\nb0 = A * ( Aplus + Aminus * cosw + twosqrtAalpha );\nb1 = -2 * A * ( Aminus + Aplus * cosw );\nb2 = A * ( Aplus + Aminus * cosw - twosqrtAalpha );\n\na0 = ( Aplus - Aminus * cosw + twosqrtAalpha );\na1 = 2 * ( Aminus - Aplus * cosw );\na2 = ( Aplus - Aminus * cosw - twosqrtAalpha );\n\n// Normalize by a0\nb0 /= a0;\nb1 /= a0;\nb2 /= a0;\na1 /= a0;\na2 /= a0;\n\n// Outputs\nout1 = b0;\nout2 = b1;\nout3 = b2;\nout4 = a1;\nout5 = a2;\n",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-17",
|
||
"maxclass": "codebox",
|
||
"numinlets": 3,
|
||
"numoutlets": 5,
|
||
"outlettype": [ "", "", "", "", "" ],
|
||
"patching_rect": [ 50.0, 118.0, 713.0, 783.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-21",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 13.0, 269.0, 22.0 ],
|
||
"text": "in 1 @comment frequency @default 100 @min 0"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-22",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 218.5, 47.0, 225.0, 22.0 ],
|
||
"text": "in 2 @comment gain @default 1 @min 0"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-23",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 387.0, 76.0, 178.0, 22.0 ],
|
||
"text": "in 3 @default 1 @min 0.000001"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-24",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-25",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 303.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 4"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-26",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 387.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 5"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-27",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 134.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-28",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 218.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 3"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-24", 0 ],
|
||
"source": [ "obj-17", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 0 ],
|
||
"source": [ "obj-21", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 1 ],
|
||
"source": [ "obj-22", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 2 ],
|
||
"source": [ "obj-23", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 77.0, 262.0, 128.60000000000002, 22.0 ],
|
||
"text": "gen @title filtercoeff"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-16",
|
||
"maxclass": "newobj",
|
||
"numinlets": 6,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 59.0, 125.0, 1000.0, 780.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// ----- state (delay memory) -----\nHistory x1(0); // x[n-1]\nHistory x2(0); // x[n-2]\nHistory y1(0); // y[n-1]\nHistory y2(0); // y[n-2]\n\n// ----- per-sample processing -----\ninSig = in1;\n\n// coefficients from inlets\nb0 = in2;\nb1 = in3;\nb2 = in4;\na1 = in5;\na2 = in6;\n\n// difference equation:\n// y[n] = b0*x[n] + b1*x[n-1] + b2*x[n-2] - a1*y[n-1] - a2*y[n-2]\ny = b0 * inSig\n + b1 * x1\n + b2 * x2\n - a1 * y1\n - a2 * y2;\n\n// update state for next sample\nx2 = x1;\nx1 = inSig;\ny2 = y1;\ny1 = y;\n\n// output\nout1 = y;\n",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-3",
|
||
"maxclass": "codebox",
|
||
"numinlets": 6,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 444.0, 391.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-9",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-10",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 135.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-11",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 220.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 3"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-12",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 305.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 4"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-13",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 390.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 5"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-14",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 475.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 6"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-15",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 551.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 1 ],
|
||
"source": [ "obj-10", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 2 ],
|
||
"source": [ "obj-11", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 3 ],
|
||
"source": [ "obj-12", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 4 ],
|
||
"source": [ "obj-13", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 5 ],
|
||
"source": [ "obj-14", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-15", 0 ],
|
||
"source": [ "obj-3", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 0 ],
|
||
"source": [ "obj-9", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 50.0, 306.0, 155.0, 22.0 ],
|
||
"text": "gen @title biquad"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-37",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-38",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-39",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 346.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 0 ],
|
||
"source": [ "obj-1", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-39", 0 ],
|
||
"source": [ "obj-16", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-31", 0 ],
|
||
"source": [ "obj-25", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 5 ],
|
||
"source": [ "obj-29", 4 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 4 ],
|
||
"source": [ "obj-29", 3 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 3 ],
|
||
"source": [ "obj-29", 2 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 2 ],
|
||
"source": [ "obj-29", 1 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 1 ],
|
||
"source": [ "obj-29", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-36", 0 ],
|
||
"source": [ "obj-31", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 1 ],
|
||
"source": [ "obj-36", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 0 ],
|
||
"source": [ "obj-37", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-25", 0 ],
|
||
"source": [ "obj-38", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 2 ],
|
||
"source": [ "obj-4", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 53.0, 687.0, 233.0, 22.0 ],
|
||
"text": "gen @title 6.4kHz~"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-46",
|
||
"maxclass": "newobj",
|
||
"numinlets": 2,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 59.0, 125.0, 358.0, 451.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"id": "obj-4",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 186.5, 223.0, 69.0, 22.0 ],
|
||
"text": "param q6 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-1",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 77.5, 223.0, 86.0, 22.0 ],
|
||
"text": "param f6 3200"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-36",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 0.0, 0.0, 1000.0, 780.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// gen~ codebox version\nParam time(10); // ramp time in ms\nHistory state(0);\n\n// compute smoothing coefficient\n// gen~ uses samples, so we convert ms to coeff\ncoeff = exp(-1 / (time * samplerate * 0.001));\n\n// smooth toward input\nout = mix(in1, state, coeff);\nstate = out;",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-242",
|
||
"maxclass": "codebox",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 441.0, 207.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-34",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-35",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 367.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-35", 0 ],
|
||
"source": [ "obj-242", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-242", 0 ],
|
||
"source": [ "obj-34", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 132.0, 175.0, 89.0, 22.0 ],
|
||
"text": "gen @title fade"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-25",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 100.0, 151.0, 22.0 ],
|
||
"text": "scale -100. 100. -18. 18. 1."
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-31",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 139.0, 39.0, 22.0 ],
|
||
"text": "dbtoa"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-29",
|
||
"maxclass": "newobj",
|
||
"numinlets": 3,
|
||
"numoutlets": 5,
|
||
"outlettype": [ "", "", "", "", "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 134.0, 157.0, 1078.0, 978.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// -----------------------------------------------------\n// Peak/Notch (Peaking EQ) biquad coefficient generator\n//\n// Inlets:\n// in1 = frequency (Hz)\n// in2 = gain (dB, boost/cut)\n// in3 = Q\n//\n// Outlets:\n// out1 = b0\n// out2 = b1\n// out3 = b2\n// out4 = a1\n// out5 = a2\n// -----------------------------------------------------\n\nfreq = max(1, in1);\n//gainDB = in2;\ngain = in2;\r\nQ = max(0.0001, in3);\n\n// Convert gain from dB → amplitude ratio\n//A = pow(10, gainDB / 40);\nA = sqrt(gain);\r\n\n// Angular frequency\nw0 = twopi * freq / samplerate;\ncosw = cos(w0);\nsinw = sin(w0);\n\n// alpha controls the bandwidth\nalpha = sinw / (2 * Q);\n\n// -----------------------------------------------------\n// RBJ Peaking EQ formulas\n//\n// b0 = 1 + alpha*A\n// b1 = -2*cos(w0)\n// b2 = 1 - alpha*A\n//\n// a0 = 1 + alpha/A\n// a1 = -2*cos(w0)\n// a2 = 1 - alpha/A\n// -----------------------------------------------------\n\nb0 = 1 + alpha * A;\nb1 = -2 * cosw;\nb2 = 1 - alpha * A;\n\na0 = 1 + alpha / A;\na1 = -2 * cosw;\na2 = 1 - alpha / A;\n\n// Normalize by a0\nb0 /= a0;\nb1 /= a0;\nb2 /= a0;\na1 /= a0;\na2 /= a0;\n\n// Outputs\nout1 = b0;\nout2 = b1;\nout3 = b2;\nout4 = a1;\nout5 = a2;\n",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-17",
|
||
"maxclass": "codebox",
|
||
"numinlets": 3,
|
||
"numoutlets": 5,
|
||
"outlettype": [ "", "", "", "", "" ],
|
||
"patching_rect": [ 50.0, 118.0, 356.0, 794.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-21",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 13.0, 269.0, 22.0 ],
|
||
"text": "in 1 @comment frequency @default 100 @min 0"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-22",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 218.5, 47.0, 225.0, 22.0 ],
|
||
"text": "in 2 @comment gain @default 1 @min 0"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-23",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 387.0, 76.0, 178.0, 22.0 ],
|
||
"text": "in 3 @default 1 @min 0.000001"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-24",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-25",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 303.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 4"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-26",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 387.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 5"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-27",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 134.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-28",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 218.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 3"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-24", 0 ],
|
||
"source": [ "obj-17", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-25", 0 ],
|
||
"source": [ "obj-17", 3 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-26", 0 ],
|
||
"source": [ "obj-17", 4 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-27", 0 ],
|
||
"source": [ "obj-17", 1 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-28", 0 ],
|
||
"source": [ "obj-17", 2 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 0 ],
|
||
"source": [ "obj-21", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 1 ],
|
||
"source": [ "obj-22", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 2 ],
|
||
"source": [ "obj-23", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 77.0, 263.0, 128.60000000000002, 22.0 ],
|
||
"text": "gen @title filtercoeff"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-16",
|
||
"maxclass": "newobj",
|
||
"numinlets": 6,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 0.0, 0.0, 1000.0, 780.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// ----- state (delay memory) -----\nHistory x1(0); // x[n-1]\nHistory x2(0); // x[n-2]\nHistory y1(0); // y[n-1]\nHistory y2(0); // y[n-2]\n\n// ----- per-sample processing -----\ninSig = in1;\n\n// coefficients from inlets\nb0 = in2;\nb1 = in3;\nb2 = in4;\na1 = in5;\na2 = in6;\n\n// difference equation:\n// y[n] = b0*x[n] + b1*x[n-1] + b2*x[n-2] - a1*y[n-1] - a2*y[n-2]\ny = b0 * inSig\n + b1 * x1\n + b2 * x2\n - a1 * y1\n - a2 * y2;\n\n// update state for next sample\nx2 = x1;\nx1 = inSig;\ny2 = y1;\ny1 = y;\n\n// output\nout1 = y;\n",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-3",
|
||
"maxclass": "codebox",
|
||
"numinlets": 6,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 444.0, 391.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-9",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-10",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 135.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-11",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 220.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 3"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-12",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 305.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 4"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-13",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 390.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 5"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-14",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 475.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 6"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-15",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 551.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 1 ],
|
||
"source": [ "obj-10", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 2 ],
|
||
"source": [ "obj-11", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 3 ],
|
||
"source": [ "obj-12", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 4 ],
|
||
"source": [ "obj-13", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 5 ],
|
||
"source": [ "obj-14", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-15", 0 ],
|
||
"source": [ "obj-3", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 0 ],
|
||
"source": [ "obj-9", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 50.0, 307.0, 155.0, 22.0 ],
|
||
"text": "gen @title biquad"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-37",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-38",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-39",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 346.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 0 ],
|
||
"source": [ "obj-1", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-39", 0 ],
|
||
"source": [ "obj-16", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-31", 0 ],
|
||
"source": [ "obj-25", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 5 ],
|
||
"source": [ "obj-29", 4 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 4 ],
|
||
"source": [ "obj-29", 3 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 3 ],
|
||
"source": [ "obj-29", 2 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 2 ],
|
||
"source": [ "obj-29", 1 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 1 ],
|
||
"source": [ "obj-29", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-36", 0 ],
|
||
"source": [ "obj-31", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 1 ],
|
||
"source": [ "obj-36", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 0 ],
|
||
"source": [ "obj-37", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-25", 0 ],
|
||
"source": [ "obj-38", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 2 ],
|
||
"source": [ "obj-4", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 53.0, 593.0, 233.0, 22.0 ],
|
||
"text": "gen @title 3.2kHz~"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-45",
|
||
"maxclass": "newobj",
|
||
"numinlets": 2,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 59.0, 125.0, 399.0, 423.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"id": "obj-4",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 186.5, 223.0, 69.0, 22.0 ],
|
||
"text": "param q5 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-1",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 77.5, 223.0, 86.0, 22.0 ],
|
||
"text": "param f5 1600"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-36",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 0.0, 0.0, 1000.0, 780.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// gen~ codebox version\nParam time(10); // ramp time in ms\nHistory state(0);\n\n// compute smoothing coefficient\n// gen~ uses samples, so we convert ms to coeff\ncoeff = exp(-1 / (time * samplerate * 0.001));\n\n// smooth toward input\nout = mix(in1, state, coeff);\nstate = out;",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-242",
|
||
"maxclass": "codebox",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 441.0, 207.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-34",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-35",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 367.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-35", 0 ],
|
||
"source": [ "obj-242", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-242", 0 ],
|
||
"source": [ "obj-34", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 132.0, 175.0, 89.0, 22.0 ],
|
||
"text": "gen @title fade"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-25",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 100.0, 151.0, 22.0 ],
|
||
"text": "scale -100. 100. -18. 18. 1."
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-31",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 139.0, 39.0, 22.0 ],
|
||
"text": "dbtoa"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-29",
|
||
"maxclass": "newobj",
|
||
"numinlets": 3,
|
||
"numoutlets": 5,
|
||
"outlettype": [ "", "", "", "", "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 134.0, 157.0, 1078.0, 978.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// -----------------------------------------------------\n// Peak/Notch (Peaking EQ) biquad coefficient generator\n//\n// Inlets:\n// in1 = frequency (Hz)\n// in2 = gain (dB, boost/cut)\n// in3 = Q\n//\n// Outlets:\n// out1 = b0\n// out2 = b1\n// out3 = b2\n// out4 = a1\n// out5 = a2\n// -----------------------------------------------------\n\nfreq = max(1, in1);\n//gainDB = in2;\ngain = in2;\r\nQ = max(0.0001, in3);\n\n// Convert gain from dB → amplitude ratio\n//A = pow(10, gainDB / 40);\nA = sqrt(gain);\r\n\n// Angular frequency\nw0 = twopi * freq / samplerate;\ncosw = cos(w0);\nsinw = sin(w0);\n\n// alpha controls the bandwidth\nalpha = sinw / (2 * Q);\n\n// -----------------------------------------------------\n// RBJ Peaking EQ formulas\n//\n// b0 = 1 + alpha*A\n// b1 = -2*cos(w0)\n// b2 = 1 - alpha*A\n//\n// a0 = 1 + alpha/A\n// a1 = -2*cos(w0)\n// a2 = 1 - alpha/A\n// -----------------------------------------------------\n\nb0 = 1 + alpha * A;\nb1 = -2 * cosw;\nb2 = 1 - alpha * A;\n\na0 = 1 + alpha / A;\na1 = -2 * cosw;\na2 = 1 - alpha / A;\n\n// Normalize by a0\nb0 /= a0;\nb1 /= a0;\nb2 /= a0;\na1 /= a0;\na2 /= a0;\n\n// Outputs\nout1 = b0;\nout2 = b1;\nout3 = b2;\nout4 = a1;\nout5 = a2;\n",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-17",
|
||
"maxclass": "codebox",
|
||
"numinlets": 3,
|
||
"numoutlets": 5,
|
||
"outlettype": [ "", "", "", "", "" ],
|
||
"patching_rect": [ 50.0, 118.0, 356.0, 794.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-21",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 13.0, 269.0, 22.0 ],
|
||
"text": "in 1 @comment frequency @default 100 @min 0"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-22",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 218.5, 47.0, 225.0, 22.0 ],
|
||
"text": "in 2 @comment gain @default 1 @min 0"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-23",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 387.0, 76.0, 178.0, 22.0 ],
|
||
"text": "in 3 @default 1 @min 0.000001"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-24",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-25",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 303.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 4"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-26",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 387.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 5"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-27",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 134.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-28",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 218.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 3"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-24", 0 ],
|
||
"source": [ "obj-17", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-25", 0 ],
|
||
"source": [ "obj-17", 3 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-26", 0 ],
|
||
"source": [ "obj-17", 4 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-27", 0 ],
|
||
"source": [ "obj-17", 1 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-28", 0 ],
|
||
"source": [ "obj-17", 2 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 0 ],
|
||
"source": [ "obj-21", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 1 ],
|
||
"source": [ "obj-22", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 2 ],
|
||
"source": [ "obj-23", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 77.0, 258.0, 128.60000000000002, 22.0 ],
|
||
"text": "gen @title filtercoeff"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-16",
|
||
"maxclass": "newobj",
|
||
"numinlets": 6,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 59.0, 125.0, 1000.0, 780.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// ----- state (delay memory) -----\nHistory x1(0); // x[n-1]\nHistory x2(0); // x[n-2]\nHistory y1(0); // y[n-1]\nHistory y2(0); // y[n-2]\n\n// ----- per-sample processing -----\ninSig = in1;\n\n// coefficients from inlets\nb0 = in2;\nb1 = in3;\nb2 = in4;\na1 = in5;\na2 = in6;\n\n// difference equation:\n// y[n] = b0*x[n] + b1*x[n-1] + b2*x[n-2] - a1*y[n-1] - a2*y[n-2]\ny = b0 * inSig\n + b1 * x1\n + b2 * x2\n - a1 * y1\n - a2 * y2;\n\n// update state for next sample\nx2 = x1;\nx1 = inSig;\ny2 = y1;\ny1 = y;\n\n// output\nout1 = y;\n",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-3",
|
||
"maxclass": "codebox",
|
||
"numinlets": 6,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 444.0, 391.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-9",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-10",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 135.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-11",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 220.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 3"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-12",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 305.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 4"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-13",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 390.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 5"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-14",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 475.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 6"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-15",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 551.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 1 ],
|
||
"source": [ "obj-10", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 2 ],
|
||
"source": [ "obj-11", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 3 ],
|
||
"source": [ "obj-12", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 4 ],
|
||
"source": [ "obj-13", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 5 ],
|
||
"source": [ "obj-14", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-15", 0 ],
|
||
"source": [ "obj-3", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 0 ],
|
||
"source": [ "obj-9", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 50.0, 302.0, 155.0, 22.0 ],
|
||
"text": "gen @title biquad"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-37",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-38",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-39",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 346.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 0 ],
|
||
"source": [ "obj-1", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-39", 0 ],
|
||
"source": [ "obj-16", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-31", 0 ],
|
||
"source": [ "obj-25", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 5 ],
|
||
"source": [ "obj-29", 4 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 4 ],
|
||
"source": [ "obj-29", 3 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 3 ],
|
||
"source": [ "obj-29", 2 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 2 ],
|
||
"source": [ "obj-29", 1 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 1 ],
|
||
"source": [ "obj-29", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-36", 0 ],
|
||
"source": [ "obj-31", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 1 ],
|
||
"source": [ "obj-36", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 0 ],
|
||
"source": [ "obj-37", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-25", 0 ],
|
||
"source": [ "obj-38", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 2 ],
|
||
"source": [ "obj-4", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 53.0, 488.0, 233.0, 22.0 ],
|
||
"text": "gen @title 1.6kHz~"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-44",
|
||
"maxclass": "newobj",
|
||
"numinlets": 2,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 59.0, 125.0, 387.0, 506.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"id": "obj-4",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 186.5, 223.0, 69.0, 22.0 ],
|
||
"text": "param q4 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-1",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 77.5, 223.0, 79.0, 22.0 ],
|
||
"text": "param f4 800"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-36",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 0.0, 0.0, 1000.0, 780.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// gen~ codebox version\nParam time(10); // ramp time in ms\nHistory state(0);\n\n// compute smoothing coefficient\n// gen~ uses samples, so we convert ms to coeff\ncoeff = exp(-1 / (time * samplerate * 0.001));\n\n// smooth toward input\nout = mix(in1, state, coeff);\nstate = out;",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-242",
|
||
"maxclass": "codebox",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 441.0, 207.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-34",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-35",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 367.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-35", 0 ],
|
||
"source": [ "obj-242", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-242", 0 ],
|
||
"source": [ "obj-34", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 132.0, 175.0, 89.0, 22.0 ],
|
||
"text": "gen @title fade"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-25",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 100.0, 151.0, 22.0 ],
|
||
"text": "scale -100. 100. -18. 18. 1."
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-31",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 139.0, 39.0, 22.0 ],
|
||
"text": "dbtoa"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-29",
|
||
"maxclass": "newobj",
|
||
"numinlets": 3,
|
||
"numoutlets": 5,
|
||
"outlettype": [ "", "", "", "", "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 134.0, 157.0, 1078.0, 978.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// -----------------------------------------------------\n// Peak/Notch (Peaking EQ) biquad coefficient generator\n//\n// Inlets:\n// in1 = frequency (Hz)\n// in2 = gain (dB, boost/cut)\n// in3 = Q\n//\n// Outlets:\n// out1 = b0\n// out2 = b1\n// out3 = b2\n// out4 = a1\n// out5 = a2\n// -----------------------------------------------------\n\nfreq = max(1, in1);\n//gainDB = in2;\ngain = in2;\r\nQ = max(0.0001, in3);\n\n// Convert gain from dB → amplitude ratio\n//A = pow(10, gainDB / 40);\nA = sqrt(gain);\r\n\n// Angular frequency\nw0 = twopi * freq / samplerate;\ncosw = cos(w0);\nsinw = sin(w0);\n\n// alpha controls the bandwidth\nalpha = sinw / (2 * Q);\n\n// -----------------------------------------------------\n// RBJ Peaking EQ formulas\n//\n// b0 = 1 + alpha*A\n// b1 = -2*cos(w0)\n// b2 = 1 - alpha*A\n//\n// a0 = 1 + alpha/A\n// a1 = -2*cos(w0)\n// a2 = 1 - alpha/A\n// -----------------------------------------------------\n\nb0 = 1 + alpha * A;\nb1 = -2 * cosw;\nb2 = 1 - alpha * A;\n\na0 = 1 + alpha / A;\na1 = -2 * cosw;\na2 = 1 - alpha / A;\n\n// Normalize by a0\nb0 /= a0;\nb1 /= a0;\nb2 /= a0;\na1 /= a0;\na2 /= a0;\n\n// Outputs\nout1 = b0;\nout2 = b1;\nout3 = b2;\nout4 = a1;\nout5 = a2;\n",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-17",
|
||
"maxclass": "codebox",
|
||
"numinlets": 3,
|
||
"numoutlets": 5,
|
||
"outlettype": [ "", "", "", "", "" ],
|
||
"patching_rect": [ 50.0, 118.0, 356.0, 794.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-21",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 13.0, 269.0, 22.0 ],
|
||
"text": "in 1 @comment frequency @default 100 @min 0"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-22",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 218.5, 47.0, 225.0, 22.0 ],
|
||
"text": "in 2 @comment gain @default 1 @min 0"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-23",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 387.0, 76.0, 178.0, 22.0 ],
|
||
"text": "in 3 @default 1 @min 0.000001"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-24",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-25",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 303.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 4"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-26",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 387.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 5"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-27",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 134.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-28",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 218.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 3"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-24", 0 ],
|
||
"source": [ "obj-17", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-25", 0 ],
|
||
"source": [ "obj-17", 3 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-26", 0 ],
|
||
"source": [ "obj-17", 4 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-27", 0 ],
|
||
"source": [ "obj-17", 1 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-28", 0 ],
|
||
"source": [ "obj-17", 2 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 0 ],
|
||
"source": [ "obj-21", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 1 ],
|
||
"source": [ "obj-22", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 2 ],
|
||
"source": [ "obj-23", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 77.0, 261.0, 128.60000000000002, 22.0 ],
|
||
"text": "gen @title filtercoeff"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-16",
|
||
"maxclass": "newobj",
|
||
"numinlets": 6,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 59.0, 125.0, 1000.0, 780.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// ----- state (delay memory) -----\nHistory x1(0); // x[n-1]\nHistory x2(0); // x[n-2]\nHistory y1(0); // y[n-1]\nHistory y2(0); // y[n-2]\n\n// ----- per-sample processing -----\ninSig = in1;\n\n// coefficients from inlets\nb0 = in2;\nb1 = in3;\nb2 = in4;\na1 = in5;\na2 = in6;\n\n// difference equation:\n// y[n] = b0*x[n] + b1*x[n-1] + b2*x[n-2] - a1*y[n-1] - a2*y[n-2]\ny = b0 * inSig\n + b1 * x1\n + b2 * x2\n - a1 * y1\n - a2 * y2;\n\n// update state for next sample\nx2 = x1;\nx1 = inSig;\ny2 = y1;\ny1 = y;\n\n// output\nout1 = y;\n",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-3",
|
||
"maxclass": "codebox",
|
||
"numinlets": 6,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 444.0, 391.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-9",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-10",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 135.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-11",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 220.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 3"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-12",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 305.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 4"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-13",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 390.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 5"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-14",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 475.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 6"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-15",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 551.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 1 ],
|
||
"source": [ "obj-10", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 2 ],
|
||
"source": [ "obj-11", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 3 ],
|
||
"source": [ "obj-12", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 4 ],
|
||
"source": [ "obj-13", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 5 ],
|
||
"source": [ "obj-14", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-15", 0 ],
|
||
"source": [ "obj-3", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 0 ],
|
||
"source": [ "obj-9", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 50.0, 305.0, 155.0, 22.0 ],
|
||
"text": "gen @title biquad"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-37",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-38",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-39",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 346.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 0 ],
|
||
"source": [ "obj-1", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-39", 0 ],
|
||
"source": [ "obj-16", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-31", 0 ],
|
||
"source": [ "obj-25", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 5 ],
|
||
"source": [ "obj-29", 4 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 4 ],
|
||
"source": [ "obj-29", 3 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 3 ],
|
||
"source": [ "obj-29", 2 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 2 ],
|
||
"source": [ "obj-29", 1 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 1 ],
|
||
"source": [ "obj-29", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-36", 0 ],
|
||
"source": [ "obj-31", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 1 ],
|
||
"source": [ "obj-36", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 0 ],
|
||
"source": [ "obj-37", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-25", 0 ],
|
||
"source": [ "obj-38", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 2 ],
|
||
"source": [ "obj-4", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 53.0, 391.0, 233.0, 22.0 ],
|
||
"text": "gen @title 800Hz~"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-43",
|
||
"maxclass": "newobj",
|
||
"numinlets": 2,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 59.0, 125.0, 415.0, 463.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"id": "obj-4",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 186.5, 223.0, 69.0, 22.0 ],
|
||
"text": "param q3 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-1",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 77.0, 223.0, 79.0, 22.0 ],
|
||
"text": "param f3 400"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-36",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 0.0, 0.0, 1000.0, 780.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// gen~ codebox version\nParam time(10); // ramp time in ms\nHistory state(0);\n\n// compute smoothing coefficient\n// gen~ uses samples, so we convert ms to coeff\ncoeff = exp(-1 / (time * samplerate * 0.001));\n\n// smooth toward input\nout = mix(in1, state, coeff);\nstate = out;",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-242",
|
||
"maxclass": "codebox",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 441.0, 207.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-34",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-35",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 367.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-35", 0 ],
|
||
"source": [ "obj-242", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-242", 0 ],
|
||
"source": [ "obj-34", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 132.0, 175.0, 89.0, 22.0 ],
|
||
"text": "gen @title fade"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-25",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 100.0, 151.0, 22.0 ],
|
||
"text": "scale -100. 100. -18. 18. 1."
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-31",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 139.0, 39.0, 22.0 ],
|
||
"text": "dbtoa"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-29",
|
||
"maxclass": "newobj",
|
||
"numinlets": 3,
|
||
"numoutlets": 5,
|
||
"outlettype": [ "", "", "", "", "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 134.0, 157.0, 1078.0, 978.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// -----------------------------------------------------\n// Peak/Notch (Peaking EQ) biquad coefficient generator\n//\n// Inlets:\n// in1 = frequency (Hz)\n// in2 = gain (dB, boost/cut)\n// in3 = Q\n//\n// Outlets:\n// out1 = b0\n// out2 = b1\n// out3 = b2\n// out4 = a1\n// out5 = a2\n// -----------------------------------------------------\n\nfreq = max(1, in1);\n//gainDB = in2;\ngain = in2;\r\nQ = max(0.0001, in3);\n\n// Convert gain from dB → amplitude ratio\n//A = pow(10, gainDB / 40);\nA = sqrt(gain);\r\n\n// Angular frequency\nw0 = twopi * freq / samplerate;\ncosw = cos(w0);\nsinw = sin(w0);\n\n// alpha controls the bandwidth\nalpha = sinw / (2 * Q);\n\n// -----------------------------------------------------\n// RBJ Peaking EQ formulas\n//\n// b0 = 1 + alpha*A\n// b1 = -2*cos(w0)\n// b2 = 1 - alpha*A\n//\n// a0 = 1 + alpha/A\n// a1 = -2*cos(w0)\n// a2 = 1 - alpha/A\n// -----------------------------------------------------\n\nb0 = 1 + alpha * A;\nb1 = -2 * cosw;\nb2 = 1 - alpha * A;\n\na0 = 1 + alpha / A;\na1 = -2 * cosw;\na2 = 1 - alpha / A;\n\n// Normalize by a0\nb0 /= a0;\nb1 /= a0;\nb2 /= a0;\na1 /= a0;\na2 /= a0;\n\n// Outputs\nout1 = b0;\nout2 = b1;\nout3 = b2;\nout4 = a1;\nout5 = a2;\n",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-17",
|
||
"maxclass": "codebox",
|
||
"numinlets": 3,
|
||
"numoutlets": 5,
|
||
"outlettype": [ "", "", "", "", "" ],
|
||
"patching_rect": [ 50.0, 118.0, 356.0, 794.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-21",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 13.0, 269.0, 22.0 ],
|
||
"text": "in 1 @comment frequency @default 100 @min 0"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-22",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 218.5, 47.0, 225.0, 22.0 ],
|
||
"text": "in 2 @comment gain @default 1 @min 0"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-23",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 387.0, 76.0, 178.0, 22.0 ],
|
||
"text": "in 3 @default 1 @min 0.000001"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-24",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-25",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 303.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 4"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-26",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 387.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 5"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-27",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 134.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-28",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 218.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 3"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-24", 0 ],
|
||
"source": [ "obj-17", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-25", 0 ],
|
||
"source": [ "obj-17", 3 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-26", 0 ],
|
||
"source": [ "obj-17", 4 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-27", 0 ],
|
||
"source": [ "obj-17", 1 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-28", 0 ],
|
||
"source": [ "obj-17", 2 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 0 ],
|
||
"source": [ "obj-21", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 1 ],
|
||
"source": [ "obj-22", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 2 ],
|
||
"source": [ "obj-23", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 77.0, 264.0, 128.60000000000002, 22.0 ],
|
||
"text": "gen @title filtercoeff"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-16",
|
||
"maxclass": "newobj",
|
||
"numinlets": 6,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 0.0, 0.0, 1000.0, 780.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// ----- state (delay memory) -----\nHistory x1(0); // x[n-1]\nHistory x2(0); // x[n-2]\nHistory y1(0); // y[n-1]\nHistory y2(0); // y[n-2]\n\n// ----- per-sample processing -----\ninSig = in1;\n\n// coefficients from inlets\nb0 = in2;\nb1 = in3;\nb2 = in4;\na1 = in5;\na2 = in6;\n\n// difference equation:\n// y[n] = b0*x[n] + b1*x[n-1] + b2*x[n-2] - a1*y[n-1] - a2*y[n-2]\ny = b0 * inSig\n + b1 * x1\n + b2 * x2\n - a1 * y1\n - a2 * y2;\n\n// update state for next sample\nx2 = x1;\nx1 = inSig;\ny2 = y1;\ny1 = y;\n\n// output\nout1 = y;\n",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-3",
|
||
"maxclass": "codebox",
|
||
"numinlets": 6,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 444.0, 391.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-9",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-10",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 135.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-11",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 220.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 3"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-12",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 305.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 4"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-13",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 390.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 5"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-14",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 475.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 6"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-15",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 551.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 1 ],
|
||
"source": [ "obj-10", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 2 ],
|
||
"source": [ "obj-11", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 3 ],
|
||
"source": [ "obj-12", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 4 ],
|
||
"source": [ "obj-13", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 5 ],
|
||
"source": [ "obj-14", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-15", 0 ],
|
||
"source": [ "obj-3", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 0 ],
|
||
"source": [ "obj-9", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 50.0, 308.0, 155.0, 22.0 ],
|
||
"text": "gen @title biquad"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-37",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-38",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-39",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 346.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 0 ],
|
||
"source": [ "obj-1", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-39", 0 ],
|
||
"source": [ "obj-16", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-31", 0 ],
|
||
"source": [ "obj-25", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 5 ],
|
||
"source": [ "obj-29", 4 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 4 ],
|
||
"source": [ "obj-29", 3 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 3 ],
|
||
"source": [ "obj-29", 2 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 2 ],
|
||
"source": [ "obj-29", 1 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 1 ],
|
||
"source": [ "obj-29", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-36", 0 ],
|
||
"source": [ "obj-31", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 1 ],
|
||
"source": [ "obj-36", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 0 ],
|
||
"source": [ "obj-37", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-25", 0 ],
|
||
"source": [ "obj-38", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 2 ],
|
||
"source": [ "obj-4", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 53.0, 293.0, 233.0, 22.0 ],
|
||
"text": "gen @title 400Hz~"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-38",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 267.0, 638.0, 279.0, 22.0 ],
|
||
"text": "param _6400Hz @default 0 @min -100 @max 100",
|
||
"varname": "6.4kHz"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-41",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 267.0, 542.0, 279.0, 22.0 ],
|
||
"text": "param _3200Hz @default 0 @min -100 @max 100",
|
||
"varname": "3.2kHz"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-42",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 267.0, 432.0, 279.0, 22.0 ],
|
||
"text": "param _1600Hz @default 0 @min -100 @max 100",
|
||
"varname": "1.6kHz"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-34",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 267.0, 338.0, 273.0, 22.0 ],
|
||
"text": "param _800Hz @default 0 @min -100 @max 100",
|
||
"varname": "800Hz"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-30",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 267.0, 239.0, 273.0, 22.0 ],
|
||
"text": "param _400Hz @default 0 @min -100 @max 100",
|
||
"varname": "400Hz"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-23",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 267.0, 132.0, 273.0, 22.0 ],
|
||
"text": "param _200Hz @default 0 @min -100 @max 100",
|
||
"varname": "200Hz"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-18",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 267.0, 32.0, 273.0, 22.0 ],
|
||
"text": "param _100Hz @default 0 @min -100 @max 100",
|
||
"varname": "100Hz"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-69",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 267.0, 732.0, 256.0, 22.0 ],
|
||
"text": "param level @default 0 @min -100 @max 100",
|
||
"varname": "level"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-40",
|
||
"maxclass": "newobj",
|
||
"numinlets": 2,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 399.0, 338.0, 610.0, 484.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"id": "obj-4",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 186.5, 223.0, 69.0, 22.0 ],
|
||
"text": "param q1 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-1",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 77.5, 223.0, 79.0, 22.0 ],
|
||
"text": "param f1 100"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-36",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 0.0, 0.0, 1000.0, 780.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// gen~ codebox version\nParam time(10); // ramp time in ms\nHistory state(0);\n\n// compute smoothing coefficient\n// gen~ uses samples, so we convert ms to coeff\ncoeff = exp(-1 / (time * samplerate * 0.001));\n\n// smooth toward input\nout = mix(in1, state, coeff);\nstate = out;",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-242",
|
||
"maxclass": "codebox",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 441.0, 207.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-34",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-35",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 367.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-35", 0 ],
|
||
"source": [ "obj-242", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-242", 0 ],
|
||
"source": [ "obj-34", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 132.0, 175.0, 89.0, 22.0 ],
|
||
"text": "gen @title fade"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-25",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 100.0, 151.0, 22.0 ],
|
||
"text": "scale -100. 100. -18. 18. 1."
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-31",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 139.0, 39.0, 22.0 ],
|
||
"text": "dbtoa"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-29",
|
||
"maxclass": "newobj",
|
||
"numinlets": 3,
|
||
"numoutlets": 5,
|
||
"outlettype": [ "", "", "", "", "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 134.0, 157.0, 1078.0, 978.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// -------------------------------\n// LOWSHELF biquad coefficient generator\n// Inputs:\n// in1 = frequency (Hz)\n// in2 = gain (dB)\n// in3 = Q (slope / quality)\n//\n// Outputs:\n// out1 = b0\n// out2 = b1\n// out3 = b2\n// out4 = a1\n// out5 = a2\n// -------------------------------\n\n// ensure safe values\nfreq = max(1, in1);\n//gainDB = in2;\r\ngain = in2;\r\nQ = max(0.0001, in3);\n\n// convert gain from dB → linear amplitude\n//A = pow(10, gainDB / 40);\nA = sqrt(gain); \n\n// core omega values\nw0 = twopi * freq / samplerate;\ncosw = cos(w0);\nsinw = sin(w0);\n\n// RBJ definition of \"alpha\" for shelving EQs:\n// alpha = sin(w0) / (2*Q) * sqrt( (A + 1/A) )\nalpha = sinw / (2 * Q) * sqrt(A + 1/A);\n\n// precompute helpers\ntwosqrtAalpha = 2 * sqrt(A) * alpha;\n\n// -------------------------------\n// raw (unnormalized) coefficients\n//\n// Reference: RBJ Audio EQ Cookbook — Low Shelf\n//\n// b0 = A[(A+1) - (A−1)cos(w0) + twosqrtAalpha]\n// b1 = 2A[(A−1) - (A+1)cos(w0)]\n// b2 = A[(A+1) - (A−1)cos(w0) - twosqrtAalpha]\n// a0 = (A+1) + (A−1)cos(w0) + twosqrtAalpha\n// a1 = -2[(A−1) + (A+1)cos(w0)]\n// a2 = (A+1) + (A−1)cos(w0) - twosqrtAalpha\n// -------------------------------\n\nAplus = A + 1;\nAminus = A - 1;\n\nb0 = A * ( Aplus - Aminus * cosw + twosqrtAalpha );\nb1 = 2 * A * ( Aminus - Aplus * cosw );\nb2 = A * ( Aplus - Aminus * cosw - twosqrtAalpha );\n\na0 = ( Aplus + Aminus * cosw + twosqrtAalpha );\na1 = -2 * ( Aminus + Aplus * cosw );\na2 = ( Aplus + Aminus * cosw - twosqrtAalpha );\n\n// -------------------------------\n// normalize coefficients (divide all by a0)\nb0 /= a0;\nb1 /= a0;\nb2 /= a0;\na1 /= a0;\na2 /= a0;\n\n// -------------------------------\n// outputs\nout1 = b0;\nout2 = b1;\nout3 = b2;\nout4 = a1;\nout5 = a2;",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-17",
|
||
"maxclass": "codebox",
|
||
"numinlets": 3,
|
||
"numoutlets": 5,
|
||
"outlettype": [ "", "", "", "", "" ],
|
||
"patching_rect": [ 50.0, 118.0, 356.0, 794.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-21",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 13.0, 269.0, 22.0 ],
|
||
"text": "in 1 @comment frequency @default 100 @min 0"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-22",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 218.5, 47.0, 225.0, 22.0 ],
|
||
"text": "in 2 @comment gain @default 1 @min 0"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-23",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 387.0, 76.0, 178.0, 22.0 ],
|
||
"text": "in 3 @default 1 @min 0.000001"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-24",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-25",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 303.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 4"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-26",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 387.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 5"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-27",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 134.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-28",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 218.0, 947.0, 35.0, 22.0 ],
|
||
"text": "out 3"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-24", 0 ],
|
||
"source": [ "obj-17", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-25", 0 ],
|
||
"source": [ "obj-17", 3 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-26", 0 ],
|
||
"source": [ "obj-17", 4 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-27", 0 ],
|
||
"source": [ "obj-17", 1 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-28", 0 ],
|
||
"source": [ "obj-17", 2 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 0 ],
|
||
"source": [ "obj-21", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 1 ],
|
||
"source": [ "obj-22", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-17", 2 ],
|
||
"source": [ "obj-23", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 78.0, 268.0, 127.5, 22.0 ],
|
||
"text": "gen @title filtercoeff"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-16",
|
||
"maxclass": "newobj",
|
||
"numinlets": 6,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patcher": {
|
||
"fileversion": 1,
|
||
"appversion": {
|
||
"major": 9,
|
||
"minor": 1,
|
||
"revision": 0,
|
||
"architecture": "x64",
|
||
"modernui": 1
|
||
},
|
||
"classnamespace": "dsp.gen",
|
||
"rect": [ 85.0, 281.0, 1000.0, 779.0 ],
|
||
"boxes": [
|
||
{
|
||
"box": {
|
||
"code": "// ----- state (delay memory) -----\nHistory x1(0); // x[n-1]\nHistory x2(0); // x[n-2]\nHistory y1(0); // y[n-1]\nHistory y2(0); // y[n-2]\n\n// ----- per-sample processing -----\ninSig = in1;\n\n// coefficients from inlets\nb0 = in2;\nb1 = in3;\nb2 = in4;\na1 = in5;\na2 = in6;\n\n// difference equation:\n// y[n] = b0*x[n] + b1*x[n-1] + b2*x[n-2] - a1*y[n-1] - a2*y[n-2]\ny = b0 * inSig\n + b1 * x1\n + b2 * x2\n - a1 * y1\n - a2 * y2;\n\n// update state for next sample\nx2 = x1;\nx1 = inSig;\ny2 = y1;\ny1 = y;\n\n// output\nout1 = y;\n",
|
||
"fontface": 0,
|
||
"fontname": "Menlo Regular",
|
||
"fontsize": 12.0,
|
||
"id": "obj-3",
|
||
"maxclass": "codebox",
|
||
"numinlets": 6,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 100.0, 555.0, 533.0 ]
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-9",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-10",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 157.2, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-11",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 264.4, 40.0, 28.0, 22.0 ],
|
||
"text": "in 3"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-12",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 371.6, 40.0, 28.0, 22.0 ],
|
||
"text": "in 4"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-13",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 478.8, 40.0, 28.0, 22.0 ],
|
||
"text": "in 5"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-14",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 586.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 6"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-15",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.0, 703.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 1 ],
|
||
"source": [ "obj-10", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 2 ],
|
||
"source": [ "obj-11", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 3 ],
|
||
"source": [ "obj-12", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 4 ],
|
||
"source": [ "obj-13", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 5 ],
|
||
"source": [ "obj-14", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-15", 0 ],
|
||
"source": [ "obj-3", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-3", 0 ],
|
||
"source": [ "obj-9", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 50.5, 312.0, 155.0, 22.0 ],
|
||
"text": "gen @title biquad"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-37",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 50.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-38",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 132.0, 40.0, 28.0, 22.0 ],
|
||
"text": "in 2"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-39",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 50.5, 394.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 0 ],
|
||
"source": [ "obj-1", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-39", 0 ],
|
||
"source": [ "obj-16", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-31", 0 ],
|
||
"source": [ "obj-25", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 5 ],
|
||
"source": [ "obj-29", 4 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 4 ],
|
||
"source": [ "obj-29", 3 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 3 ],
|
||
"source": [ "obj-29", 2 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 2 ],
|
||
"source": [ "obj-29", 1 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 1 ],
|
||
"source": [ "obj-29", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-36", 0 ],
|
||
"source": [ "obj-31", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 1 ],
|
||
"source": [ "obj-36", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-16", 0 ],
|
||
"source": [ "obj-37", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-25", 0 ],
|
||
"source": [ "obj-38", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-29", 2 ],
|
||
"source": [ "obj-4", 0 ]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"patching_rect": [ 53.0, 98.0, 233.0, 22.0 ],
|
||
"text": "gen @title 100Hz~"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-1",
|
||
"maxclass": "newobj",
|
||
"numinlets": 0,
|
||
"numoutlets": 1,
|
||
"outlettype": [ "" ],
|
||
"patching_rect": [ 53.0, 32.0, 28.0, 22.0 ],
|
||
"text": "in 1"
|
||
}
|
||
},
|
||
{
|
||
"box": {
|
||
"id": "obj-4",
|
||
"maxclass": "newobj",
|
||
"numinlets": 1,
|
||
"numoutlets": 0,
|
||
"patching_rect": [ 53.0, 823.0, 35.0, 22.0 ],
|
||
"text": "out 1"
|
||
}
|
||
}
|
||
],
|
||
"lines": [
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-40", 0 ],
|
||
"source": [ "obj-1", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-40", 1 ],
|
||
"source": [ "obj-18", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-54", 1 ],
|
||
"source": [ "obj-23", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-43", 1 ],
|
||
"source": [ "obj-30", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-44", 1 ],
|
||
"source": [ "obj-34", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-47", 1 ],
|
||
"source": [ "obj-38", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-54", 0 ],
|
||
"source": [ "obj-40", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-46", 1 ],
|
||
"source": [ "obj-41", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-45", 1 ],
|
||
"source": [ "obj-42", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-44", 0 ],
|
||
"source": [ "obj-43", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-45", 0 ],
|
||
"source": [ "obj-44", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-46", 0 ],
|
||
"source": [ "obj-45", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-47", 0 ],
|
||
"source": [ "obj-46", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-53", 0 ],
|
||
"source": [ "obj-47", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-4", 0 ],
|
||
"source": [ "obj-53", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-43", 0 ],
|
||
"source": [ "obj-54", 0 ]
|
||
}
|
||
},
|
||
{
|
||
"patchline": {
|
||
"destination": [ "obj-53", 1 ],
|
||
"source": [ "obj-69", 0 ]
|
||
}
|
||
}
|
||
],
|
||
"autosave": 0
|
||
}
|
||
} |