-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathLateReflections.hpp
More file actions
126 lines (82 loc) · 3.74 KB
/
Copy pathLateReflections.hpp
File metadata and controls
126 lines (82 loc) · 3.74 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
//
// LateReflections.hpp
// LRTest
//
// Created by Squishy on 23/02/2018.
//
#ifndef LateReflections_hpp
#define LateReflections_hpp
#include <stdio.h>
#include <iostream>
#include "../JuceLibraryCode/JuceHeader.h"
//USER HEADERS
#include "VecTemplate.hpp"
#include "CircularBuffer.hpp"
#include "GenerateModulation.hpp"
class LateReflections{
int bufferSize = 2000;
//initialise the circular buffers, 1 for each tap. couldn't figure out a way to create initialise objects inside arrays without doing it this way. Pleaseeeee could you tell me a better way to do this!?
CircularBuffer buffers[32] = { CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize),
CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize),
CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize),
CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize),
CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize),
CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize),
CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize),
CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize), CircularBuffer(bufferSize)};
IIRFilter fbLowShelfFilter[32], fbHighShelfFilter[32], fbPeakFilter[32], fixedLowShelf[32], fixedHighShelf[32];
IIRCoefficients lowShelfCoefs, highShelfCoefs, peakCoefs, fixedLowShelfCoefs, fixedHighShelfCoefs;
GenerateModulation modulation{44100, 1.0f, 1.0f, 0.0f};
float fFc[3] = {20.f, 20.f, 20.f}, fG[3] = {1.f, 1.f, 1.f}, fQ[3] = {1.f, 1.f, 1.f};
float feedback = 0.5f,
f1Fc = 1.0f,
f1Q = 1.0f,
f1Gain = 1.0f,
f2Fc = 1.0f,
f2Q = 1.0f,
f2Gain = 1.0f,
f3Fc = 1.0f,
f3Q = 1.0f,
f3Gain = 1.0f,
amplitude = 0;
int numOfTaps = 32,
maxTaps = 32,
Fs = 44100,
qualitySetting = 1;
float tapPoint[32],
householderMatrix[32][32],
orthogonalMatrix[32][32],
dialSmoothing[3];
//prime nums used for tap positions.
float primes[32] = { 353,359,367,373,379,383,389,397,
401,409,419,421,431,433,439,443,
449,457,461,463,467,479,487,491,
499,503,509,521,523,541,547,557};
float mixingMatrix[2][32] = {
{1.f, 1.05f, -1/1.05f, -1.f, 1.f, -1/1.05f, 1.05f, -1.f, // 8
1.f, -1/1.05f, 1.05f, -1.f, 1.f, 1.05f, -1/1.05f, -1.f, // 16
1.f, 1.05f, -1/1.05f, -1.f, 1.f, -1/1.05f, 1.05f, -1.f, // 24
1.f, -1/1.05f, 1.05f, -1.f, 1.f, 1.05f, -1/1.05f, -1.f}, // 32
{1.f, -1/1.05f, 1.05f, -1.f, 1.f, 1.05f, -1/1.05f, -1.f, // 8
1.f, 1.05f, -1/1.05f, -1.f, 1.f, -1/1.05f, 1.05f, -1.f, // 16
1.f, -1/1.05f, 1.05f, -1.f, 1.f, 1.05f, -1/1.05f, -1.f, // 24
1.f, 1.05f, -1/1.05f, -1.f, 1.f, -1/1.05f, 1.05f, -1.f} // 32
};
public:
enum filterType{LowShelf, HighShelf, Peak, Notch};
LateReflections();
void process(float* inSample, int bufferSize, int channel);
float processSingleSample(float sample, int channel);
void generateMatrix();
void setAPFeedback(float inValue);
void setMatrixMix(float inValue);
void setNumOfTaps(int inValue);
void setFs(float inValue);
void setFilterParams(int selector, float Fc, float gain, float Q);
void createFeedbackFilters(int selector);
void setLRDelayLength(float inValue);
void setModRate(float inValue);
void setModDepth(float inValue);
void getFilterCoefs(float* coefs, int selector);
};
#endif /* LateReflections_hpp */