-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvoice.h
More file actions
156 lines (130 loc) · 3.94 KB
/
voice.h
File metadata and controls
156 lines (130 loc) · 3.94 KB
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
//
// voice.h
//
#ifndef _VOICE_H_
#define _VOICE_H_
#include <circle/types.h>
#include "oscillator.h"
#include "envelope.h"
#include "filter.h"
#include "lfo.h"
#include "noise.h"
class CVoice
{
public:
CVoice(unsigned sampleRate = 48000);
~CVoice() = default;
void InitVoice(unsigned sampleRate);
void NoteOn(unsigned note, unsigned velocity);
void SetNote(unsigned note, unsigned velocity);
void NoteOff();
void NoteSlowKill();
void NoteReset();
// Oscillator parameters
void SetCoarse(unsigned osc, float coarse);
void SetFine(unsigned osc, float fine){ m_fine[osc] = fine; }
void SetWaveformSaw(unsigned osc, bool wave);
void SetWaveformSquare(unsigned osc, bool wave);
void SetWaveformTri(bool wave);
void SetPulseWidth(unsigned osc, float pw){ m_pulseWidth[osc] = pw; }
void SetOscVol(unsigned osc, float vol){ m_oscVol[osc] = vol; }
void SetOsc2KbdTrk(unsigned kbd){ m_osc2Kbd = kbd; }
void SetOsc2LowFreq(unsigned low){ m_osc2Low = low; }
void SetOsc1Sync(bool sync){ m_osc1Sync = sync; }
// Filter Parameters
void SetCutoff(float freq);
void SetResonance(float res);
void SetFilterEnvAmt(float amt){ m_filEnvAmt = amt; }
void SetFilterKbdTrk(float amt){ m_filKbdTrkAmt = amt; }
// Lfo Parameters
void SetLfoFreq(float freq);
void SetLfoWaveSaw(bool wave);
void SetLfoWaveSquare(bool wave);
void SetLfoWaveTri(bool wave);
void SetLfoFm(unsigned osc, float fm){ m_lfoFm[osc] = fm; }
void SetPulseWidthModulation(unsigned osc, float pwm){ m_lfoPwm[osc] = pwm; }
void SetLfoFilter(float fil){ m_lfoFilter = fil; }
void SetLfoAmp(float amp){ m_lfoAmp = amp; }
void SetLfoMix(float mix){ m_lfoMix = mix; }
// Polymod Parameters
void SetPolyModFreq(unsigned polyFreq){ m_polyModFreq = polyFreq; }
void SetPolyModPw(unsigned polyPw){ m_polyModPw = polyPw; }
void SetPolyModFil(unsigned polyFil){ m_polyModFil = polyFil; }
void SetPolyModOsc2(float polyOsc2){ m_polyModOsc2 = polyOsc2; }
void SetPolyModFilEnv(float polyFilEnv){ m_polyModFilEnv = polyFilEnv; }
// Envelope Parameters
void SetEnv(unsigned param, float value);
// Noise Parameters
void SetNoiseVol(float n){ m_noiseVol = n; }
// General Parameters
void SetModWheel(float mod){ m_modWheel = mod; }
void SetVolume(float vol){ m_volume = vol; }
void SetGain(float gain);
void SetGlideTime(float time);
void SetVelocityToVolume(float scale){ m_velocityAmpScale = scale; }
void SetVelocityToFilter(float scale){ m_velocityFilterScale = scale; }
bool IsActive() const;
bool IsReleased();
bool HasKey(unsigned note) const;
float GetVolumeEnvAmplitude(void) { return m_envVol; }
unsigned GetNote(void) { return m_note; }
float Render(void);
private:
float m_sampleRate;
bool m_active;
unsigned m_note;
float m_velocity;
bool m_released;
// Objects
COscillator m_osc[2];
CEnvelope m_envelope[2];
CLFO m_lfo;
CNoise m_noise;
CFilter m_filter;
// Oscillator
float m_coarse[2];
float m_fine[2];
bool m_waveformSaw[2];
bool m_waveformSquare[2];
bool m_waveformTri;
float m_pulseWidth[2];
float m_oscVol[2];
unsigned m_osc2Kbd;
unsigned m_osc2Low;
bool m_osc1Sync;
// Filter
float m_filCutoff;
float m_filRes;
float m_filEnvAmt;
float m_filKbdTrk;
float m_filKbdTrkAmt;
// Lfo
float m_lfoFreq;
bool m_lfoWaveSaw;
bool m_lfoWaveSquare;
bool m_lfoWaveTri;
float m_lfoMix;
float m_lfoFm[2];
float m_lfoPwm[2];
float m_lfoFilter;
float m_lfoAmp;
// Polymod
unsigned m_polyModFreq;
unsigned m_polyModPw;
unsigned m_polyModFil;
float m_polyModOsc2;
float m_polyModFilEnv;
// Envelope
float m_envVol;
// Noise
float m_noiseVol;
// General
float m_modWheel;
float m_volume;
float m_gain;
float m_velocityToAmp;
float m_velocityToFilter;
float m_velocityAmpScale;
float m_velocityFilterScale;
};
#endif