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 = 1;
302 struct CustomViewMessage
304 CustomViewMessage() {}
305 CustomViewMessage(
const CustomViewMessage& initMessage)
312 CustomViewMessage& operator =(
const CustomViewMessage& viewMessage)
320 unsigned int message = MESSAGE_HIDE_CONTROL;
338 class CustomKnobView :
public CAnimKnob,
public ICustomView 341 CustomKnobView(
const CRect& size, IControlListener* listener, int32_t tag, int32_t subPixmaps,
342 CCoord heightOfOneImage, CBitmap* background,
const CPoint &offset,
343 bool bSwitchKnob =
false);
394 class KnobLinkController :
public IController
419 return std::find(linkedKnobs.begin(), linkedKnobs.end(), control) != linkedKnobs.end();
429 virtual CView*
verifyView(CView* view,
const UIAttributes& attributes,
const IUIDescription* description)
override 431 CAnimKnob* knob =
dynamic_cast<CAnimKnob*
>(view);
432 CTextButton* button =
dynamic_cast<CTextButton*
>(view);
438 if (button->getValueNormalized() != 0)
444 linkedKnobs.push_back(knob);
458 if (control->getValueNormalized() != 0)
476 for (std::vector<CAnimKnob*>::iterator it = linkedKnobs.begin(); it != linkedKnobs.end(); ++it)
479 CControl* ctrl = *it;
481 if (ctrl && control != ctrl)
484 ctrl->setValueNormalized(control->getValueNormalized());
500 virtual CView*
createView(
const UIAttributes& attributes,
const IUIDescription* description)
override {
return parentController->createView(attributes, description); }
520 pControl->setListener(
this);
531 pControl->setListener(
this);
This object demonstrates how to create a sub-controller. In this object, you can link multiple knob c...
Definition: customviews.h:408
This object displays an audio histogram waveform view. .
Definition: customviews.h:45
virtual void valueChanged(CControl *control) override
Definition: customviews.h:453
bool visible
simple show/hide flag
Definition: customviews.h:332
bool paintXAxis
flag for painting X Axis
Definition: customviews.h:81
int circularBufferLength
circular buffer length
Definition: customviews.h:87
virtual void updateView() override
Definition: customviews.cpp:62
bool linkControls
enable linking
Definition: customviews.h:563
virtual void controlBeginEdit(CControl *pControl) override
Definition: customviews.h:505
std::vector< CAnimKnob * > KnobList
list of knobs
Definition: customviews.h:543
void draw(CDrawContext *pContext) override
Definition: customviews.cpp:104
CRect currentRect
the rect to draw into
Definition: customviews.h:88
virtual CView * verifyView(CView *view, const UIAttributes &attributes, const IUIDescription *description) override
Definition: customviews.h:429
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:434
void clearBuffer()
Definition: customviews.cpp:96
virtual void pushDataValue(double data) override
Definition: customviews.cpp:54
double controlAlpha
transparency: 0 = invisible (100% transparent) and 1 = solidly visible (0% transparent) ...
Definition: customviews.h:334
double * circularBuffer
circular buffer to store peak values
Definition: customviews.h:84
Custom View interface to allow plugin core to create safe communication channels with GUI custom view...
Definition: pluginstructures.h:1395
int writeIndex
circular buffer write location
Definition: customviews.h:85
KnobLinkController(IController *_parentController)
Definition: customviews.h:400
Definition: customcontrols.cpp:20
IController * parentController
pointer to owning listener
Definition: customviews.h:552
void showXAxis(bool _paintXAxis)
Definition: customviews.h:69
virtual void controlTagDidChange(CControl *pControl) override
Definition: customviews.h:527
virtual CView * createView(const UIAttributes &attributes, const IUIDescription *description) override
Definition: customviews.h:500
double getMagnitude(double re, double im)
calculates magnitude of a complex numb er
Definition: fxobjects.h:1004
virtual void sendMessage(void *data) override
Definition: customviews.cpp:447
int readIndex
circular buffer read location
Definition: customviews.h:86
void addWaveDataPoint(float fSample)
Definition: customviews.cpp:87
virtual void updateView() override
Definition: customviews.cpp:465
unsigned int message
message to send/receive
Definition: customviews.h:330
virtual void controlTagWillChange(CControl *pControl) override
Definition: customviews.h:516
bool isLinkedControl(CControl *control)
Definition: customviews.h:417
bool showAlternateGraphic
flag to show another graphic
Definition: customviews.h:333
virtual void controlEndEdit(CControl *pControl) override
Definition: customviews.h:510
CTextButton * linkControl
the link button is defined as a CTextButton (by me)
Definition: customviews.h:555