-
Notifications
You must be signed in to change notification settings - Fork 0
/
FreqSpectrum.cpp
39 lines (37 loc) · 1.26 KB
/
FreqSpectrum.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "FreqSpectrum.h"
void FreqSpectrum::drawRect(float x, float y, float w, float h, float r, float g, float b) {
glBegin(GL_TRIANGLE_STRIP);
glColor3f(r, g, b);
glVertex3f(x, y, 0.f);
glColor3f(r, g, b);
glVertex3f(x + w, y, 0.f);
glColor3f(r, g, b);
glVertex3f(x, y + h, 0.f);
glColor3f(r, g, b);
glVertex3f(x + w, y + h, 0.f);
glEnd();
}
void FreqSpectrum::init() {
FreqVisualizer::init();
mMaxMag = 0;
}
void FreqSpectrum::draw(unsigned *mags, int count) {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.f, 1.f, -1.f, 1.f, 1.f, -1.f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
unsigned int freqs_per_col = count / COL_COUNT;
for (unsigned int i = 0; i < COL_COUNT; ++i) {
mHeights[i] = 0;
for (unsigned int j = 0; j < freqs_per_col; ++j) {
mHeights[i] += mags[(i * freqs_per_col) + j ];
}
mHeights[i] /= freqs_per_col;
if (mHeights[i] > mMaxMag) mMaxMag = mHeights[i];
mHeights[i] /= mMaxMag;
drawRect((float)i * (1.f / (float)COL_COUNT),
-mHeights[i] , (1.f / (float)COL_COUNT), mHeights[i] * 2.f,
mHeights[i], i / (float)COL_COUNT, 0.5f);
}
}