-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSynthParams.h
78 lines (64 loc) · 1.43 KB
/
SynthParams.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
#pragma once
#define LFO_MODE_NAMES "volume", "pitch"
enum class LFOMode
{
LFO_VOLUME,
LFO_PITCH
};
class OscParams
{
public:
void SetWavetableAndWaveType(Wavetable* wt, WaveType waveType)
{
m_wavetable = wt;
m_waveType = waveType;
}
public:
bool m_bActive = false;
double m_dGain = 0.0;
double m_dPan = 0.0;
double m_dFreqMultiplier = 1.0;
WaveType m_waveType;
Wavetable* m_wavetable;
int m_iUnisonAmount = 0;
double m_dUnisonDetune = 0.0;
double m_unisonDetuneFactors[MAX_UNISON] = { 0.0, 1.0, -1.0, 0.707 };
double m_unisonPanValues[MAX_UNISON] = { 0.0, -1.0, 1.0, -0.5 };
int m_unisonPhaseOffsets[MAX_UNISON] = { 0, 13, -13, 37 };
};
class LFOParams
{
public:
LFOMode m_mode = LFOMode::LFO_VOLUME;
bool m_bEnabled = false;
double m_dAmplitude = 0.0;
double m_dFreq = 0.0;
};
class SynthParams
{
public:
SynthParams()
{
for (int i = 0; i < NUM_OSCILLATORS; i++)
{
oscParams[i].reset(new OscParams);
}
for (int i = 0; i < NUM_LFO; i++)
{
lfoParams[i].reset(new LFOParams);
}
}
std::shared_ptr<OscParams> GetOscParams(int oscNum)
{
return oscParams[oscNum];
}
std::shared_ptr<LFOParams> GetLFOParams(int lfoNum)
{
return lfoParams[lfoNum];
}
public:
const std::unique_ptr<Envelope> ampEnv = std::make_unique<Envelope>();
private:
std::shared_ptr<OscParams> oscParams[NUM_OSCILLATORS];
std::shared_ptr<LFOParams> lfoParams[NUM_LFO];
};