-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy patha_filter.h
More file actions
150 lines (114 loc) · 3.46 KB
/
a_filter.h
File metadata and controls
150 lines (114 loc) · 3.46 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
#ifndef A_FILTER_HDR
#define A_FILTER_HDR
#include "u_vector.h"
#include "m_vec.h"
#include "a_fader.h"
namespace a {
struct Source;
struct FilterInstance {
virtual void filter(float *buffer, size_t samples, size_t channels, float sampleRate, float time) = 0;
virtual void setFilterParam(int attrib, float value);
virtual void fadeFilterParam(int attrib, float from, float to, float time, float startTime);
virtual void oscFilterParam(int attrib, float from, float to, float time, float startTime);
virtual ~FilterInstance();
};
struct Filter {
virtual FilterInstance *create() = 0;
virtual ~Filter();
};
struct EchoFilter;
struct EchoFilterInstance final : FilterInstance {
virtual void filter(float *buffer, size_t samples, size_t channels, float sampleRate, float streamTime) final;
virtual ~EchoFilterInstance() final;
EchoFilterInstance(EchoFilter *parent);
private:
u::vector<float> m_buffer;
EchoFilter *m_parent;
size_t m_offset;
};
struct EchoFilter final : Filter {
virtual FilterInstance *create() final;
EchoFilter();
void setParams(float delay, float decay = 0.7f, float filter = 0.0f);
private:
friend struct EchoFilterInstance;
float m_delay;
float m_decay;
float m_filter;
};
struct BQRFilter;
struct BQRFilterInstance final : FilterInstance {
BQRFilterInstance(BQRFilter *parent);
virtual void filter(float *buffer, size_t samples, size_t channels, float sampleRate, float time) final;
virtual void setFilterParam(int attrib, float value) final;
virtual void fadeFilterParam(int attrib, float from, float to, float time, float startTime) final;
virtual void oscFilterParam(int attrib, float from, float to, float time, float startTime) final;
virtual ~BQRFilterInstance() final;
private:
void calcParams();
BQRFilter *m_parent;
m::vec3 m_a;
m::vec3 m_b;
m::vec2 m_x1, m_x2;
m::vec2 m_y1, m_y2;
int m_filterType;
float m_sampleRate;
float m_frequency;
float m_resonance;
float m_wetSignal;
Fader m_resonanceFader;
Fader m_frequencyFader;
Fader m_sampleRateFader;
Fader m_wetSignalFader;
bool m_active;
bool m_dirty;
};
struct BQRFilter final : Filter {
// type
enum {
kNone,
kLowPass,
kHighPass,
kBandPass
};
// attribute
enum {
kSampleRate,
kFrequency,
kResonance,
kWet
};
virtual BQRFilterInstance *create() final;
BQRFilter();
void setParams(int type, float sampleRate, float frequency, float resonance);
virtual ~BQRFilter() final;
private:
friend struct BQRFilterInstance;
int m_filterType;
float m_sampleRate;
float m_frequency;
float m_resonance;
};
// check docs/AUDIO.md for explanation of how this does what it does
struct DCRemovalFilter;
struct DCRemovalFilterInstance final : FilterInstance {
virtual void filter(float *buffer, size_t samples, size_t channels, float sampleRate, float streamTime) final;
virtual ~DCRemovalFilterInstance() final;
DCRemovalFilterInstance(DCRemovalFilter *parent);
private:
u::vector<float> m_buffer;
u::vector<float> m_totals;
size_t m_offset;
DCRemovalFilter *m_parent;
};
struct DCRemovalFilter final : Filter {
virtual FilterInstance *create() final;
DCRemovalFilter();
void setParams(float length = 0.1f);
private:
friend struct DCRemovalFilterInstance;
float m_length;
};
struct LoFiFilter;
}
#endif