1 #include "DspUtilities.h"
2 #include "SurgeStorage.h"
3
correlated_noise(float lastval,float correlation)4 float correlated_noise(float lastval, float correlation)
5 {
6 float wf = correlation * 0.9;
7 float wfabs = fabs(wf);
8 float rand11 = (((float)rand() / (float)RAND_MAX) * 2.f - 1.f);
9 float randt = rand11 * (1 - wfabs) - wf * lastval;
10 return randt;
11 }
12
correlated_noise_mk2(float & lastval,float correlation)13 float correlated_noise_mk2(float &lastval, float correlation)
14 {
15 float wf = correlation * 0.9;
16 float wfabs = fabs(wf);
17 float m = 1.f / sqrt(1.f - wfabs);
18 float rand11 = (((float)rand() / (float)RAND_MAX) * 2.f - 1.f);
19 lastval = rand11 * (1 - wfabs) - wf * lastval;
20 return lastval * m;
21 }
22
drift_noise(float & lastval)23 float drift_noise(float &lastval)
24 {
25 const float filter = 0.00001f;
26 const float m = 1.f / sqrt(filter);
27 //__m128 mvec = _mm_rsqrt_ss(_mm_load_ss(&filter));
28 //_mm_store_ss(&m,mvec);
29
30 float rand11 = (((float)rand() / (float)RAND_MAX) * 2.f - 1.f);
31 lastval = lastval * (1.f - filter) + rand11 * filter;
32 return lastval * m;
33 }
34
correlated_noise_o2(float lastval,float & lastval2,float correlation)35 float correlated_noise_o2(float lastval, float &lastval2, float correlation)
36 {
37 float wf = correlation * 0.9;
38 float wfabs = fabs(wf);
39 float rand11 = (((float)rand() / (float)RAND_MAX) * 2.f - 1.f);
40 float randt = rand11 * (1 - wfabs) - wf * lastval2;
41 lastval2 = randt;
42 randt = lastval2 * (1 - wfabs) - wf * lastval;
43 return randt;
44 }
45
correlated_noise_o2mk2(float & lastval,float & lastval2,float correlation)46 float correlated_noise_o2mk2(float &lastval, float &lastval2, float correlation)
47 {
48 float wf = correlation;
49 float wfabs = fabs(wf) * 0.8f;
50 // wfabs = 1.f - (1.f-wfabs)*(1.f-wfabs);
51 wfabs = (2.f * wfabs - wfabs * wfabs);
52 if (wf > 0.f)
53 wf = wfabs;
54 else
55 wf = -wfabs;
56 #if MAC
57 float m = 1.f / sqrt(1.f - wfabs);
58 #else
59 float m = 1.f - wfabs;
60 // float m = 1.f/sqrt(1.f-wfabs);
61 __m128 m1 = _mm_rsqrt_ss(_mm_load_ss(&m));
62 _mm_store_ss(&m, m1);
63 // if (wf>0.f) m *= 1 + wf*8;
64 #endif
65 float rand11 = (((float)rand() / (float)RAND_MAX) * 2.f - 1.f);
66 lastval2 = rand11 * (1 - wfabs) - wf * lastval2;
67 lastval = lastval2 * (1 - wfabs) - wf * lastval;
68 return lastval * m;
69 }
70
correlated_noise_o2mk2_suppliedrng(float & lastval,float & lastval2,float correlation,std::function<float ()> & urng)71 float correlated_noise_o2mk2_suppliedrng(float &lastval, float &lastval2, float correlation,
72 std::function<float()> &urng)
73 {
74 float wf = correlation;
75 float wfabs = fabs(wf) * 0.8f;
76 // wfabs = 1.f - (1.f-wfabs)*(1.f-wfabs);
77 wfabs = (2.f * wfabs - wfabs * wfabs);
78 if (wf > 0.f)
79 wf = wfabs;
80 else
81 wf = -wfabs;
82 #if MAC
83 float m = 1.f / sqrt(1.f - wfabs);
84 #else
85 float m = 1.f - wfabs;
86 // float m = 1.f/sqrt(1.f-wfabs);
87 __m128 m1 = _mm_rsqrt_ss(_mm_load_ss(&m));
88 _mm_store_ss(&m, m1);
89 // if (wf>0.f) m *= 1 + wf*8;
90 #endif
91 float rand11 = urng();
92 lastval2 = rand11 * (1 - wfabs) - wf * lastval2;
93 lastval = lastval2 * (1 - wfabs) - wf * lastval;
94 return lastval * m;
95 }
96
correlated_noise_o2mk2_storagerng(float & lastval,float & lastval2,float correlation,SurgeStorage * s)97 float correlated_noise_o2mk2_storagerng(float &lastval, float &lastval2, float correlation,
98 SurgeStorage *s)
99 {
100 float wf = correlation;
101 float wfabs = fabs(wf) * 0.8f;
102 // wfabs = 1.f - (1.f-wfabs)*(1.f-wfabs);
103 wfabs = (2.f * wfabs - wfabs * wfabs);
104 if (wf > 0.f)
105 wf = wfabs;
106 else
107 wf = -wfabs;
108 #if MAC
109 float m = 1.f / sqrt(1.f - wfabs);
110 #else
111 float m = 1.f - wfabs;
112 // float m = 1.f/sqrt(1.f-wfabs);
113 __m128 m1 = _mm_rsqrt_ss(_mm_load_ss(&m));
114 _mm_store_ss(&m, m1);
115 // if (wf>0.f) m *= 1 + wf*8;
116 #endif
117 float rand11 = s->rand_pm1();
118 lastval2 = rand11 * (1 - wfabs) - wf * lastval2;
119 lastval = lastval2 * (1 - wfabs) - wf * lastval;
120 return lastval * m;
121 }
122