VVSDK  1.0
The VVAmbisonic Library
AVVDecodeBase.h
Go to the documentation of this file.
1 #ifndef __AVVDECODEBASE_H_INCLUDED
2 #define __AVVDECODEBASE_H_INCLUDED
3 
4 #include <string>
5 #include <mutex>
6 
7 //using namespace std;
8 
9 #include "XMLParser.h"
10 #include "HostCallback.h"
11 #include "AmbiFormat.h"
12 
13 #define MAXINS (4)
14 #define MAXMICS (16)
15 #define NUMDECODEPROGRAMS (16)
16 #define MICDIVISOR (MAXMICS - 1)
17 #define MAXSUBJECTS (5)
18 
19 class AVVDecodeBase;
20 class AVVDecode;
21 class AVVDecode2;
22 class AVVBinaural;
23 
25 {
26  friend class AVVDecodeBase;
27  friend class AVVDecode;
28  friend class AVVDecode2;
29  friend class AVVBinaural;
30 
31  public:
34 
35  private:
36  float fAmbiFormat;
37  float fNumMics, fCurMic, fLinkFloors, fLinkPairs, fLinkDirs, fLinkDists, fMasterGain;
38  float fLowLatency, fBinaural, fSubject, fHeadSize, fDiffuseFieldEQ;
39  float fShelf, fNFC, fSmooth, fPInv;
40  float fAzimuth[MAXMICS], fWidth[MAXMICS], fDist[MAXMICS];
41  float fElevation[MAXMICS], fDirectivity[MAXMICS], fGain[MAXMICS];
42  float fSolo[MAXMICS], fMute[MAXMICS], fFloor[MAXMICS];
43  float fEffAzi[MAXMICS], fEffElev[MAXMICS], fEffDir[MAXMICS];
44  string name;
45 };
46 
48 {
49 friend class AVVDecode;
50 friend class AVVDecode2;
51 friend class AVVBinaural;
52 
53 public:
54  AVVDecodeBase(long sampleRate);
56 
57  // parameters
58  enum
59  {
83 
84  // these are offsets as in
85  // index = (mic * kNumMicParams) + kNumMasterParams;
86  kAzimuth = 0,
102 
104  };
105 
106  // class specific conversions
107  static int inline parm2Mics(float x)
108  {
109  return (int)(x * (MAXMICS - 1)) + 1;
110  }
111 
112  static float inline mics2Parm(int i)
113  {
114  return ((float)(i - 1) / (MAXMICS - 1));
115  }
116 
117  static int inline parm2SubjectNum(float x)
118  {
119  return (int)(x * (MAXSUBJECTS - 1));
120  }
121 
122  static float subjectNum2Parm(int subject)
123  {
124  return ((float)subject / (MAXSUBJECTS - 1));
125  }
126 
127  static float parm2HeadSize(float x)
128  {
129  return 10.0f + (10.0f * x);
130  }
131 
132  static float headSize2Parm(float headSize)
133  {
134  return (headSize - 10.0f) / 10.0f;
135  }
136 
137  void setInputFormat(int fmt);
138  int getInputFormat();
139  bool canProcess();
140  virtual void processReplacing(float **inputs, float **outputs, int sampleFrames) = 0;
141 
142  void setParameter(int index, float value);
143  float getParameter(int index);
144  float getParameterDefault(int index);
145 
146  float getVu();
147  float getVuSub(int index);
148 
149  int setProgram(int program); // returns program, or -1 if out of bounds
150  int getCurProgram();
151  int setProgram(string programName); // returns program, or -1 if not found
152  void getProgramName(int index, char* programName);
153  string getCurProgramName();
154 
155  int getNumOutputsInternal(); // the number of feeds decoded to. might be reduced to two outputs if binaural
156  int getCurOutput();
157  int getNumOutputs();
158  virtual void setSamplingRate(float sampleRate) = 0;
159 
160  CXMLElement* getXML();
161  void setXML(CXMLElement* xml);
162  void setXMLBlock(char* block);
163  void getXMLBlock(char* block, int maxSize);
164 
165  void setHostCallback(HostCallback* newHostCallback);
166  void setParameterNotifyingHost(int index, float newValue);
167  void notifyHostValueChanged(int index, float newValue);
168  void setParamWOLinkingOrNotifying(int index, float newValue);
169 
170 private:
171  virtual void initPrograms() = 0;
172  virtual void initFilters() = 0;
173  virtual void clearBuffers() = 0;
174 
175  long m_nSampleRate;
176  AVVDecodeProgram *programs;
177  int curProgram;
178  bool dontLink;
179  float fAmbiFormat;
180  float fNumMics, fCurMic, fLinkFloors, fLinkPairs, fLinkDirs, fLinkDists, fMasterGain;
181  float fLowLatency, fBinaural, fSubject, fHeadSize, fDiffuseFieldEQ;
182  float fShelf, fNFC, fSmooth, fPInv;
183  float fAzimuth[MAXMICS], fWidth[MAXMICS], fDist[MAXMICS];
184  float fElevation[MAXMICS], fDirectivity[MAXMICS], fGain[MAXMICS];
185  float fSolo[MAXMICS], fMute[MAXMICS], fFloor[MAXMICS];
186  float fEffAzi[MAXMICS], fEffElev[MAXMICS], fEffDir[MAXMICS];
187 
188  std::mutex vulock;
189  float vu, vuSave, vuMic[MAXMICS], vuMicSave[MAXMICS];
190  long vuCount, vuMicCount[MAXMICS];
191 
192  HostCallback* m_hostCallback;
193 };
194 
195 #endif
virtual void setSamplingRate(float sampleRate)=0
AVVDecodeProgram()
Definition: AVVDecodeBase.cpp:17
~AVVDecodeProgram()
Definition: AVVDecodeBase.h:33
friend class AVVDecode2
Definition: AVVDecodeBase.h:28
Definition: AVVDecodeBase.h:68
Definition: AVVDecodeBase.h:92
Definition: AVVDecodeBase.h:96
Definition: AVVDecodeBase.h:88
Definition: AVVDecodeBase.h:72
int getCurProgram()
Definition: AVVDecodeBase.cpp:188
int getNumOutputs()
Definition: AVVDecodeBase.cpp:98
Definition: AVVDecodeBase.h:62
Definition: AVVDecodeBase.h:73
Definition: AVVDecodeBase.h:77
Definition: AVVDecodeBase.h:67
void getProgramName(int index, char *programName)
Definition: AVVDecodeBase.cpp:212
Definition: AVVDecodeBase.h:24
Definition: AVVDecodeBase.h:98
Definition: AVVDecodeBase.h:65
Definition: AVVDecodeBase.h:80
virtual void processReplacing(float **inputs, float **outputs, int sampleFrames)=0
Definition: AVVDecodeBase.h:47
Definition: AVVDecodeBase.h:79
Definition: XMLParser.h:37
Definition: AVVDecodeBase.h:61
Definition: AVVDecodeBase.h:87
Definition: AVVDecodeBase.h:71
Definition: AVVDecodeBase.h:103
Definition: AVVDecodeBase.h:93
float getVuSub(int index)
Definition: AVVDecodeBase.cpp:129
Definition: AVVDecodeBase.h:70
Definition: AVVDecodeBase.h:66
AVVDecodeBase(long sampleRate)
Definition: AVVDecodeBase.cpp:60
friend class AVVBinaural
Definition: AVVDecodeBase.h:29
Definition: AVVDecode.h:19
Definition: AVVDecodeBase.h:95
float getVu()
Definition: AVVDecodeBase.cpp:116
Definition: AVVDecodeBase.h:78
Definition: AVVDecodeBase.h:101
int getInputFormat()
Definition: AVVDecodeBase.cpp:91
void getXMLBlock(char *block, int maxSize)
Definition: AVVDecodeBase.cpp:545
static int parm2Mics(float x)
Definition: AVVDecodeBase.h:107
int getCurOutput()
Definition: AVVDecodeBase.cpp:111
Definition: AVVDecodeBase.h:76
#define MAXMICS
Definition: AVVDecodeBase.h:14
static float mics2Parm(int i)
Definition: AVVDecodeBase.h:112
friend class AVVDecode2
Definition: AVVDecodeBase.h:50
string getCurProgramName()
Definition: AVVDecodeBase.cpp:206
Definition: AVVDecodeBase.h:81
Definition: AVVDecodeBase.h:60
Definition: AVVDecodeBase.h:99
bool canProcess()
int getNumOutputsInternal()
Definition: AVVDecodeBase.cpp:106
void setParamWOLinkingOrNotifying(int index, float newValue)
Definition: AVVDecodeBase.cpp:425
float getParameterDefault(int index)
Definition: AVVDecodeBase.cpp:370
Definition: AVVDecodeBase.h:94
void setInputFormat(int fmt)
Definition: AVVDecodeBase.cpp:86
void setHostCallback(HostCallback *newHostCallback)
Definition: AVVDecodeBase.cpp:438
Definition: AVVDecodeBase.h:64
void setParameterNotifyingHost(int index, float newValue)
Definition: AVVDecodeBase.cpp:419
void setXML(CXMLElement *xml)
Definition: AVVDecodeBase.cpp:490
static int parm2SubjectNum(float x)
Definition: AVVDecodeBase.h:117
Definition: AVVDecodeBase.h:100
Definition: AVVDecodeBase.h:89
Definition: AVVDecodeBase.h:69
Definition: AVVDecodeBase.h:86
Definition: AVVDecodeBase.h:75
#define MAXSUBJECTS
Definition: AVVDecodeBase.h:17
Definition: HostCallback.h:8
Definition: AVVDecodeBase.h:82
float getParameter(int index)
Definition: AVVDecodeBase.cpp:322
Definition: AVVDecodeBase.h:74
void setParameter(int index, float value)
Definition: AVVDecodeBase.cpp:218
CXMLElement * getXML()
Definition: AVVDecodeBase.cpp:443
Definition: AVVDecodeBase.h:91
static float subjectNum2Parm(int subject)
Definition: AVVDecodeBase.h:122
friend class AVVBinaural
Definition: AVVDecodeBase.h:51
Definition: AVVDecodeBase.h:97
void notifyHostValueChanged(int index, float newValue)
Definition: AVVDecodeBase.cpp:432
static float headSize2Parm(float headSize)
Definition: AVVDecodeBase.h:132
Definition: AVVDecodeBase.h:63
Definition: AVVDecodeBase.h:90
int setProgram(int program)
Definition: AVVDecodeBase.cpp:144
void setXMLBlock(char *block)
Definition: AVVDecodeBase.cpp:538
~AVVDecodeBase()
Definition: AVVDecodeBase.cpp:78
static float parm2HeadSize(float x)
Definition: AVVDecodeBase.h:127