-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathGenerators.hpp
57 lines (49 loc) · 1.39 KB
/
Generators.hpp
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*******************************************************************************
* Signal generators for testing.
* ****************************************************************************/
#pragma once
#include <cmath>
template<typename real>
class Generators {
private:
real SR = 48000.0;
real T = 1.0 / SR;
real freq = 1000.0;
real phasor = .0;
real incr = freq / SR;
real twoPi = 2.0 * M_PI;
int32_t state = 0;
int32_t seed = 12345;
const int32_t MAX = 2147483648 - 1;
public:
void SetSR(real _SR);
void SetFreq(real _freq);
void ProcessSine(real* vec, int vecLen);
void ProcessNoise(real* vec, int vecLen);
};
template<typename real>
void Generators<real>::SetSR(real _SR) {
SR = _SR;
T = 1.0 / SR;
incr = freq / SR;
}
template<typename real>
void Generators<real>::SetFreq(real _freq) {
freq = _freq;
incr = freq / SR;
}
template<typename real>
void Generators<real>::ProcessSine(real* vec, int vecLen) {
for (int i = 0; i < vecLen; i++) {
phasor += incr;
phasor = phasor - std::floor(phasor);
vec[i] = std::sin(twoPi * phasor);
}
}
template<typename real>
void Generators<real>::ProcessNoise(real* vec, int vecLen) {
for (int i = 0; i < vecLen; i++) {
state = state * 1103515245 + seed;
vec[i] = state / real(MAX);
}
}