VVSDK  1.0
The VVAmbisonic Library
AVVTetraInternal.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2013 David McGriffy, all rights reserved
3  */
4 
5 #ifndef __AVVTETRAINTERNAL_H_INCLUDED
6 #define __AVVTETRAINTERNAL_H_INCLUDED
7 
8 #include <string>
9 
10 #include "ABMatrix.h"
11 #include "CoincidenceFilter.h"
12 #include "LFFilter.h"
13 #include "MitRegFilter.h"
14 #include "FilterMatrix.h"
15 #include "AmbiFormat.h"
16 
17 
18 #define MAXCAP (4)
19 #define MAXOUT (4)
20 #define NUMPROGRAMS (8)
21 #define MAXFILTER (8)
22 #define MAXVIEW (3)
23 #define MAXFREQ (20000.0)
24 #define LOWFREQ (250.0)
25 #define MINFREQ (20.0)
26 #define FREQRATIO (1.0 / log10(MAXFREQ / MINFREQ))
27 #define LOWRATIO (1.0 / log10(LOWFREQ / MINFREQ))
28 
29 #define MAXNAMESIZE (32)
30 
32 {
38 };
39 
40 short inline parm2AddressMode(float x)
41 {
42  return (short)(x * kAddressNumModes);
43 }
44 
45 float inline addressMode2parm(short n)
46 {
47  return ((float)n / kAddressNumModes);
48 }
49 
50 using namespace std;
51 
52 // parameters
53 enum
54 {
55  // master
73 
74  // per capsule
76  // cap EQ
81  // cap gain per (cap x out)
83  //kNumCapGains = (MAXCAP * MAXOUT),
85 
86  // per output
88 
90 };
91 
92 class AVVTetraInternal;
93 
95 {
96 friend class AVVTetraInternal;
97 public:
100 private:
101 
102  float fAmbiFormat;
103  float fCurCapCompEQFilter;
104  float fCurCoincidenceFilter;
105  float fLFCutOff;
106  float fCardioidBoost;
107  float fLFEnabled;
108  float fViewMode;
109  float fDispVU;
110  float fLocked;
111  float fCalibration;
112 
113  float fCapGain[MAXCAP][MAXOUT];
114  float fCapEQFreq[MAXCAP];
115  float fCapEQWidth[MAXCAP];
116  float fCapEQGain[MAXCAP];
117  float fEQEnabled;
118  float fEQLinked;
119  float fGainsLinked;
120  float fOutGain[MAXCAP];
121  float fABMatrixEnabled;
122  float fAddressMode;
123  float fCurCap;
124 
125  char name[MAXNAMESIZE];
126 };
127 
129 {
130 public:
131  AVVTetraInternal(long sampleRate, const char *calibrationPath);
132  ~AVVTetraInternal();
133 
134  void reloadCalibrations(const char *calibrationPath);
135  void getCalibrationPath(char* calibrationPath);
136  int setProgram(int program); // returns program, or -1 if out of bounds
137  int getCurProgram();
138  int setProgram(string programName); // returns program, or -1 if not found
139  string getCurProgramName();
140  int getNumPrograms();
141  string getProgramName(int program);
142  bool canProcess();
143  void setSampleRate(long sampleRate);
144  void processReplacing(float **inputs, float **outputs, int sampleFrames);
145  void clearBuffers();
146  void generateImpulses(int blockSize, float** output);
147 
148  virtual void setParameter(int index, float value);
149  virtual float getParameter (int index);
150 
151  float getVu();
152  float getVuPre(int index);
153  float getVuPost(int index);
154 
155  void setAddressMode(short mode);
156  short getAddressMode();
157  void setOutputFormat(int fmt);
158  int getOutputFormat();
159 
160 
161 private:
162  void SetCapCompFilter(short newCapCompFilter);
163  short GetCapCompFilter();
164  void SetCoincidenceFilter(short newCoincidenceFilter);
165  short GetCoincidenceFilter();
166  bool CalibrationsDirectoryExists();
167  void ReadCalibrations();
168  void ReadTetraProcCalibrations();
169  void ReadBrahmaCalibrations();
170 
171  //virtual void setSampleRate (float sampleRate);
172 
173  void initPath();
174  void initFilters();
175  void initDynamicFilters();
176  void initPrograms();
177 
178  long sampleRate;
179  char calPath[1024];
180  char calName[24];
181 
182  AVVTetraProgram *programs;
183  int numPrograms;
184  int curProgram;
185  float *buffer;
186 
187  // in internal type
188  short m_nOutFormat;
189  short m_nCurCapCompEQFilter;
190  short m_nCurCoincidenceFilter;
191  float m_fLFCutOff;
192  float m_fCardioidBoost;
193  bool m_bLFEnabled;
194  short m_nViewMode;
195  bool m_bDispVU;
196  bool m_bLocked;
197  bool m_bCalibration;
198 
199  float m_fCapGain[MAXCAP][MAXOUT];
200  float m_fCapEQFreq[MAXCAP];
201  float m_fCapEQWidth[MAXCAP];
202  float m_fCapEQGain[MAXCAP];
203  bool m_bEQEnabled;
204  bool m_bEQLinked;
205  bool m_bGainsLinked;
206  float m_fOutGain[MAXCAP];
207  bool m_bABMatrixEnabled;
208  short m_nAddressMode;
209  short m_nCurCap;
210 
211  // in vst (float 0-1) type
212  float fAmbiFormat;
213  float fCurCapCompEQFilter;
214  float fCurCoincidenceFilter;
215  float fLFCutOff;
216  float fCardioidBoost;
217  float fLFEnabled;
218  float fViewMode;
219  float fDispVU;
220  float fLocked;
221  float fCalibration;
222 
223  float fCapGain[MAXCAP][MAXOUT];
224  float fCapEQFreq[MAXCAP];
225  float fCapEQWidth[MAXCAP];
226  float fCapEQGain[MAXCAP];
227  float fEQEnabled;
228  float fEQLinked;
229  float fGainsLinked;
230  float fOutGain[MAXCAP];
231  float fABMatrixEnabled;
232  float fAddressMode;
233  float fCurCap;
234 
235  long delay;
236  long size;
237  long inPos;
238  long outPos;
239 
240  float vu, vuSave, vuPre[MAXCAP], vuPreSave[MAXCAP], vuPost[MAXOUT], vuPostSave[MAXOUT];
241  long vuCount, vuMicCountPre[MAXCAP], vuMicCountPost[MAXOUT];
242 
243  // format changer
244  AmbiFormat ambFormat;
245 
246  // filters
247  bool skipDynamicFilters;
248 
249  // LF filters
250  CLFFilter *m_LFFilter[MAXCAP];
251 
252  // capsule EQ
253  //CParaEQ1Band *m_filtCapEQ[MAXCAP];
254  CMitRegFilter *m_filtCapEQ[MAXCAP];
255 
256  // frequency compensation filters
257  short m_nNumCapCompEQFilter;
258  CFilter *m_filtCapCompEQ[MAXFILTER][MAXCAP];
259 
260  CABMatrix *m_abMatrix;
261 
262  // coincidence compensation filters
263  short m_nNumCoincidenceFilter;
264  CFilter *m_filtCoincidence[MAXFILTER][MAXCAP];
265 
266  // filter matrix
267  FilterMatrix m_filterMatrix;
268 };
269 
270 #endif
#define MAXOUT
Definition: AVVTetraInternal.h:19
EXPORTED_FUNCTION void getProgramName(int program, char *programName)
Definition: VVTetraC.cpp:76
EXPORTED_FUNCTION short getAddressMode()
Definition: VVTetraC.cpp:88
EXPORTED_FUNCTION int getCurProgram()
Definition: VVTetraC.cpp:69
#define MAXFILTER
Definition: AVVTetraInternal.h:21
Definition: AVVTetraInternal.h:70
Definition: AVVTetraInternal.h:62
Definition: AVVTetraInternal.h:34
EXPORTED_FUNCTION void reloadCalibrations(const char *calibrationPath)
Definition: VVTetraC.cpp:30
Definition: AVVTetraInternal.h:67
short parm2AddressMode(float x)
Definition: AVVTetraInternal.h:40
Definition: AVVTetraInternal.h:63
Definition: LFFilter.h:16
Definition: AVVTetraInternal.h:69
Definition: Filter.h:20
Definition: AVVTetraInternal.h:65
Definition: AVVTetraInternal.h:66
Definition: MitRegFilter.h:13
Definition: AVVTetraInternal.h:61
~AVVTetraProgram()
Definition: AVVTetraInternal.h:99
#define MAXNAMESIZE
Definition: AVVTetraInternal.h:29
AddressModes
Definition: AVVTetraInternal.h:31
Definition: AVVTetraInternal.h:68
Definition: AVVTetraInternal.h:94
Definition: AVVTetraInternal.h:82
Definition: AVVTetraInternal.h:77
Definition: AVVTetraInternal.h:87
Definition: AVVTetraInternal.h:58
Definition: AVVTetraInternal.h:128
Definition: AVVTetraInternal.h:37
EXPORTED_FUNCTION void setSampleRate(long sampleRate)
Definition: VVTetraC.cpp:102
EXPORTED_FUNCTION void getCurProgramName(char *programName)
Definition: VVTetraC.cpp:56
Definition: AVVTetraInternal.h:59
Definition: AVVTetraInternal.h:79
Definition: AVVTetraInternal.h:36
float addressMode2parm(short n)
Definition: AVVTetraInternal.h:45
Definition: AVVTetraInternal.h:35
Definition: AVVTetraInternal.h:89
Definition: AVVTetraInternal.h:64
Definition: AmbiFormat.h:11
Definition: AVVTetraInternal.h:57
Definition: AVVTetraInternal.h:33
Definition: AVVTetraInternal.h:78
Definition: AVVTetraInternal.h:56
EXPORTED_FUNCTION int getNumPrograms()
Definition: VVTetraC.cpp:62
Definition: AVVTetraInternal.h:80
EXPORTED_FUNCTION int setProgram(int program)
Definition: VVTetraC.cpp:42
EXPORTED_FUNCTION bool canProcess()
Definition: VVTetraC.cpp:95
EXPORTED_FUNCTION void getCalibrationPath(char *calibrationPath)
Definition: VVTetraC.cpp:36
Definition: AVVTetraInternal.h:72
Definition: AVVTetraInternal.h:75
EXPORTED_FUNCTION void setAddressMode(short mode)
Definition: VVTetraC.cpp:82
#define MAXCAP
Definition: AVVTetraInternal.h:18
Definition: FilterMatrix.h:20
Definition: AVVTetraInternal.h:71
Definition: AVVTetraInternal.h:84
Definition: AVVTetraInternal.h:60
Definition: ABMatrix.h:13