|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+desc:O____ROTARENEG_ESION_TEWLEW_NAISUAG____O____GAUSIAN_WELWET_NOISE_GENERATOR____O
|
|
|
2
|
+//tags: analysis generator synthesis
|
|
|
3
|
+//author: SCHWA
|
|
|
4
|
+
|
|
|
5
|
+// Generator choices are listed in rough order of fanciness and cost.
|
|
|
6
|
+
|
|
|
7
|
+slider1:-16<-120,6,0.1>Noise dB (RMS)
|
|
|
8
|
+slider2:0.5<0,1,0.01>Wet Mix
|
|
|
9
|
+slider3:1<0,3,1{Central Limit Approximation,Box-Muller,Ziggurat (not implemented yet),Inverse Transform}>Gaussian Generator
|
|
|
10
|
+slider4:0<-1,1>Noise Mean (should be ~0)
|
|
|
11
|
+slider5:0<0,2>Noise Standard Deviation (should be ~1)
|
|
|
12
|
+
|
|
|
13
|
+in_pin:left input
|
|
|
14
|
+in_pin:right input
|
|
|
15
|
+out_pin:left output
|
|
|
16
|
+out_pin:right output
|
|
|
17
|
+
|
|
|
18
|
+@init
|
|
|
19
|
+
|
|
|
20
|
+AMP_DB = 20.0 / log(10);
|
|
|
21
|
+
|
|
|
22
|
+CENTRAL_LIMIT = 0;
|
|
|
23
|
+BOX_MULLER = 1;
|
|
|
24
|
+ZIGGURAT = 2;
|
|
|
25
|
+INV_TRANSFORM = 3;
|
|
|
26
|
+
|
|
|
27
|
+@slider
|
|
|
28
|
+
|
|
|
29
|
+noise_level = exp(slider1 / AMP_DB);
|
|
|
30
|
+
|
|
|
31
|
+(slider3 == CENTRAL_LIMIT) ? (
|
|
|
32
|
+ N_DEV = 12;
|
|
|
33
|
+)
|
|
|
34
|
+:
|
|
|
35
|
+(slider3 == INV_TRANSFORM) ? (
|
|
|
36
|
+ A1 = -39.69683028665376;
|
|
|
37
|
+ A2 = 220.9460984245205;
|
|
|
38
|
+ A3 = -275.9285104469687;
|
|
|
39
|
+ A4 = 138.3577518672690;
|
|
|
40
|
+ A5 = -30.66479806614716;
|
|
|
41
|
+ A6 = 2.506628277459239;
|
|
|
42
|
+
|
|
|
43
|
+ B1 = -54.47609879822406;
|
|
|
44
|
+ B2 = 161.5858368580409;
|
|
|
45
|
+ B3 = -155.6989798598866;
|
|
|
46
|
+ B4 = 66.80131188771972;
|
|
|
47
|
+ B5 = -13.28068155288572;
|
|
|
48
|
+
|
|
|
49
|
+ C1 = -0.007784894002430293;
|
|
|
50
|
+ C2 = -0.3223964580411365;
|
|
|
51
|
+ C3 = -2.400758277161838;
|
|
|
52
|
+ C4 = -2.549732539343734;
|
|
|
53
|
+ C5 = 4.374664141464968;
|
|
|
54
|
+ C6 = 2.938163982698783;
|
|
|
55
|
+
|
|
|
56
|
+ D1 = 0.007784695709041462;
|
|
|
57
|
+ D2 = 0.3224671290700398;
|
|
|
58
|
+ D3 = 2.445134137142996;
|
|
|
59
|
+ D4 = 3.754408661907416;
|
|
|
60
|
+
|
|
|
61
|
+ P_LO = 0.02425;
|
|
|
62
|
+ P_HI = 1.0 - P_LO;
|
|
|
63
|
+);
|
|
|
64
|
+
|
|
|
65
|
+i = sum = sum2 = 0;
|
|
|
66
|
+
|
|
|
67
|
+@sample
|
|
|
68
|
+
|
|
|
69
|
+z0 = z1 = 0;
|
|
|
70
|
+
|
|
|
71
|
+(slider3 == CENTRAL_LIMIT) ? (
|
|
|
72
|
+
|
|
|
73
|
+ // Quick & dirty.
|
|
|
74
|
+ loop (N_DEV,
|
|
|
75
|
+ z0 += rand(1);
|
|
|
76
|
+ z1 += rand(1);
|
|
|
77
|
+ );
|
|
|
78
|
+ z0 -= N_DEV / 2.0;
|
|
|
79
|
+ z1 -= N_DEV / 2.0;
|
|
|
80
|
+)
|
|
|
81
|
+:
|
|
|
82
|
+(slider3 == BOX_MULLER) ? (
|
|
|
83
|
+
|
|
|
84
|
+ // Conveniently a stereo twofer.
|
|
|
85
|
+ w = 0;
|
|
|
86
|
+ while (
|
|
|
87
|
+ z0 = 2.0 * rand(1) - 1.0;
|
|
|
88
|
+ z1 = 2.0 * rand(1) - 1.0;
|
|
|
89
|
+ w = z0 * z0 + z1 * z1;
|
|
|
90
|
+ w >= 1.0;
|
|
|
91
|
+ );
|
|
|
92
|
+ w = sqrt(-2.0 * log(w) / w);
|
|
|
93
|
+ z0 *= w;
|
|
|
94
|
+ z1 *= w;
|
|
|
95
|
+)
|
|
|
96
|
+:
|
|
|
97
|
+(slider3 == INV_TRANSFORM) ? (
|
|
|
98
|
+
|
|
|
99
|
+ r0 = rand(1);
|
|
|
100
|
+ r1 = rand(1);
|
|
|
101
|
+
|
|
|
102
|
+ (r0 < P_LO) ? (
|
|
|
103
|
+ q = sqrt(-2.0 * log(r0));
|
|
|
104
|
+ z0 = ((((C1 * q + C2) * q + C3) * q + C4) * q + C5) * q + C6;
|
|
|
105
|
+ z0 /= (((D1 * q + D2) * q + D3) * q + D4) * q + 1.0;
|
|
|
106
|
+ )
|
|
|
107
|
+ :
|
|
|
108
|
+ (r0 < P_HI) ? (
|
|
|
109
|
+ q = r0 - 0.5;
|
|
|
110
|
+ r = q * q;
|
|
|
111
|
+ z0 = (((((A1 * r + A2) * r + A3) * r + A4) * r + A5) * r + A6) * q;
|
|
|
112
|
+ z0 /= ((((B1 * r + B2) * r + B3) * r + B4) * r + B5) * r + 1.0;
|
|
|
113
|
+ )
|
|
|
114
|
+ :
|
|
|
115
|
+ (
|
|
|
116
|
+ q = sqrt(-2.0 * log(1.0 - r0));
|
|
|
117
|
+ z0 = -(((((C1 * q + C2) * q + C3) * q + C4) * q + C5) * q + C6);
|
|
|
118
|
+ z0 /= (((D1 * q + D2) * q + D3) * q + D4) * q + 1.0;
|
|
|
119
|
+ );
|
|
|
120
|
+
|
|
|
121
|
+ (r1 < P_LO) ? (
|
|
|
122
|
+ q = sqrt(-2.0 * log(r1));
|
|
|
123
|
+ z1 = ((((C1 * q + C2) * q + C3) * q + C4) * q + C5) * q + C6;
|
|
|
124
|
+ z1 /= (((D1 * q + D2) * q + D3) * q + D4) * q + 1.0;
|
|
|
125
|
+ )
|
|
|
126
|
+ :
|
|
|
127
|
+ (r1 < P_HI) ? (
|
|
|
128
|
+ q = r1 - 0.5;
|
|
|
129
|
+ r = q * q;
|
|
|
130
|
+ z1 = (((((A1 * r + A2) * r + A3) * r + A4) * r + A5) * r + A6) * q;
|
|
|
131
|
+ z1 /= ((((B1 * r + B2) * r + B3) * r + B4) * r + B5) * r + 1.0;
|
|
|
132
|
+ )
|
|
|
133
|
+ :
|
|
|
134
|
+ (
|
|
|
135
|
+ q = sqrt(-2.0 * log(1.0 - r0));
|
|
|
136
|
+ z1 = -(((((C1 * q + C2) * q + C3) * q + C4) * q + C5) * q + C6);
|
|
|
137
|
+ z1 /= (((D1 * q + D2) * q + D3) * q + D4) * q + 1.0;
|
|
|
138
|
+ );
|
|
|
139
|
+);
|
|
|
140
|
+
|
|
|
141
|
+spl0 = ((FLOOR(spl0 * (1.0 - slider2) + z0 * noise_level * slider2))+.5)/6;
|
|
|
142
|
+spl1 = ((FLOOR(spl1 * (1.0 - slider2) + z1 * noise_level * slider2))+.5)/6;
|
|
|
143
|
+//spl0 = spl0 * (1.0 - slider2) + z0 * noise_level * slider2;
|
|
|
144
|
+//spl1 = spl1 * (1.0 - slider2) + z1 * noise_level * slider2;
|
|
|
145
|
+
|
|
|
146
|
+sum += z0;
|
|
|
147
|
+sum2 += z0 * z0;
|
|
|
148
|
+
|
|
|
149
|
+i += 1;
|
|
|
150
|
+(i == srate) ? (
|
|
|
151
|
+ mean = sum / srate;
|
|
|
152
|
+ stdev = sqrt(sum2 / srate - mean * mean);
|
|
|
153
|
+ slider4 = mean;
|
|
|
154
|
+ slider5 = stdev;
|
|
|
155
|
+ sliderchange(2^4 + 2^5);
|
|
|
156
|
+ i = sum = sum2 = 0;
|
|
|
157
|
+);
|
|
|
158
|
+
|
|
|
159
|
+
|