16 #include "vstgui/vstgui.h" 17 #include "vstgui/vstgui_uidescription.h" 19 #include "../PluginKernel/pluginstructures.h" 24 const int DATA_QUEUE_LEN = 4096;
27 const unsigned int MESSAGE_SET_STRINGLIST = 0;
28 const unsigned int MESSAGE_SET_STRING = 1;
53 WaveView(
const CRect& size, IControlListener* listener, int32_t tag);
79 void draw(CDrawContext* pContext)
override;
118 enum class spectrumViewWindowType {kRectWindow, kHannWindow, kBlackmanHarrisWindow};
121 const int FFT_LEN = 512;
149 class SpectrumView :
public CControl,
public ICustomView 152 SpectrumView(
const CRect& size, IControlListener* listener, int32_t tag);
156 virtual void updateView()
override;
159 virtual void pushDataValue(
double data)
override;
162 void showFilledFFT(
bool _filledFFT) { filledFFT = _filledFFT; }
167 void setWindow(spectrumViewWindowType _window);
170 void draw(CDrawContext* pContext)
override;
173 CLASS_METHODS(SpectrumView, CControl)
178 spectrumViewWindowType window = spectrumViewWindowType::kRectWindow;
181 fftw_complex* data =
nullptr;
182 fftw_complex* fft_result =
nullptr;
183 fftw_complex* ifft_result =
nullptr;
184 fftw_plan plan_forward;
185 fftw_plan plan_backward;
188 int fftInputCounter = 0;
194 bool addFFTInputData(
double inputSample);
197 double fftMagnitudeArray_A[FFT_LEN] = {0.0};
198 double fftMagnitudeArray_B[FFT_LEN] = {0.0};
201 double fftWindow[FFT_LEN] = {1.0};
205 double* currentFFTMagBuffer =
nullptr;
211 return sqrt((re*re)+(im*im));
219 inline double normalizeBufferGetFMax(
double* buffer,
unsigned int bufferSize,
int* ptrMaxIndex)
222 double maxRetValue = 0;
225 for(
int j=0; j<bufferSize; j++)
227 if((fabs(buffer[j])) > max)
229 max = fabs(buffer[j]);
236 for(
int j=0; j<bufferSize; j++)
238 buffer[j] = buffer[j]/max;
239 if(j == *ptrMaxIndex)
240 maxRetValue = buffer[j];
252 inline double interpArrayValue(
double* array,
int arraySize,
double fractionalIndex)
255 int x1 = (int)fractionalIndex;
267 double dx = (fractionalIndex - x1)/(x2 - x1);
270 return dx*array[x2] + (1-dx)*array[x1];
275 bool filledFFT =
true;
287 #endif // defined FFTW 291 const unsigned int MESSAGE_SHOW_CONTROL = 0;
292 const unsigned int MESSAGE_HIDE_CONTROL = 1;
293 const unsigned int MESSAGE_SET_CONTROL_ALPHA = 2;
294 const unsigned int MESSAGE_QUERY_CONTROL = 3;
313 message = initMessage.message;
314 visible = initMessage.visible;
315 showAlternateGraphic = initMessage.showAlternateGraphic;
316 controlAlpha = initMessage.controlAlpha;
317 queryString = initMessage.queryString;
318 replyString = initMessage.replyString;
319 messageData = initMessage.messageData;
324 message = viewMessage.message;
325 visible = viewMessage.visible;
326 showAlternateGraphic = viewMessage.showAlternateGraphic;
327 controlAlpha = viewMessage.controlAlpha;
328 queryString = viewMessage.queryString;
329 replyString = viewMessage.replyString;
330 messageData = viewMessage.messageData;
335 unsigned int message = MESSAGE_HIDE_CONTROL;
338 bool showAlternateGraphic =
false;
339 double controlAlpha = 1.0;
340 std::string queryString;
341 std::string replyString;
342 void* messageData =
nullptr;
360 CustomKnobView(
const CRect& size, IControlListener* listener, int32_t tag, int32_t subPixmaps,
361 CCoord heightOfOneImage, CBitmap* background,
const CPoint &offset,
362 bool bSwitchKnob =
false);
438 return std::find(linkedKnobs.begin(), linkedKnobs.end(), control) != linkedKnobs.end();
448 virtual CView*
verifyView(CView* view,
const UIAttributes& attributes,
const IUIDescription* description)
override 450 CAnimKnob* knob =
dynamic_cast<CAnimKnob*
>(view);
451 CTextButton* button =
dynamic_cast<CTextButton*
>(view);
457 if (button->getValueNormalized() != 0)
463 linkedKnobs.push_back(knob);
477 if (control->getValueNormalized() != 0)
495 for (std::vector<CAnimKnob*>::iterator it = linkedKnobs.begin(); it != linkedKnobs.end(); ++it)
498 CControl* ctrl = *it;
500 if (ctrl && control != ctrl)
503 ctrl->setValueNormalized(control->getValueNormalized());
521 virtual CView*
createView(
const UIAttributes& attributes,
const IUIDescription* description)
override {
return parentController->createView(attributes, description); }
541 pControl->setListener(
this);
552 pControl->setListener(
this);
587 unsigned int message = MESSAGE_SET_STRING;
589 std::string labelString;
590 std::vector<std::string> stringList;
591 uint32_t stringCount = 0;
608 uint32_t message = MESSAGE_SET_STRING;
610 const char* labelString;
612 uint32_t stringCount = 0;
628 CustomTextLabel(
const CRect& size, UTF8StringPtr txt = 0, CBitmap* background = 0,
const int32_t style = 0)
629 : CTextLabel(size, txt, background, style)
644 if (viewMessage->message == MESSAGE_SET_STRING)
647 this->setText(viewMessage->labelString.c_str());
670 CustomOptionMenu(
const CRect& size, IControlListener* listener, int32_t tag, CBitmap* background =
nullptr, CBitmap* bgWhenClick =
nullptr,
const int32_t style = 0)
671 : COptionMenu(size, listener, tag, background, bgWhenClick, style)
680 virtual CMenuItem* addEntry(
const UTF8String& title, int32_t index = -1, int32_t itemFlags = CMenuItem::kNoFlags)
override 684 if (index < activeStringCount)
685 return COptionMenu::addEntry(stringList[index].c_str(), index);
687 return COptionMenu::addEntry(
"-----", index);
697 if (viewMessage->message == MESSAGE_SET_STRINGLIST)
700 int32_t numNewEntries = viewMessage->stringList.size();
702 if (viewMessage->stringCount > 0)
704 this->setMax(viewMessage->stringCount);
705 omStringCount = viewMessage->stringCount;
709 this->removeAllEntry();
710 stringList = viewMessage->stringList;
711 activeStringCount = numNewEntries;
713 for (
int i = 0; i < omStringCount; i++)
715 if (i < activeStringCount)
716 addEntry(stringList[i].c_str(), i);
718 addEntry(
"-----", i);
726 bool updatingCustomStrings =
false;
727 std::vector<std::string> stringList;
728 uint32_t activeStringCount = 0;
729 uint32_t omStringCount = 0;
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:472
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
Custom object for dynamic lables that can change their text programmatically. .
Definition: customviews.h:625
virtual void controlBeginEdit(CControl *pControl) override
Definition: customviews.h:526
std::vector< CAnimKnob * > KnobList
list of knobs
Definition: customviews.h:564
Custom structure for dynamic option menus in RackAFX only - NOTE: unused in ASPiK and not needed...
Definition: customviews.h:604
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:448
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
This object demonstrates how to subclass an existing VSTGUI4 control to setup a communcation channel ...
Definition: customviews.h:357
KnobLinkController(IController *_parentController)
Definition: customviews.h:419
Definition: customcontrols.cpp:20
IController * parentController
pointer to owning listener
Definition: customviews.h:557
virtual void sendMessage(void *data) override
Definition: customviews.h:639
void showXAxis(bool _paintXAxis)
Definition: customviews.h:74
virtual void controlTagDidChange(CControl *pControl) override
Definition: customviews.h:548
virtual CView * createView(const UIAttributes &attributes, const IUIDescription *description) override
Definition: customviews.h:521
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
virtual ~CustomTextLabel(void)
Definition: customviews.h:653
int readIndex
circular buffer read location
Definition: customviews.h:91
Custom structure for dynamic option menus. .
Definition: customviews.h:582
void addWaveDataPoint(float fSample)
Definition: customviews.cpp:87
virtual void updateView() override
Definition: customviews.cpp:471
virtual void updateView() override
Definition: customviews.h:633
virtual void controlTagWillChange(CControl *pControl) override
Definition: customviews.h:537
bool isLinkedControl(CControl *control)
Definition: customviews.h:436
virtual void controlEndEdit(CControl *pControl) override
Definition: customviews.h:531
Custom structure for passing messages and data to and from the plugin core object. See the Custom View tutorial project for more informaiton.
Definition: customviews.h:308
CTextButton * linkControl
the link button is defined as a CTextButton (by me)
Definition: customviews.h:560