16 #include "vstgui/vstgui.h" 17 #include "vstgui/vstgui_uidescription.h" 19 #include "../PluginKernel/pluginstructures.h" 24 const int DATA_QUEUE_LEN = 4096;
45 class WaveView :
public CControl,
public ICustomView 48 WaveView(
const CRect& size, IControlListener* listener, int32_t tag);
74 void draw(CDrawContext* pContext)
override;
113 enum class spectrumViewWindowType {kRectWindow, kHannWindow, kBlackmanHarrisWindow};
116 const int FFT_LEN = 512;
144 class SpectrumView :
public CControl,
public ICustomView 147 SpectrumView(
const CRect& size, IControlListener* listener, int32_t tag);
151 virtual void updateView()
override;
154 virtual void pushDataValue(
double data)
override;
157 void showFilledFFT(
bool _filledFFT) { filledFFT = _filledFFT; }
162 void setWindow(spectrumViewWindowType _window);
165 void draw(CDrawContext* pContext)
override;
168 CLASS_METHODS(SpectrumView, CControl)
173 spectrumViewWindowType window = spectrumViewWindowType::kRectWindow;
176 fftw_complex* data =
nullptr;
177 fftw_complex* fft_result =
nullptr;
178 fftw_complex* ifft_result =
nullptr;
179 fftw_plan plan_forward;
180 fftw_plan plan_backward;
183 int fftInputCounter = 0;
189 bool addFFTInputData(
double inputSample);
192 double fftMagnitudeArray_A[FFT_LEN] = {0.0};
193 double fftMagnitudeArray_B[FFT_LEN] = {0.0};
196 double fftWindow[FFT_LEN] = {1.0};
200 double* currentFFTMagBuffer =
nullptr;
206 return sqrt((re*re)+(im*im));
214 inline double normalizeBufferGetFMax(
double* buffer,
unsigned int bufferSize,
int* ptrMaxIndex)
217 double maxRetValue = 0;
220 for(
int j=0; j<bufferSize; j++)
222 if((fabs(buffer[j])) > max)
224 max = fabs(buffer[j]);
231 for(
int j=0; j<bufferSize; j++)
233 buffer[j] = buffer[j]/max;
234 if(j == *ptrMaxIndex)
235 maxRetValue = buffer[j];
247 inline double interpArrayValue(
double* array,
int arraySize,
double fractionalIndex)
250 int x1 = (int)fractionalIndex;
262 double dx = (fractionalIndex - x1)/(x2 - x1);
265 return dx*array[x2] + (1-dx)*array[x1];
270 bool filledFFT =
true;
282 #endif // defined FFTW 286 const unsigned int MESSAGE_SHOW_CONTROL = 0;
287 const unsigned int MESSAGE_HIDE_CONTROL = 1;
288 const unsigned int MESSAGE_SET_CONTROL_ALPHA = 2;
289 const unsigned int MESSAGE_QUERY_CONTROL = 3;
303 struct CustomViewMessage
305 CustomViewMessage() {}
306 CustomViewMessage(
const CustomViewMessage& initMessage)
308 message = initMessage.message;
309 visible = initMessage.visible;
310 showAlternateGraphic = initMessage.showAlternateGraphic;
311 controlAlpha = initMessage.controlAlpha;
312 queryString = initMessage.queryString;
313 replyString = initMessage.replyString;
314 messageData = initMessage.messageData;
317 CustomViewMessage& operator =(
const CustomViewMessage& viewMessage)
319 message = viewMessage.message;
320 visible = viewMessage.visible;
321 showAlternateGraphic = viewMessage.showAlternateGraphic;
322 controlAlpha = viewMessage.controlAlpha;
323 queryString = viewMessage.queryString;
324 replyString = viewMessage.replyString;
325 messageData = viewMessage.messageData;
330 unsigned int message = MESSAGE_HIDE_CONTROL;
333 bool showAlternateGraphic =
false;
334 double controlAlpha = 1.0;
335 std::string queryString;
336 std::string replyString;
337 void* messageData =
nullptr;
352 class CustomKnobView :
public CAnimKnob,
public ICustomView 355 CustomKnobView(
const CRect& size, IControlListener* listener, int32_t tag, int32_t subPixmaps,
356 CCoord heightOfOneImage, CBitmap* background,
const CPoint &offset,
357 bool bSwitchKnob =
false);
408 class KnobLinkController :
public IController
433 return std::find(linkedKnobs.begin(), linkedKnobs.end(), control) != linkedKnobs.end();
443 virtual CView*
verifyView(CView* view,
const UIAttributes& attributes,
const IUIDescription* description)
override 445 CAnimKnob* knob =
dynamic_cast<CAnimKnob*
>(view);
446 CTextButton* button =
dynamic_cast<CTextButton*
>(view);
452 if (button->getValueNormalized() != 0)
458 linkedKnobs.push_back(knob);
472 if (control->getValueNormalized() != 0)
490 for (std::vector<CAnimKnob*>::iterator it = linkedKnobs.begin(); it != linkedKnobs.end(); ++it)
493 CControl* ctrl = *it;
495 if (ctrl && control != ctrl)
498 ctrl->setValueNormalized(control->getValueNormalized());
516 virtual CView*
createView(
const UIAttributes& attributes,
const IUIDescription* description)
override {
return parentController->createView(attributes, description); }
536 pControl->setListener(
this);
547 pControl->setListener(
this);
This object demonstrates how to create a sub-controller. In this object, you can link multiple knob c...
Definition: customviews.h:413
This object displays an audio histogram waveform view. .
Definition: customviews.h:50
virtual void valueChanged(CControl *control) override
Definition: customviews.h:467
bool paintXAxis
flag for painting X Axis
Definition: customviews.h:86
int circularBufferLength
circular buffer length
Definition: customviews.h:92
virtual void updateView() override
Definition: customviews.cpp:62
bool linkControls
enable linking
Definition: customviews.h:568
virtual void controlBeginEdit(CControl *pControl) override
Definition: customviews.h:521
std::vector< CAnimKnob * > KnobList
list of knobs
Definition: customviews.h:559
void draw(CDrawContext *pContext) override
Definition: customviews.cpp:104
CRect currentRect
the rect to draw into
Definition: customviews.h:93
virtual CView * verifyView(CView *view, const UIAttributes &attributes, const IUIDescription *description) override
Definition: customviews.h:443
CustomKnobView(const CRect &size, IControlListener *listener, int32_t tag, int32_t subPixmaps, CCoord heightOfOneImage, CBitmap *background, const CPoint &offset, bool bSwitchKnob=false)
CustomKnobView constructor.
Definition: customviews.cpp:440
void clearBuffer()
Definition: customviews.cpp:96
virtual void pushDataValue(double data) override
Definition: customviews.cpp:54
double * circularBuffer
circular buffer to store peak values
Definition: customviews.h:89
Custom View interface to allow plugin core to create safe communication channels with GUI custom view...
Definition: pluginstructures.h:1396
int writeIndex
circular buffer write location
Definition: customviews.h:90
KnobLinkController(IController *_parentController)
Definition: customviews.h:414
Definition: customcontrols.cpp:20
IController * parentController
pointer to owning listener
Definition: customviews.h:557
void showXAxis(bool _paintXAxis)
Definition: customviews.h:69
virtual void controlTagDidChange(CControl *pControl) override
Definition: customviews.h:543
virtual CView * createView(const UIAttributes &attributes, const IUIDescription *description) override
Definition: customviews.h:516
double getMagnitude(double re, double im)
calculates magnitude of a complex numb er
Definition: fxobjects.h:1003
virtual void sendMessage(void *data) override
Definition: customviews.cpp:453
int readIndex
circular buffer read location
Definition: customviews.h:91
void addWaveDataPoint(float fSample)
Definition: customviews.cpp:87
virtual void updateView() override
Definition: customviews.cpp:471
virtual void controlTagWillChange(CControl *pControl) override
Definition: customviews.h:532
bool isLinkedControl(CControl *control)
Definition: customviews.h:431
virtual void controlEndEdit(CControl *pControl) override
Definition: customviews.h:526
CTextButton * linkControl
the link button is defined as a CTextButton (by me)
Definition: customviews.h:560