-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathPolyBLEP.h
109 lines (73 loc) · 2.61 KB
/
PolyBLEP.h
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#ifndef POLY_BLEP_H_INCLUDED
#define POLY_BLEP_H_INCLUDED
/*
PolyBLEP Waveform generator ported from the Jesusonic code by Tale
http://www.taletn.com/reaper/mono_synth/
Permission has been granted to release this port under the WDL/IPlug license:
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
class PolyBLEP {
public:
enum Waveform {
SINE,
COSINE,
TRIANGLE,
SQUARE,
RECTANGLE,
SAWTOOTH,
RAMP,
MODIFIED_TRIANGLE,
MODIFIED_SQUARE,
HALF_WAVE_RECTIFIED_SINE,
FULL_WAVE_RECTIFIED_SINE,
TRIANGULAR_PULSE,
TRAPEZOID_FIXED,
TRAPEZOID_VARIABLE
};
PolyBLEP(double sampleRate, Waveform waveform = SINE, double initialFrequency = 440.0);
virtual ~PolyBLEP();
void setFrequency(double freqInHz);
void setSampleRate(double sampleRate);
void setWaveform(Waveform waveform);
void setPulseWidth(double pw);
double get() const;
void inc();
double getAndInc();
double getFreqInHz() const;
void sync(double phase);
protected:
Waveform waveform;
double sampleRate;
double freqInSecondsPerSample;
double amplitude; // Frequency dependent gain [0.0..1.0]
double pulseWidth; // [0.0..1.0]
double t; // The current phase [0.0..1.0) of the oscillator.
void setdt(double time);
double sin() const;
double cos() const;
double half() const;
double full() const;
double tri() const;
double tri2() const;
double trip() const;
double trap() const;
double trap2() const;
double sqr() const;
double sqr2() const;
double rect() const;
double saw() const;
double ramp() const;
};
#endif