MCPcopy Create free account
hub / github.com/LabSound/LabSound / ApplyWindowFunctionInplace

Function ApplyWindowFunctionInplace

include/LabSound/core/WindowFunctions.h:96–261  ·  view source on GitHub ↗

Reference https://github.com/spurious/snd-mirror/blob/master/clm.c

Source from the content-addressed store, hash-verified

94
95// Reference https://github.com/spurious/snd-mirror/blob/master/clm.c
96inline void ApplyWindowFunctionInplace(const WindowFunction type, float * buffer, const int window_size)
97{
98 const float max_index = static_cast<float>(window_size) - 1.f;
99
100 switch (type)
101 {
102 case WindowFunction::rectangle:
103 {
104 for (int i = 0; i < window_size; ++i)
105 {
106 buffer[i] = 1.f; // or * 0.5f?
107 }
108 }
109 break;
110
111 case WindowFunction::cosine:
112 {
113 for (int i = 0; i < window_size; ++i)
114 {
115 buffer[i] *= std::sin((static_cast<float>(LAB_PI) * i) / max_index);
116 }
117 }
118 break;
119
120 case WindowFunction::hann:
121 {
122 for (int i = 0; i < window_size; ++i)
123 {
124 buffer[i] *= detail::gen_cosine_1(max_index, i, 0.5f, 0.5f);
125 }
126 }
127 break;
128
129 case WindowFunction::hamming:
130 {
131 for (int i = 0; i < window_size; ++i)
132 {
133 buffer[i] *= detail::gen_cosine_1(max_index, i, 0.54f, 0.46f);
134 }
135 }
136 break;
137
138 case WindowFunction::blackman:
139 {
140 for (int i = 0; i < window_size; ++i)
141 {
142 buffer[i] *= detail::gen_cosine_2(max_index, i, 0.42f, 0.50f, 0.08f);
143 }
144 }
145 break;
146
147 case WindowFunction::nutall:
148 {
149 for (int i = 0; i < window_size; ++i)
150 {
151 buffer[i] *= detail::gen_cosine_3(max_index, i, 0.355768f, 0.487396f, 0.144232f, 0.012604f);
152 }
153 }

Callers 3

spectralMagMethod · 0.85
setGrainSourceMethod · 0.85
doFFTAnalysisMethod · 0.85

Calls 6

gen_cosine_1Function · 0.85
gen_cosine_2Function · 0.85
gen_cosine_3Function · 0.85
gaussianFunction · 0.85
gen_cosine_4Function · 0.85
sincFunction · 0.85

Tested by 1

spectralMagMethod · 0.68