⠀⠀⠀⠀ⵙᴥⵙⓄⵙ✤ⵙᗩⵙᴥⵙᗱᗴⵙИNⵙᗱᗴⵙᕤᕦⵙᗱᗴⵙᔓᔕⵙꖴⵙⓄⵙИNⵙ◯ⵙ✤ⵙᗱᗴⵙᗯⵙᙁⵙᗱᗴⵙᗯⵙ◯ⵙИNⵙᗩⵙꖴⵙᔓᔕⵙᑎⵙᗩⵙᕤᕦⵙ⠀⠀⠀⠀◯⠀⠀⠀⠀ⵙ⠀⠀⠀⠀◯⠀⠀⠀⠀ⵙᕤᕦⵙᗩⵙᑎⵙᔓᔕⵙꖴⵙᗩⵙИNⵙ◯ⵙᗯⵙᗱᗴⵙᙁⵙᗯⵙᗱᗴⵙ✤ⵙ◯ⵙИNⵙⓄⵙꖴⵙᔓᔕⵙᗱᗴⵙᕤᕦⵙᗱᗴⵙИNⵙᗱᗴⵙᴥⵙᗩⵙ✤ⵙⓄⵙᴥⵙ⠀⠀⠀⠀
This commit is contained in:
parent
bad992cc81
commit
f8ee336335
|
@ -0,0 +1,159 @@
|
|||
desc:O____ROTARENEG_ESION_TEWLEW_NAISUAG____O____GAUSIAN_WELWET_NOISE_GENERATOR____O
|
||||
//tags: analysis generator synthesis
|
||||
//author: SCHWA
|
||||
|
||||
// Generator choices are listed in rough order of fanciness and cost.
|
||||
|
||||
slider1:-16<-120,6,0.1>Noise dB (RMS)
|
||||
slider2:0.5<0,1,0.01>Wet Mix
|
||||
slider3:1<0,3,1{Central Limit Approximation,Box-Muller,Ziggurat (not implemented yet),Inverse Transform}>Gaussian Generator
|
||||
slider4:0<-1,1>Noise Mean (should be ~0)
|
||||
slider5:0<0,2>Noise Standard Deviation (should be ~1)
|
||||
|
||||
in_pin:left input
|
||||
in_pin:right input
|
||||
out_pin:left output
|
||||
out_pin:right output
|
||||
|
||||
@init
|
||||
|
||||
AMP_DB = 20.0 / log(10);
|
||||
|
||||
CENTRAL_LIMIT = 0;
|
||||
BOX_MULLER = 1;
|
||||
ZIGGURAT = 2;
|
||||
INV_TRANSFORM = 3;
|
||||
|
||||
@slider
|
||||
|
||||
noise_level = exp(slider1 / AMP_DB);
|
||||
|
||||
(slider3 == CENTRAL_LIMIT) ? (
|
||||
N_DEV = 12;
|
||||
)
|
||||
:
|
||||
(slider3 == INV_TRANSFORM) ? (
|
||||
A1 = -39.69683028665376;
|
||||
A2 = 220.9460984245205;
|
||||
A3 = -275.9285104469687;
|
||||
A4 = 138.3577518672690;
|
||||
A5 = -30.66479806614716;
|
||||
A6 = 2.506628277459239;
|
||||
|
||||
B1 = -54.47609879822406;
|
||||
B2 = 161.5858368580409;
|
||||
B3 = -155.6989798598866;
|
||||
B4 = 66.80131188771972;
|
||||
B5 = -13.28068155288572;
|
||||
|
||||
C1 = -0.007784894002430293;
|
||||
C2 = -0.3223964580411365;
|
||||
C3 = -2.400758277161838;
|
||||
C4 = -2.549732539343734;
|
||||
C5 = 4.374664141464968;
|
||||
C6 = 2.938163982698783;
|
||||
|
||||
D1 = 0.007784695709041462;
|
||||
D2 = 0.3224671290700398;
|
||||
D3 = 2.445134137142996;
|
||||
D4 = 3.754408661907416;
|
||||
|
||||
P_LO = 0.02425;
|
||||
P_HI = 1.0 - P_LO;
|
||||
);
|
||||
|
||||
i = sum = sum2 = 0;
|
||||
|
||||
@sample
|
||||
|
||||
z0 = z1 = 0;
|
||||
|
||||
(slider3 == CENTRAL_LIMIT) ? (
|
||||
|
||||
// Quick & dirty.
|
||||
loop (N_DEV,
|
||||
z0 += rand(1);
|
||||
z1 += rand(1);
|
||||
);
|
||||
z0 -= N_DEV / 2.0;
|
||||
z1 -= N_DEV / 2.0;
|
||||
)
|
||||
:
|
||||
(slider3 == BOX_MULLER) ? (
|
||||
|
||||
// Conveniently a stereo twofer.
|
||||
w = 0;
|
||||
while (
|
||||
z0 = 2.0 * rand(1) - 1.0;
|
||||
z1 = 2.0 * rand(1) - 1.0;
|
||||
w = z0 * z0 + z1 * z1;
|
||||
w >= 1.0;
|
||||
);
|
||||
w = sqrt(-2.0 * log(w) / w);
|
||||
z0 *= w;
|
||||
z1 *= w;
|
||||
)
|
||||
:
|
||||
(slider3 == INV_TRANSFORM) ? (
|
||||
|
||||
r0 = rand(1);
|
||||
r1 = rand(1);
|
||||
|
||||
(r0 < P_LO) ? (
|
||||
q = sqrt(-2.0 * log(r0));
|
||||
z0 = ((((C1 * q + C2) * q + C3) * q + C4) * q + C5) * q + C6;
|
||||
z0 /= (((D1 * q + D2) * q + D3) * q + D4) * q + 1.0;
|
||||
)
|
||||
:
|
||||
(r0 < P_HI) ? (
|
||||
q = r0 - 0.5;
|
||||
r = q * q;
|
||||
z0 = (((((A1 * r + A2) * r + A3) * r + A4) * r + A5) * r + A6) * q;
|
||||
z0 /= ((((B1 * r + B2) * r + B3) * r + B4) * r + B5) * r + 1.0;
|
||||
)
|
||||
:
|
||||
(
|
||||
q = sqrt(-2.0 * log(1.0 - r0));
|
||||
z0 = -(((((C1 * q + C2) * q + C3) * q + C4) * q + C5) * q + C6);
|
||||
z0 /= (((D1 * q + D2) * q + D3) * q + D4) * q + 1.0;
|
||||
);
|
||||
|
||||
(r1 < P_LO) ? (
|
||||
q = sqrt(-2.0 * log(r1));
|
||||
z1 = ((((C1 * q + C2) * q + C3) * q + C4) * q + C5) * q + C6;
|
||||
z1 /= (((D1 * q + D2) * q + D3) * q + D4) * q + 1.0;
|
||||
)
|
||||
:
|
||||
(r1 < P_HI) ? (
|
||||
q = r1 - 0.5;
|
||||
r = q * q;
|
||||
z1 = (((((A1 * r + A2) * r + A3) * r + A4) * r + A5) * r + A6) * q;
|
||||
z1 /= ((((B1 * r + B2) * r + B3) * r + B4) * r + B5) * r + 1.0;
|
||||
)
|
||||
:
|
||||
(
|
||||
q = sqrt(-2.0 * log(1.0 - r0));
|
||||
z1 = -(((((C1 * q + C2) * q + C3) * q + C4) * q + C5) * q + C6);
|
||||
z1 /= (((D1 * q + D2) * q + D3) * q + D4) * q + 1.0;
|
||||
);
|
||||
);
|
||||
|
||||
spl0 = ((FLOOR(spl0 * (1.0 - slider2) + z0 * noise_level * slider2))+.5)/6;
|
||||
spl1 = ((FLOOR(spl1 * (1.0 - slider2) + z1 * noise_level * slider2))+.5)/6;
|
||||
//spl0 = spl0 * (1.0 - slider2) + z0 * noise_level * slider2;
|
||||
//spl1 = spl1 * (1.0 - slider2) + z1 * noise_level * slider2;
|
||||
|
||||
sum += z0;
|
||||
sum2 += z0 * z0;
|
||||
|
||||
i += 1;
|
||||
(i == srate) ? (
|
||||
mean = sum / srate;
|
||||
stdev = sqrt(sum2 / srate - mean * mean);
|
||||
slider4 = mean;
|
||||
slider5 = stdev;
|
||||
sliderchange(2^4 + 2^5);
|
||||
i = sum = sum2 = 0;
|
||||
);
|
||||
|
||||
|
Loading…
Reference in New Issue