ASPiK SDK
pluginstructures.h
1 // -----------------------------------------------------------------------------
2 // ASPiK Plugin Kernel File: pluginstructures.h
3 //
12 // -----------------------------------------------------------------------------
13 #ifndef _pluginstructures_h
14 #define _pluginstructures_h
15 
16 // --- support multichannel operation up to 128 channels
17 #define MAX_CHANNEL_COUNT 128
18 
19 #include <string>
20 #include <sstream>
21 #include <vector>
22 #include <stdint.h>
23 
24 #include "readerwriterqueue.h"
25 #include "atomicops.h"
26 
28 class IGUIWindowFrame;
29 class IGUIView;
30 
31 #ifdef AUPLUGIN
32 #import <CoreFoundation/CoreFoundation.h>
33 #import <AudioUnit/AudioUnit.h>
34 #import <AudioToolbox/AudioToolbox.h>
35 
36 typedef struct
37 {
38  void* pWindow;
39  float width;
40  float height;
41  AudioUnit au;
42  IGUIWindowFrame* pGUIFrame;
43  IGUIView* pGUIView;
44 } VIEW_STRUCT;
45 #endif
46 
47 
61 enum pluginType
62 {
63  kFXPlugin,
64  kSynthPlugin
65 };
66 
82 {
83  aaxPlugInCategory_None = 0x00000000,
84  aaxPlugInCategory_EQ = 0x00000001,
85  aaxPlugInCategory_Dynamics = 0x00000002,
86  aaxPlugInCategory_PitchShift = 0x00000004,
87  aaxPlugInCategory_Reverb = 0x00000008,
88  aaxPlugInCategory_Delay = 0x00000010,
89  aaxPlugInCategory_Modulation = 0x00000020,
90  aaxPlugInCategory_Harmonic = 0x00000040,
91  aaxPlugInCategory_NoiseReduction = 0x00000080,
92  aaxPlugInCategory_Dither = 0x00000100,
93  aaxPlugInCategory_SoundField = 0x00000200,
94  aaxPlugInCategory_HWGenerators = 0x00000400,
95  aaxPlugInCategory_SWGenerators = 0x00000800,
96  aaxPlugInCategory_WrappedPlugin = 0x00001000,
97  aaxPlugInCategory_Effect = 0x00002000,
98 };
99 
114 enum channelFormat
115 {
116  kCFNone,
117  kCFMono,
118  kCFStereo,
119  kCFLCR,
120  kCFLCRS,
121  kCFQuad,
122  kCF5p0,
123  kCF5p1,
124  kCF6p0,
125  kCF6p1,
126  kCF7p0Sony,
127  kCF7p0DTS,
128  kCF7p1Sony,
129  kCF7p1DTS,
130  kCF7p1Proximity,
131 
132  /* the following are NOT directly suppported by AAX/AU */
133  kCF8p1,
134  kCF9p0,
135  kCF9p1,
136  kCF10p0,
137  kCF10p1,
138  kCF10p2,
139  kCF11p0,
140  kCF11p1,
141  kCF12p2,
142  kCF13p0,
143  kCF13p1,
144  kCF22p2,
145 };
146 
158 enum auxGUIIdentifier
159 {
160  GUIKnobGraphic,
161  GUI2SSButtonStyle,
162  EnableMIDIControl,
163  MIDIControlChannel,
164  MIDIControlIndex,
165  midiControlData,
166  guiControlData
167 };
168 
180 struct ResetInfo
181 {
182  ResetInfo()
183  : sampleRate(44100)
184  , bitDepth(16) {}
185 
186  ResetInfo(double _sampleRate,
187  uint32_t _bitDepth)
188  : sampleRate(_sampleRate)
189  , bitDepth(_bitDepth) {}
190 
191  double sampleRate = 0.0;
192  uint32_t bitDepth = 0;
193 };
194 
206 struct APISpecificInfo
207 {
208  APISpecificInfo ()
209  : aaxManufacturerID(0) /* change this in the plugin core constructor */
210  , aaxProductID(0) /* change this in the plugin core constructor */
211  , aaxEffectID("")
212  , aaxPluginCategoryCode(aaxPlugInCategory::aaxPlugInCategory_Effect)
213  , fourCharCode(0)
214  , vst3FUID("")
217  , vst3BundleID("")
218  , auBundleID("")
219  {}
220 
221  APISpecificInfo& operator=(const APISpecificInfo& data) // need this override for collections to work
222  {
223  if (this == &data)
224  return *this;
225 
227  aaxProductID = data.aaxProductID;
228  aaxEffectID = data.aaxEffectID;
229  aaxBundleID = data.aaxBundleID;
231 
232  fourCharCode = data.fourCharCode;
233  vst3FUID = data.vst3FUID;
234 
237  vst3BundleID = data.vst3BundleID;
238  auBundleID = data.auBundleID;
239  auBundleName = data.auBundleName;
240 
241  return *this;
242  }
243 
244  uint32_t aaxManufacturerID = 0;
245  uint32_t aaxProductID = 0;
246  std::string aaxEffectID;
247  std::string aaxBundleID;
248  uint32_t aaxPluginCategoryCode = 0;
249 
250  // --- common to AU and AAX
251  int fourCharCode = 0;
252 
253  // --- VST3
254  std::string vst3FUID;
256  uint32_t vst3SampleAccurateGranularity = 1;
257  std::string vst3BundleID;
258 
259  // --- AU
260  std::string auBundleID;
261  std::string auBundleName;
262 
263  };
264 
276 struct VectorJoystickData
277 {
279  : vectorA(0.0)
280  , vectorB(0.0)
281  , vectorC(0.0)
282  , vectorD(0.0)
283  , vectorACMix(0.0)
284  , vectorBDMix(0.0) {}
285 
286  VectorJoystickData(double _vectorA, double _vectorB, double _vectorC, double _vectorD, double _vectorACMix, double _vectorBDMix)
287  : vectorA(_vectorA)
288  , vectorB(_vectorB)
289  , vectorC(_vectorC)
290  , vectorD(_vectorD)
291  , vectorACMix(_vectorACMix)
292  , vectorBDMix(_vectorBDMix) {}
293 
294  VectorJoystickData& operator=(const VectorJoystickData& vsData) // need this override for collections to work
295  {
296  if (this == &vsData)
297  return *this;
298 
299  vectorA = vsData.vectorA;
300  vectorB = vsData.vectorB;
301  vectorC = vsData.vectorC;
302  vectorD = vsData.vectorD;
303 
304  vectorACMix = vsData.vectorACMix;
305  vectorBDMix = vsData.vectorBDMix;
306 
307  return *this;
308  }
309 
310  double vectorA = 0.0;
311  double vectorB = 0.0;
312  double vectorC = 0.0;
313  double vectorD = 0.0;
314 
315  double vectorACMix = 0.0;
316  double vectorBDMix = 0.0;
317 };
318 
319 
331 struct GUIParameter
332 {
333  GUIParameter()
334  : controlID(0)
335  , actualValue(0.0)
336  , useCustomData(0)
337  , customData(0) {}
338 
339  GUIParameter& operator=(const GUIParameter& data) // need this override for collections to work
340  {
341  if (this == &data)
342  return *this;
343 
344  controlID = data.controlID;
345  actualValue = data.actualValue;
347  customData = data.customData;
348 
349  return *this;
350  }
351 
352  uint32_t controlID = 0;
353  double actualValue = 0.0;
354  bool useCustomData = false;
355 
356  // --- for custom drawing, or other custom data
357  void* customData = nullptr;
358 };
359 
371 struct PresetParameter
372 {
373  PresetParameter ()
374  : controlID(0)
375  , actualValue(0.0){}
376 
377  PresetParameter (uint32_t _controlID, double _actualValue)
378  : controlID(_controlID)
379  , actualValue(_actualValue){}
380 
381  PresetParameter& operator=(const PresetParameter& data) // need this override for collections to work
382  {
383  if (this == &data)
384  return *this;
385 
386  controlID = data.controlID;
387  actualValue = data.actualValue;
388  return *this;
389  }
390 
391  uint32_t controlID = 0;
392  double actualValue = 0.0;
393 };
394 
406 struct PresetInfo
407 {
408  PresetInfo(uint32_t _presetIndex, const char* _name)
409  : presetIndex(_presetIndex)
410  , presetName(_name) {}
411 
412  PresetInfo& operator=(const PresetInfo& data) // need this override for collections to work
413  {
414  if (this == &data)
415  return *this;
416 
417  presetIndex = data.presetIndex;
418  presetName = data.presetName;
420 
421  return *this;
422  }
423 
424  uint32_t presetIndex = 0;
425  std::string presetName;
426 
427  std::vector<PresetParameter> presetParameters;
428 };
429 
443 struct GUIUpdateData
444 {
445  GUIUpdateData& operator=(const GUIUpdateData& data) // need this override for collections to work
446  {
447  if (this == &data)
448  return *this;
449 
452  customData = data.customData;
454 
455  return *this;
456  }
457 
458  uint32_t guiUpdateCode = -1;
459 
460  // --- for control updates
461  std::vector<GUIParameter> guiParameters;
462 
463  // --- for custom draw updates (graphs, etc...)
464  void* customData = nullptr;
465 
466  // --- flag
467  bool useCustomData = false;
468 };
469 
483 enum hostMessage { sendGUIUpdate, sendRAFXStatusWndText };
484 
485 struct HostMessageInfo
486 {
488  : hostMessage(0){}
489 
490  HostMessageInfo& operator=(const HostMessageInfo& data) // need this override for collections to work
491  {
492  if (this == &data)
493  return *this;
494 
495  hostMessage = data.hostMessage;
496  guiParameter = data.guiParameter;
497  guiUpdateData = data.guiUpdateData;
498  rafxStatusWndText = data.rafxStatusWndText;
499 
500  return *this;
501  }
502 
503  uint32_t hostMessage = 0;
504  GUIParameter guiParameter; /* for single param updates */
505 
506  // --- for GUI messages
507  GUIUpdateData guiUpdateData; /* for multiple param updates */
508  std::string rafxStatusWndText;
509 };
510 
511 
523 struct ChannelIOConfig
524 {
525  ChannelIOConfig ()
526  : inputChannelFormat(kCFStereo)
527  , outputChannelFormat(kCFStereo) {}
528 
529  ChannelIOConfig (uint32_t _inputChannelFormat,
530  uint32_t _outputChannelFormat)
531  : inputChannelFormat(_inputChannelFormat)
532  , outputChannelFormat(_outputChannelFormat){}
533 
534  ChannelIOConfig& operator=(const ChannelIOConfig& data) // need this override for collections to work
535  {
536  if (this == &data)
537  return *this;
538 
541 
542  return *this;
543  }
544 
545  uint32_t inputChannelFormat = kCFStereo;
546  uint32_t outputChannelFormat = kCFStereo;
547 
548 };
549 
561 struct midiEvent
562 {
563  midiEvent(uint32_t _midiMessage, uint32_t _midiChannel, uint32_t _midiData1, uint32_t _midiData2, uint32_t _midiSampleOffset)
564  : midiMessage(_midiMessage)
565  , midiChannel(_midiChannel)
566  , midiData1(_midiData1)
567  , midiData2(_midiData2)
568  , midiSampleOffset(_midiSampleOffset)
569  {
570  midiPitchBendValue = 0;
572  midiIsDirty = false;
573  auxUintData1 = 0;
574  auxUintData2 = 0;
575  auxIntData1 = -1;
576  auxIntData2 = -1;
577  auxDoubleData1 = 0.0;
578  auxDoubleData2 = 0.0;
579  }
580 
581  midiEvent(uint32_t _midiMessage, uint32_t _midiChannel, uint32_t _midiData1, uint32_t _midiData2, uint32_t _midiSampleOffset, double _audioTimeStamp)
582  : midiMessage(_midiMessage)
583  , midiChannel(_midiChannel)
584  , midiData1(_midiData1)
585  , midiData2(_midiData2)
586  , midiSampleOffset(_midiSampleOffset)
587  , audioTimeStamp(_audioTimeStamp)
588  {
589  midiPitchBendValue = 0;
591  midiIsDirty = false;
592  auxUintData1 = 0;
593  auxUintData2 = 0;
594  auxIntData1 = -1;
595  auxIntData2 = -1;
596  auxDoubleData1 = 0.0;
597  auxDoubleData2 = 0.0;
598  }
599 
600  midiEvent ()
601  : midiMessage(0)
602  , midiChannel(0)
603  , midiData1(0)
604  , midiData2(0)
605  , auxUintData1(0)
606  , auxUintData2(0)
607  , auxIntData1(-1)
608  , auxIntData2(-1)
609  , auxDoubleData1(0.0)
610  , auxDoubleData2(0.0)
611  , midiSampleOffset(0)
612  , midiPitchBendValue(0)
614  , midiIsDirty(0)
615  , audioTimeStamp(0.0){}
616 
617  midiEvent& operator=(const midiEvent& data) // need this override for collections to work
618  {
619  if (this == &data)
620  return *this;
621 
622  midiMessage = data.midiMessage;
623  midiChannel = data.midiChannel;
624  midiData1 = data.midiData1;
625  midiData2 = data.midiData2;
626  auxUintData1 = data.auxUintData1;
627  auxUintData2 = data.auxUintData2;
628  auxIntData1 = data.auxIntData1;
629  auxIntData2 = data.auxIntData2;
635  midiIsDirty = data.midiIsDirty;
637 
638  return *this;
639  }
640 
641  uint32_t midiMessage = 0;
642  uint32_t midiChannel = 0;
643  uint32_t midiData1 = 0;
644  uint32_t midiData2 = 0;
645  uint32_t midiSampleOffset = 0;
646  uint32_t auxUintData1 = 0;
647  uint32_t auxUintData2 = 0;
648  int32_t auxIntData1 = 0;
649  int32_t auxIntData2 = 0;
650  double auxDoubleData1 = 0.0;
651  double auxDoubleData2 = 0.0;
652  int midiPitchBendValue = 0;
653  float midiNormalizedPitchBendValue = 0.0;
654  bool midiIsDirty = false;
655  double audioTimeStamp = 0.0;
656 };
657 
658 
670 enum messageType {
671  PLUGINGUI_DIDOPEN, /* called after successful population of GUI frame, NOT called with GUI_USER_CUSTOMOPEN*/
672  PLUGINGUI_WILLCLOSE, /* called before window is destroyed, NOT called with GUI_USER_CUSTOM_CLOSE */
673  PLUGINGUI_TIMERPING, /* timer ping for custom views */
674  PLUGINGUI_REGISTER_CUSTOMVIEW, /* register a custom view */
675  PLUGINGUI_DE_REGISTER_CUSTOMVIEW, /* un-register a custom view */
676  PLUGINGUI_REGISTER_SUBCONTROLLER, /* register a subcontroller */
677  PLUGINGUI_DE_REGISTER_SUBCONTROLLER, /* un-register a subcontroller */
678  PLUGINGUI_QUERY_HASUSERCUSTOM, /* CUSTOM GUI - reply in bHasUserCustomView */
679  PLUGINGUI_USER_CUSTOMOPEN, /* CUSTOM GUI - create your custom GUI, you must supply the code */
680  PLUGINGUI_USER_CUSTOMCLOSE, /* CUSTOM GUI - destroy your custom GUI, you must supply the code */
681  PLUGINGUI_USER_CUSTOMSYNC, /* CUSTOM GUI - re-sync the GUI */
682  PLUGINGUI_EXTERNAL_SET_NORMVALUE, // for VST3??
683  PLUGINGUI_EXTERNAL_SET_ACTUALVALUE,
684  PLUGINGUI_EXTERNAL_GET_NORMVALUE, /* currently not used */
685  PLUGINGUI_EXTERNAL_GET_ACTUALVALUE,
686  PLUGINGUI_PARAMETER_CHANGED, /* for pluginCore->guiParameterChanged(nControlIndex, fValue); */
687  PLUGIN_QUERY_DESCRIPTION, /* fill in a Rafx2PluginDescriptor for host */
688  PLUGIN_QUERY_PARAMETER, /* fill in a Rafx2PluginParameter for host inMessageData = index of parameter*/
689  PLUGIN_QUERY_TRACKPAD_X,
690  PLUGIN_QUERY_TRACKPAD_Y
691 };
692 
693 
705 struct MessageInfo
706 {
707  MessageInfo ()
708  : message(0)
709  , inMessageData(0)
710  , outMessageData(0){}
711 
712  MessageInfo (uint32_t _message)
713  : message(_message)
714  , inMessageData(0)
715  , outMessageData(0)
716  {}
717 
718  MessageInfo& operator=(const MessageInfo& data) // need this override for collections to work
719  {
720  if (this == &data)
721  return *this;
722 
723  message = data.message;
728 
729  return *this;
730  }
731 
732  uint32_t message = 0;
733  void* inMessageData = nullptr;
734  void* outMessageData = nullptr;
735 
736  std::string inMessageString;
737  std::string outMessageString;
738 };
739 
753 struct PluginInfo
754 {
755  PluginInfo() {}
756 
757  PluginInfo& operator=(const PluginInfo& data) // need this override for collections to work
758  {
759  if (this == &data)
760  return *this;
761 
762  pathToDLL = data.pathToDLL;
763 
764  return *this;
765  }
766 
767  const char* pathToDLL;
768 };
769 
770 
782 struct CreateGUIInfo
783 {
784  CreateGUIInfo()
785  : window(0)
786  , guiPluginConnector(0)
787  , guiWindowFrame(0)
788  , width(0.0)
789  , height(0.0)
790  { }
791 
792  CreateGUIInfo(void* _window, IGUIPluginConnector* _guiPluginConnector, IGUIWindowFrame* _guiWindowFrame)
793  : window(_window)
794  , guiPluginConnector(_guiPluginConnector)
795  , guiWindowFrame(_guiWindowFrame)
796  , width(0.0)
797  , height(0.0)
798  { }
799 
800  CreateGUIInfo& operator=(const CreateGUIInfo& data) // need this override for collections to work
801  {
802  if (this == &data)
803  return *this;
804 
805  window = data.window;
808  width = data.width;
809  height = data.height;
810 
811  return *this;
812  }
813 
814  void* window = nullptr;
817 
818  // --- returned
819  double width = 0.0;
820  double height = 0.0;
821 };
822 
834 struct ParameterUpdateInfo
835 {
837  : isSmoothing(0)
839  , loadingPreset(0)
841  , bufferProcUpdate(0)
842  , applyTaper(1){}
843 
844  ParameterUpdateInfo(bool _isSmoothing, bool _isVSTSampleAccurateUpdate)
845  : isSmoothing(_isSmoothing)
846  , isVSTSampleAccurateUpdate(_isVSTSampleAccurateUpdate) {
847  loadingPreset = false;
848  boundVariableUpdate = false;
849  bufferProcUpdate = false;
850  applyTaper = true;
851  }
852 
853  ParameterUpdateInfo& operator=(const ParameterUpdateInfo& data) // need this override for collections to work
854  {
855  if (this == &data)
856  return *this;
857 
858  isSmoothing = data.isSmoothing;
863  applyTaper = data.applyTaper;
864 
865  return *this;
866  }
867 
868  bool isSmoothing = false;
869  bool isVSTSampleAccurateUpdate = false;
870  bool loadingPreset = false;
871  bool boundVariableUpdate = false;
872  bool bufferProcUpdate = false;
873  bool applyTaper = true;
874 };
875 
887 enum attributeType { isFloatAttribute, isDoubleAttribute, isIntAttribute, isUintAttribute, isBoolAttribute, isVoidPtrAttribute, isStringAttribute };
888 
900 union attributeValue
901 {
902  float f;
903  double d;
904  int n;
905  unsigned int u;
906  bool b;
907  void* vp;
908 };
909 
923 {
925  : attributeID(0)
926  { memset(&value, 0, sizeof(attributeValue)); }
927 
928  AuxParameterAttribute(uint32_t _attributeID)
929  : attributeID(_attributeID) { }
930 
931  AuxParameterAttribute& operator=(const AuxParameterAttribute& data) // need this override for collections to work
932  {
933  if (this == &data)
934  return *this;
935 
936  value = data.value;
937  attributeID = data.attributeID;
938  return *this;
939  }
940 
941  void reset(uint32_t _attributeID) { memset(&value, 0, sizeof(attributeValue)); attributeID = _attributeID; }
942 
943  void setFloatAttribute(float f) { value.f = f; }
944  void setDoubleAttribute(double d) { value.d = d; }
945  void setIntAttribute(int n) { value.n = n; }
946  void setUintAttribute(unsigned int u) { value.u = u; }
947  void setBoolAttribute(bool b) { value.b = b; }
948  void setVoidPtrAttribute(void* vp) { value.vp = vp; }
949 
950  float getFloatAttribute( ) { return value.f; }
951  double getDoubleAttribute( ) { return value.d; }
952  int getIntAttribute( ) { return value.n; }
953  unsigned int getUintAttribute( ) { return value.u; }
954  bool getBoolAttribute( ) { return value.b; }
955  void* getVoidPtrAttribute( ) { return value.vp; }
956 
958  uint32_t attributeID = 0;
959 };
960 
973 struct HostInfo
974 {
975  // --- common to all APIs
976  unsigned long long uAbsoluteFrameBufferIndex = 0;
977  double dAbsoluteFrameBufferTime = 0.0;
978  double dBPM = 0.0;
979  float fTimeSigNumerator = 0.f;
980  uint32_t uTimeSigDenomintor = 0;
981 
982  // --- VST3 Specific: note these use same variable names as VST3::struct ProcessContext
983  // see ..\VST3 SDK\pluginterfaces\vst\ivstprocesscontext.h for information on decoding these
984  //
985  uint32_t state = 0;
986  long long systemTime = 0;
987  double continousTimeSamples = 0.0;
988  double projectTimeMusic = 0.0;
989  double barPositionMusic = 0.0;
990  double cycleStartMusic = 0.0;
991  double cycleEndMusic = 0.0;
992  uint32_t samplesToNextClock = 0;
993  /*
994  IF you need SMPTE information, you need to get the information yourself at the start of the process( ) function
995  where the above values are filled out. See the variables here in VST3 SDK\pluginterfaces\vst\ivstprocesscontext.h:
996 
997  int32 smpteOffsetSubframes = 0; // --- SMPTE (sync) offset in subframes (1/80 of frame)
998  FrameRate frameRate; // --- frame rate
999  */
1000 
1001  // --- AU Specific
1002  // see AUBase.h for definitions and information on decoding these
1003  //
1004  double dCurrentBeat = 0.0;
1005  bool bIsPlayingAU = false;
1006  bool bTransportStateChanged = false;
1007  uint32_t nDeltaSampleOffsetToNextBeat = 0;
1008  double dCurrentMeasureDownBeat = 0.0;
1009  bool bIsCycling = false;
1010  double dCycleStartBeat = 0.0;
1011  double dCycleEndBeat = 0.0;
1012 
1013  // --- AAX Specific
1014  // see AAX_ITransport.h for definitions and information on decoding these
1015  bool bIsPlayingAAX = false;
1016  long long nTickPosition = 0;
1017  bool bLooping = false;
1018  long long nLoopStartTick = 0;
1019  long long nLoopEndTick = 0;
1020  /*
1021  NOTE: there are two optional functions that cause a performance hit in AAX; these are commented outs;
1022  if you decide to use them, you should re-locate them to a non-realtime thread. Use at your own risk!
1023 
1024  int32_t nBars = 0;
1025  int32_t nBeats = 0;
1026  int64_t nDisplayTicks = 0;
1027  int64_t nCustomTickPosition = 0;
1028 
1029  // --- There is a minor performance cost associated with using this API in Pro Tools. It should NOT be used excessively without need
1030  midiTransport->GetBarBeatPosition(&nBars, &nBeats, &nDisplayTicks, nAbsoluteSampleLocation);
1031 
1032  // --- There is a minor performance cost associated with using this API in Pro Tools. It should NOT be used excessively without need
1033  midiTransport->GetCustomTickPosition(&nCustomTickPosition, nAbsoluteSampleLocation);
1034 
1035  NOTE: if you need SMPTE or metronome information, you need to get the information yourself at the start of the ProcessAudio( ) function
1036  see AAX_ITransport.h for definitions and information on decoding these
1037  virtual AAX_Result GetTimeCodeInfo(AAX_EFrameRate* oFrameRate, int32_t* oOffset) const = 0;
1038  virtual AAX_Result GetFeetFramesInfo(AAX_EFeetFramesRate* oFeetFramesRate, int64_t* oOffset) const = 0;
1039  virtual AAX_Result IsMetronomeEnabled(int32_t* isEnabled) const = 0;
1040  */
1041 };
1042 
1043 class IMidiEventQueue;
1044 
1056 struct ProcessBufferInfo
1057 {
1058  ProcessBufferInfo(){}
1059 
1060  /*
1061  AAX -- MUST be float
1062  AU --- Float32
1063  RAFX2 --- float
1064  VST3 --- float OR double
1065  * \brief Subscribes an audio input context field
1066  *
1067  * Defines an audio in port for host-provided information in the algorithm's
1068  * context structure.
1069  *
1070  * - Data type: float**
1071  * - Data kind: An array of float arrays, one for each input channel
1072  *
1073  */
1074  // --- audio inputs and outputs (arrays of channel-array pointers)
1075  float** inputs = nullptr;
1076  float** outputs = nullptr;
1077  float** auxInputs = nullptr;
1078  float** auxOutputs = nullptr;
1079  uint32_t numAudioInChannels = 0;
1080  uint32_t numAudioOutChannels = 0;
1081  uint32_t numAuxAudioInChannels = 0;
1082  uint32_t numAuxAudioOutChannels = 0;
1083 
1084  uint32_t numFramesToProcess = 0;
1087 
1088  // --- for future use, VCVRack
1089  float* controlSignalInputs = nullptr;
1090  float* controlSignalOutputs = nullptr;
1091  uint32_t numControlSignalInputs = 0;
1092  uint32_t numControlSignalOutputs = 0;
1093 
1094  // --- should make these const?
1095  HostInfo* hostInfo = nullptr;
1096  IMidiEventQueue* midiEventQueue = nullptr;
1097 };
1098 
1110 struct ProcessFrameInfo
1111 {
1112  ProcessFrameInfo(){ }
1113 
1114  float* audioInputFrame = nullptr;
1115  float* audioOutputFrame = nullptr;
1116  float* auxAudioInputFrame = nullptr;
1117  float* auxAudioOutputFrame = nullptr;
1118 
1119  uint32_t numAudioInChannels = 0;
1120  uint32_t numAudioOutChannels = 0;
1121  uint32_t numAuxAudioInChannels = 0;
1122  uint32_t numAuxAudioOutChannels = 0;
1123 
1126  uint32_t currentFrame = 0;
1127 
1128  // --- for future use, VCVRack
1129  float* controlSignalInputs = nullptr;
1130  float* controlSignalOutputs = nullptr;
1131  uint32_t numControlSignalInputs = 0;
1132  uint32_t numControlSignalOutputs = 0;
1133 
1134  // --- should make these const?
1135  HostInfo* hostInfo = nullptr;
1136  IMidiEventQueue* midiEventQueue = nullptr;
1137 };
1138 
1150 struct AudioProcDescriptor
1151 {
1153  : sampleRate(44100)
1154  , bitDepth(16){}
1155 
1156  AudioProcDescriptor (double _sampleRate,
1157  uint32_t _bitDepth)
1158  : sampleRate(_sampleRate)
1159  , bitDepth(_bitDepth){}
1160 
1161  AudioProcDescriptor& operator=(const AudioProcDescriptor& data) // need this override for collections to work
1162  {
1163  if (this == &data)
1164  return *this;
1165 
1166  sampleRate = data.sampleRate;
1167  bitDepth = data.bitDepth;
1168  return *this;
1169  }
1170 
1171  double sampleRate = 44100.0;
1172  uint32_t bitDepth = 16;
1173 };
1174 
1175 
1187 struct PluginDescriptor
1188 {
1189  PluginDescriptor ()
1190  : pluginName("Long Plugin Name") // max 31 chars
1191  , shortPluginName("ShortPIName") // max 15 chars
1192  , vendorName("Plugin Developer")
1193  , pluginTypeCode(pluginType::kFXPlugin) // FX or synth
1194  , hasSidechain(0)
1195  , processFrames(1) /* default operation */
1196  , wantsMIDI(1) /* default operation */
1197  , hasCustomGUI(1)
1198  , latencyInSamples(0)
1199  , tailTimeInMSec(0)
1200  , infiniteTailVST3(0)
1202  , supportedIOCombinations(0)
1204  , supportedAuxIOCombinations(0)
1205  {}
1206 
1207  // --- string descriptors
1208  std::string pluginName;
1209  std::string shortPluginName;
1210  std::string vendorName;
1211  uint32_t pluginTypeCode = 0;
1212 
1213  bool hasSidechain = false;
1214  bool processFrames = true;
1215  bool wantsMIDI = true;
1216  bool hasCustomGUI = true;
1217  uint32_t latencyInSamples = 0;
1218  double tailTimeInMSec = 0.0;
1219  bool infiniteTailVST3 = false;
1220 
1221  uint32_t numSupportedIOCombinations = 0;
1222  ChannelIOConfig* supportedIOCombinations;
1223 
1224  uint32_t numSupportedAuxIOCombinations = 0;
1225  ChannelIOConfig* supportedAuxIOCombinations;
1226 
1228  uint32_t getDefaultChannelIOConfigForChannelCount(uint32_t channelCount)
1229  {
1230  switch(channelCount)
1231  {
1232  case 0:
1233  return kCFNone;
1234  case 1:
1235  return kCFMono;
1236  case 2:
1237  return kCFStereo;
1238  case 3:
1239  return kCFLCR;
1240  case 4:
1241  return kCFQuad; // or kCFLCR
1242  case 5:
1243  return kCF5p0;
1244  case 6:
1245  return kCF5p1; // or kCF6p0
1246  case 7:
1247  return kCF6p1; // or kCF7p0Sony kCF7p0DTS
1248  case 8:
1249  return kCF7p1DTS; // or kCF7p1Sony or kCF7p1Proximity
1250  case 9:
1251  return kCF8p1; // or kCF9p0
1252  case 10:
1253  return kCF9p1; // or kCF10p0
1254  case 11:
1255  return kCF10p1;
1256  case 12:
1257  return kCF11p1; // or kCF10p2
1258  case 13:
1259  return kCF13p0; // or kCF12p2
1260  case 14:
1261  return kCF13p1;
1262  case 24:
1263  return kCF22p2;
1264 
1265  default:
1266  return 0;
1267  }
1268  }
1270  uint32_t getChannelCountForChannelIOConfig(uint32_t format)
1271  {
1272  switch(format)
1273  {
1274  case kCFNone:
1275  return 0;
1276 
1277  case kCFMono:
1278  return 1;
1279  case kCFStereo:
1280  return 2;
1281  case kCFLCR:
1282  return 3;
1283 
1284  case kCFQuad:
1285  case kCFLCRS:
1286  return 4;
1287 
1288  case kCF5p0:
1289  return 5;
1290 
1291  case kCF5p1:
1292  case kCF6p0:
1293  return 6;
1294 
1295  case kCF6p1:
1296  case kCF7p0Sony:
1297  case kCF7p0DTS:
1298  return 7;
1299 
1300  case kCF7p1Sony:
1301  case kCF7p1DTS:
1302  case kCF7p1Proximity:
1303  return 8;
1304 
1305  case kCF8p1:
1306  case kCF9p0:
1307  return 9;
1308 
1309  case kCF9p1:
1310  case kCF10p0:
1311  return 10;
1312 
1313  case kCF10p1:
1314  return 11;
1315 
1316  case kCF10p2:
1317  case kCF11p1:
1318  return 12;
1319 
1320  case kCF13p0:
1321  case kCF12p2:
1322  return 13;
1323 
1324  case kCF13p1:
1325  return 14;
1326 
1327  case kCF22p2:
1328  return 24;
1329 
1330  default:
1331  return 0;
1332  }
1333  return 0;
1334  }
1335 };
1336 
1348 struct JSControl
1349 {
1350  JSControl() {}
1351  JSControl& operator=(const JSControl& aControl)
1352  {
1353  if (this == &aControl)
1354  return *this;
1355 
1356  trackpadIndex = aControl.trackpadIndex;
1357  midiControl = aControl.midiControl;
1359  midiControlName = aControl.midiControlName;
1361  joystickValue = aControl.joystickValue;
1365  return *this;
1366  }
1367 
1368  int32_t trackpadIndex = -1;
1369  bool midiControl = false;
1370  uint32_t midiControlCommand = 0;
1371  uint32_t midiControlName = 0;
1372  uint32_t midiControlChannel = 0;
1373  double joystickValue = 0.0;
1374  bool korgVectorJoystickOrientation = false;
1375  bool enableParamSmoothing = false;
1376  double smoothingTimeInMs = 0.0;
1377 };
1378 
1379 
1380 // --------------------------------------------------------------------------------------------------------------------------- //
1381 // --- INTERFACES
1382 // --------------------------------------------------------------------------------------------------------------------------- //
1383 
1395 class ICustomView
1396 {
1397 public:
1399  virtual void updateView() = 0;
1400 
1406  virtual void pushDataValue(double data) { }
1407 
1416  virtual void sendMessage(void* data) { }
1417 };
1418 
1430 class IGUIWindowFrame
1431 {
1432 public:
1434  virtual bool setWindowFrameSize(double left = 0, double top = 0, double right = 0, double bottom = 0) = 0;
1435 
1437  virtual bool getWindowFrameSize(double& left, double& top, double& right, double& bottom) = 0;
1438 
1440  virtual void enableGUIDesigner(bool enable) { }
1441 };
1442 
1454 class IGUIView
1455 {
1456 public:
1458  virtual void setGUIWindowFrame(IGUIWindowFrame* frame) = 0;
1459 };
1460 
1461 
1473 class IGUIPluginConnector
1474 {
1475 public:
1477  virtual bool registerCustomView(std::string customViewName, ICustomView* customViewConnector) = 0;
1478 
1480  virtual bool deRegisterCustomView(ICustomView* customViewConnector) = 0;
1481 
1483  virtual bool guiDidOpen() = 0;
1484 
1486  virtual bool guiWillClose() = 0;
1487 
1489  virtual bool guiTimerPing() = 0;
1490 
1492  virtual bool registerSubcontroller(std::string subcontrollerName, ICustomView* customViewConnector) { return false; }
1493 
1495  virtual bool deRregisterSubcontroller(ICustomView* customViewConnector) { return false; }
1496 
1498  virtual uint32_t getNonBoundVariableCount() { return 0; }
1499 
1501  virtual uint32_t getNextNonBoundVariableTag(int startTag) { return -1; }
1502 
1504  virtual bool checkNonBoundValueChange(int tag, float normalizedValue) { return false; }
1505 
1507  virtual void checkSendUpdateGUI(int tag, float actualValue, bool loadingPreset, void* data1 = 0, void* data2 = 0) {}
1508 
1510  virtual void parameterChanged(int32_t controlID, double actualValue, double normalizedValue) {}
1511 
1513  virtual double getNormalizedPluginParameter(int32_t controlID) { return 0.0; }
1514 
1516  virtual void setNormalizedPluginParameter(int32_t controlID, double value) { }
1517 
1519  virtual double getActualPluginParameter(int32_t controlID) { return 0.0; }
1520 
1522  virtual void setActualPluginParameter(int32_t controlID, double value) { }
1523 
1525  virtual void beginParameterChangeGesture(int controlTag){ }
1526 
1528  virtual void endParameterChangeGesture(int controlTag){ }
1529 };
1530 
1531 
1544 {
1545 public:
1547  virtual void sendHostMessage(const HostMessageInfo& hostMessageInfo) = 0;
1548 };
1549 
1561 class IMidiEventQueue
1562 {
1563 public:
1565  virtual uint32_t getEventCount() = 0;
1566 
1568  virtual bool fireMidiEvents(uint32_t uSampleOffset) = 0;
1569 };
1570 
1571 
1584 {
1585 public:
1587  virtual uint32_t getParameterIndex() = 0;
1588 
1591  virtual bool getValueAtOffset(long int _sampleOffset, double _previousValue, double& _nextValue) = 0;
1592 
1595  virtual bool getNextValue(double& _nextValue) = 0;
1596 };
1597 
1598 // --------------------------------------------------------------------------------------------------------------------------- //
1599 // --- HELPER FUNCTIONS
1600 // --------------------------------------------------------------------------------------------------------------------------- //
1610 inline std::string numberToString(unsigned int number)
1611 {
1612  std::ostringstream strm;
1613  strm << number;
1614  std::string str = strm.str();
1615  return str;
1616 }
1617 
1627 inline std::string numberToString(int number)
1628 {
1629  std::ostringstream strm;
1630  strm << number;
1631  std::string str = strm.str();
1632  return str;
1633 }
1634 
1644 inline std::string numberToString(float number)
1645 {
1646  std::ostringstream strm;
1647  strm << number;
1648  std::string str = strm.str();
1649  return str;
1650 }
1651 
1661 inline std::string numberToString(double number)
1662 {
1663  std::ostringstream strm;
1664  strm << number;
1665  std::string str = strm.str();
1666  return str;
1667 }
1668 
1678 inline std::string boolToStdString(bool value)
1679 {
1680  std::string returnString;
1681  if (value) returnString.assign("true");
1682  else returnString.assign("false");
1683  return returnString;
1684 }
1685 
1686 
1687 #endif //_pluginstructures_h
virtual bool getWindowFrameSize(double &left, double &top, double &right, double &bottom)=0
virtual double getActualPluginParameter(int32_t controlID)
Definition: pluginstructures.h:1519
uint32_t aaxManufacturerID
aax manu ID
Definition: pluginstructures.h:244
uint32_t numSupportedIOCombinations
should support at least main 3 combos
Definition: pluginstructures.h:1221
std::string shortPluginName
name (up to 15 chars)
Definition: pluginstructures.h:1209
Information package about the current DAW session. Sample rate and bit-depth of audio.
Definition: pluginstructures.h:1150
bool boundVariableUpdate
bound variable is being udpated
Definition: pluginstructures.h:871
bool bTransportStateChanged
only notifies a change, but not what was changed to...
Definition: pluginstructures.h:1006
std::string auBundleName
AU bundle name /* MacOS only: this MUST match the bundle name which is the same as the project name *...
Definition: pluginstructures.h:261
Information that includes the message code as well as the message data.
Definition: pluginstructures.h:705
Attribute value smashed down into a union.
Definition: pluginstructures.h:900
int32_t auxIntData1
aux data (INT)
Definition: pluginstructures.h:648
uint32_t guiUpdateCode
unused
Definition: pluginstructures.h:458
std::string vst3BundleID
VST bundle ID /* MacOS only: this MUST match the bundle identifier in your info.plist file */...
Definition: pluginstructures.h:257
double dBPM
beats per minute, aka "tempo"
Definition: pluginstructures.h:978
double continousTimeSamples
project time, without loop (optional)
Definition: pluginstructures.h:987
double cycleStartMusic
Definition: pluginstructures.h:990
const char * pathToDLL
complete path to the DLL (component) without trailing backslash
Definition: pluginstructures.h:767
uint32_t midiControlCommand
MIDI CC type.
Definition: pluginstructures.h:1370
bool bIsPlayingAU
notorously incorrect in Logic - once set to true, stays stuck there
Definition: pluginstructures.h:1005
bool hasCustomGUI
default on
Definition: pluginstructures.h:1216
bool bufferProcUpdate
update at top of buffer process
Definition: pluginstructures.h:872
float ** auxInputs
aux (sidechain) input buffers
Definition: pluginstructures.h:1077
bool useCustomData
custom data flag (reserved for future use)
Definition: pluginstructures.h:354
uint32_t numAudioInChannels
audio input channel count
Definition: pluginstructures.h:1079
double actualValue
value
Definition: pluginstructures.h:392
virtual void setNormalizedPluginParameter(int32_t controlID, double value)
Definition: pluginstructures.h:1516
uint32_t pluginTypeCode
FX or synth.
Definition: pluginstructures.h:1211
Interface for VST3 parameter value update queue (sample accurate automation)
Definition: pluginstructures.h:1583
bool wantsMIDI
want MIDI (don&#39;t need to actually use it)
Definition: pluginstructures.h:1215
Information package that arrives with each new audio frame; called internally from the buffer process...
Definition: pluginstructures.h:1110
std::vector< GUIParameter > guiParameters
list of updates
Definition: pluginstructures.h:461
attributeType
AttributeType identifier for ASPiK PluginParameter auxilliary storage system. You are free to impleme...
Definition: pluginstructures.h:887
int fourCharCode
the mystic and ancient 4-character code (oooh)
Definition: pluginstructures.h:251
double projectTimeMusic
musical position in quarter notes (1.0 equals 1 quarter note)
Definition: pluginstructures.h:988
ChannelIOConfig channelIOConfig
input/output channel I/O configuration pair
Definition: pluginstructures.h:1124
virtual void setActualPluginParameter(int32_t controlID, double value)
Definition: pluginstructures.h:1522
uint32_t vst3SampleAccurateGranularity
sample accuracy granularity (update interval)
Definition: pluginstructures.h:256
uint32_t numControlSignalOutputs
num control signals out (reserved for future use)
Definition: pluginstructures.h:1092
uint32_t midiData1
BYTE data 1 as UINT.
Definition: pluginstructures.h:643
uint32_t getChannelCountForChannelIOConfig(uint32_t format)
Definition: pluginstructures.h:1270
PluginInfo & operator=(const PluginInfo &data)
Definition: pluginstructures.h:757
uint32_t bitDepth
wav file bit depth (not supported in all APIs)
Definition: pluginstructures.h:1172
bool enableVST3SampleAccurateAutomation
flag for sample accurate automation
Definition: pluginstructures.h:255
ChannelIOConfig auxChannelIOConfig
aux input/output channel I/O configuration pair
Definition: pluginstructures.h:1086
virtual bool guiTimerPing()=0
int32_t trackpadIndex
trackpad or joystick index
Definition: pluginstructures.h:1368
uint32_t numAuxAudioOutChannels
audio input channel count
Definition: pluginstructures.h:1122
messageType
Message identifier for ASPiK Core messaging system.
Definition: pluginstructures.h:670
float * controlSignalOutputs
control signals out (reserved for future use)
Definition: pluginstructures.h:1090
uint32_t controlID
ID value.
Definition: pluginstructures.h:352
uint32_t presetIndex
preset index
Definition: pluginstructures.h:424
std::vector< PresetParameter > presetParameters
list of parameters for this preset
Definition: pluginstructures.h:427
float * controlSignalInputs
control signals in (reserved for future use)
Definition: pluginstructures.h:1089
virtual bool getValueAtOffset(long int _sampleOffset, double _previousValue, double &_nextValue)=0
int midiPitchBendValue
midi pitch bend value (14-bit)
Definition: pluginstructures.h:652
std::string pluginName
name (up to 31 chars)
Definition: pluginstructures.h:1208
bool enableParamSmoothing
param smoothing on joystick (can be CPU abusive)
Definition: pluginstructures.h:1375
bool processFrames
want frames (default)
Definition: pluginstructures.h:1214
unsigned long long uAbsoluteFrameBufferIndex
the sample index at top of buffer
Definition: pluginstructures.h:976
double joystickValue
joystick value as a double
Definition: pluginstructures.h:1373
Information that defines a preset value as a control_ID::value data pair.
Definition: pluginstructures.h:371
attributeValue value
value in union form
Definition: pluginstructures.h:957
std::string vendorName
manufacturer name
Definition: pluginstructures.h:1210
virtual bool checkNonBoundValueChange(int tag, float normalizedValue)
Definition: pluginstructures.h:1504
uint32_t numControlSignalInputs
num control signals in (reserved for future use)
Definition: pluginstructures.h:1091
bool bIsPlayingAAX
flag if playing
Definition: pluginstructures.h:1015
virtual void enableGUIDesigner(bool enable)
Definition: pluginstructures.h:1440
float * audioInputFrame
audio input frame (array)
Definition: pluginstructures.h:1114
Information about a paraemeter being updated. Used when bound variables are updated. Multiple advanced uses.
Definition: pluginstructures.h:834
virtual bool guiWillClose()=0
Sample rate and bit-depth information that is passed during the reset( ) function.
Definition: pluginstructures.h:180
void * outMessageData
outgoing message data (interpretation depends on message)
Definition: pluginstructures.h:734
bool isVSTSampleAccurateUpdate
param updated with VST sample accurate automation
Definition: pluginstructures.h:869
double sampleRate
sample rate
Definition: pluginstructures.h:1171
uint32_t samplesToNextClock
MIDI Clock Resolution (24 Per Quarter Note), can be negative (nearest)
Definition: pluginstructures.h:992
uint32_t numAudioOutChannels
audio input channel count
Definition: pluginstructures.h:1120
virtual void endParameterChangeGesture(int controlTag)
Definition: pluginstructures.h:1528
float ** auxOutputs
aux outputs - for future use
Definition: pluginstructures.h:1078
uint32_t numAuxAudioInChannels
audio input channel count
Definition: pluginstructures.h:1121
uint32_t midiMessage
BYTE message as UINT.
Definition: pluginstructures.h:641
uint32_t latencyInSamples
latency
Definition: pluginstructures.h:1217
virtual bool deRregisterSubcontroller(ICustomView *customViewConnector)
Definition: pluginstructures.h:1495
uint32_t numAuxAudioInChannels
aux input channel count
Definition: pluginstructures.h:1081
float ** outputs
audio output buffers
Definition: pluginstructures.h:1076
double width
GUI width in pixels.
Definition: pluginstructures.h:819
uint32_t message
message code
Definition: pluginstructures.h:732
pluginType
Use this enum to identify the plugin category.
Definition: pluginstructures.h:61
uint32_t inputChannelFormat
input format for this I/O pair
Definition: pluginstructures.h:545
Information package that arrives with each new audio buffer process cycle. Contains everything needed...
Definition: pluginstructures.h:1056
virtual bool getNextValue(double &_nextValue)=0
Information about a GUI update message; this is for sending GUI control information from the plugin c...
Definition: pluginstructures.h:443
virtual void checkSendUpdateGUI(int tag, float actualValue, bool loadingPreset, void *data1=0, void *data2=0)
Definition: pluginstructures.h:1507
Custom interface so that GUI can pass information to plugin shell in a thread-safe manner...
Definition: pluginstructures.h:1473
float fTimeSigNumerator
time signature numerator
Definition: pluginstructures.h:979
uint32_t uTimeSigDenomintor
time signature denominator
Definition: pluginstructures.h:980
std::string presetName
preset name
Definition: pluginstructures.h:425
bool midiControl
MIDI enabled.
Definition: pluginstructures.h:1369
bool bLooping
looping flag
Definition: pluginstructures.h:1017
Custom View interface to allow plugin core to create safe communication channels with GUI custom view...
Definition: pluginstructures.h:1395
IMidiEventQueue * midiEventQueue
MIDI event queue.
Definition: pluginstructures.h:1096
ChannelIOConfig channelIOConfig
input/output channel I/O configuration pair
Definition: pluginstructures.h:1085
uint32_t state
a combination of the values from StatesAndFlags; use to decode validity of other VST3 items in this s...
Definition: pluginstructures.h:985
int32_t auxIntData2
aux data (INT)
Definition: pluginstructures.h:649
uint32_t nDeltaSampleOffsetToNextBeat
samples to next beat
Definition: pluginstructures.h:1007
bool applyTaper
add tapering to udpate
Definition: pluginstructures.h:873
Incoming data from a vector joystick.
Definition: pluginstructures.h:276
virtual void parameterChanged(int32_t controlID, double actualValue, double normalizedValue)
Definition: pluginstructures.h:1510
double audioTimeStamp
time stamp (not all APIs)
Definition: pluginstructures.h:655
hostMessage
Use this enum to identify a message to send to the plugin shell (host)
Definition: pluginstructures.h:483
IGUIWindowFrame * guiWindowFrame
GUI-to-frame interface (resizing)
Definition: pluginstructures.h:816
aaxPlugInCategory
Use this enum to identify the AAX plugin category.
Definition: pluginstructures.h:81
Information package about the plugin itself, consisting mainly of simple strings and ID values...
Definition: pluginstructures.h:1187
double sampleRate
sample rate
Definition: pluginstructures.h:191
long long nTickPosition
"Tick" is represented here as 1/960000 of a quarter note
Definition: pluginstructures.h:1016
Definition: pluginstructures.h:485
uint32_t midiSampleOffset
sample offset of midi event within audio buffer
Definition: pluginstructures.h:645
uint32_t controlID
ID.
Definition: pluginstructures.h:391
Double buffered queue for MIDI messages.
Definition: pluginstructures.h:1561
void * customData
unused
Definition: pluginstructures.h:464
double dCycleEndBeat
loop end
Definition: pluginstructures.h:1011
Definition: pluginstructures.h:406
uint32_t midiChannel
BYTE channel as UINT.
Definition: pluginstructures.h:642
bool loadingPreset
a preset is being loaded
Definition: pluginstructures.h:870
double auxDoubleData1
aux data (double)
Definition: pluginstructures.h:650
IGUIPluginConnector * guiPluginConnector
GUI-to-plugin-shell interface.
Definition: pluginstructures.h:815
virtual uint32_t getParameterIndex()=0
bool midiIsDirty
dirty flag
Definition: pluginstructures.h:654
HostInfo * hostInfo
pointer to host data for this buffer
Definition: pluginstructures.h:1095
bool hasSidechain
sidechain flag
Definition: pluginstructures.h:1213
virtual void beginParameterChangeGesture(int controlTag)
Definition: pluginstructures.h:1525
long long systemTime
system time in nanoseconds (optional)
Definition: pluginstructures.h:986
virtual double getNormalizedPluginParameter(int32_t controlID)
Definition: pluginstructures.h:1513
float * audioOutputFrame
audio output frame (array)
Definition: pluginstructures.h:1115
Structure of a pair of channel format enumerators that set an input/output channel I/O capability...
Definition: pluginstructures.h:523
uint32_t numAudioInChannels
audio input channel count
Definition: pluginstructures.h:1119
virtual uint32_t getEventCount()=0
Identifiers, GUIDs and other strings and number id values, API specific.
Definition: pluginstructures.h:206
void * inMessageData
incoming message data (interpretation depends on message)
Definition: pluginstructures.h:733
float ** inputs
audio input buffers
Definition: pluginstructures.h:1075
uint32_t aaxProductID
aax ID
Definition: pluginstructures.h:245
float * controlSignalOutputs
control signals out (reserved for future use)
Definition: pluginstructures.h:1130
double tailTimeInMSec
tail time
Definition: pluginstructures.h:1218
uint32_t numAuxAudioOutChannels
aux output channel count (not used)
Definition: pluginstructures.h:1082
std::string vst3FUID
VST GUID.
Definition: pluginstructures.h:254
float * controlSignalInputs
control signals in (reserved for future use)
Definition: pluginstructures.h:1129
Information about auxilliary parameter details - purely customizeable. This uses the attributeValue u...
Definition: pluginstructures.h:922
ChannelIOConfig auxChannelIOConfig
aux input/output channel I/O configuration pair
Definition: pluginstructures.h:1125
float * auxAudioInputFrame
aux input frame (array)
Definition: pluginstructures.h:1116
uint32_t bitDepth
bit depth (not available in all APIs)
Definition: pluginstructures.h:192
channelFormat
Use this enum to identify plugin channel formats. Steinberg calls these "speaker arrangements".
Definition: pluginstructures.h:114
std::string boolToStdString(bool value)
converts bool value to std::string
Definition: pluginstructures.h:1678
uint32_t numControlSignalInputs
num control signals in (reserved for future use)
Definition: pluginstructures.h:1131
uint32_t attributeID
attribute ID
Definition: pluginstructures.h:958
uint32_t numAudioOutChannels
audio output channel count
Definition: pluginstructures.h:1080
uint32_t midiData2
BYTE data 2 as UINT.
Definition: pluginstructures.h:644
uint32_t midiControlName
MIDI CC.
Definition: pluginstructures.h:1371
virtual bool registerSubcontroller(std::string subcontrollerName, ICustomView *customViewConnector)
Definition: pluginstructures.h:1492
double auxDoubleData2
aux data (double)
Definition: pluginstructures.h:651
virtual bool deRegisterCustomView(ICustomView *customViewConnector)=0
double barPositionMusic
last bar start position, in quarter notes
Definition: pluginstructures.h:989
double cycleEndMusic
cycle end in quarter notes
Definition: pluginstructures.h:991
virtual void sendMessage(void *data)
Definition: pluginstructures.h:1416
uint32_t numControlSignalOutputs
num control signals out (reserved for future use)
Definition: pluginstructures.h:1132
void * window
window handle or NSView*
Definition: pluginstructures.h:814
Information that defines a single GUI parameter&#39;s possible values and ID.
Definition: pluginstructures.h:331
Information package a joystick or trackpad GUI interaction.
Definition: pluginstructures.h:1348
long long nLoopStartTick
start tick for loop
Definition: pluginstructures.h:1018
std::string aaxBundleID
AAX bundle /* MacOS only: this MUST match the bundle identifier in your info.plist file */...
Definition: pluginstructures.h:247
Structure that is used during GUI creation to safely pass information about the GUI size and interfac...
Definition: pluginstructures.h:782
double dCurrentMeasureDownBeat
current downbeat
Definition: pluginstructures.h:1008
virtual void setGUIWindowFrame(IGUIWindowFrame *frame)=0
auxGUIIdentifier
Identifier enum for aux parameter information. Not used in ASPiK though is used for RAFX plugins (not...
Definition: pluginstructures.h:158
std::string aaxEffectID
aax Effect ID
Definition: pluginstructures.h:246
float * auxAudioOutputFrame
aux output frame (array) for future use
Definition: pluginstructures.h:1117
virtual bool registerCustomView(std::string customViewName, ICustomView *customViewConnector)=0
Custom interface to allow resizing of GUI window; this is mainly used for the GUI designer...
Definition: pluginstructures.h:1454
Custom interface to allow resizing of GUI window; this is mainly used for the GUI designer...
Definition: pluginstructures.h:1430
Structure that is used during the base class initilize( ) funciton call, after object instantiation i...
Definition: pluginstructures.h:753
uint32_t outputChannelFormat
output format for this I/O pair
Definition: pluginstructures.h:546
virtual uint32_t getNextNonBoundVariableTag(int startTag)
Definition: pluginstructures.h:1501
double dCurrentBeat
current DAW beat value
Definition: pluginstructures.h:1004
double actualValue
actual value
Definition: pluginstructures.h:353
Information from the host that is updated on each buffer process cycle; includes BPM, time signature, SMPTE and other data. The values in the stock structure are consistent across most APIs, however others may be added (commnted out here)
Definition: pluginstructures.h:973
double smoothingTimeInMs
JS smoothing time.
Definition: pluginstructures.h:1376
bool infiniteTailVST3
VST3 infinite tail flag.
Definition: pluginstructures.h:1219
uint32_t aaxPluginCategoryCode
aax plugin category
Definition: pluginstructures.h:248
uint32_t getDefaultChannelIOConfigForChannelCount(uint32_t channelCount)
Definition: pluginstructures.h:1228
virtual void updateView()=0
double dCycleStartBeat
loop start
Definition: pluginstructures.h:1010
virtual void sendHostMessage(const HostMessageInfo &hostMessageInfo)=0
std::string inMessageString
incoming message data as a std::string (interpretation depends on message)
Definition: pluginstructures.h:736
uint32_t numFramesToProcess
frame count in this buffer
Definition: pluginstructures.h:1084
Custom interface to send the plugin shell a message from plugin core.
Definition: pluginstructures.h:1543
HostInfo * hostInfo
pointer to host data for this buffer
Definition: pluginstructures.h:1135
std::string outMessageString
outgoing message data as a std::string (interpretation depends on message)
Definition: pluginstructures.h:737
virtual uint32_t getNonBoundVariableCount()
Definition: pluginstructures.h:1498
bool korgVectorJoystickOrientation
vector joystick orientation
Definition: pluginstructures.h:1374
std::string numberToString(unsigned int number)
converts unsigned int value to std::string
Definition: pluginstructures.h:1610
double height
GUI height in pixels.
Definition: pluginstructures.h:820
float midiNormalizedPitchBendValue
normalized bitch bend value
Definition: pluginstructures.h:653
bool bIsCycling
looping
Definition: pluginstructures.h:1009
uint32_t midiControlChannel
MIDI CC Channel.
Definition: pluginstructures.h:1372
uint32_t currentFrame
index of this frame
Definition: pluginstructures.h:1126
std::string auBundleID
AU bundle ID /* MacOS only: this MUST match the bundle identifier in your info.plist file */...
Definition: pluginstructures.h:260
IMidiEventQueue * midiEventQueue
MIDI event queue.
Definition: pluginstructures.h:1136
uint32_t numSupportedAuxIOCombinations
should support at least main 3 combos
Definition: pluginstructures.h:1224
void * customData
custom data (reserved for future use)
Definition: pluginstructures.h:357
virtual bool setWindowFrameSize(double left=0, double top=0, double right=0, double bottom=0)=0
virtual void pushDataValue(double data)
Definition: pluginstructures.h:1406
virtual bool guiDidOpen()=0
uint32_t auxUintData1
aux data (UINT)
Definition: pluginstructures.h:646
long long nLoopEndTick
end tick for loop
Definition: pluginstructures.h:1019
virtual bool fireMidiEvents(uint32_t uSampleOffset)=0
uint32_t auxUintData2
aux data (UINT)
Definition: pluginstructures.h:647
Information about a MIDI event.
Definition: pluginstructures.h:561
bool isSmoothing
param is being (bulk) smoothed
Definition: pluginstructures.h:868
bool useCustomData
unused
Definition: pluginstructures.h:467
double dAbsoluteFrameBufferTime
the time in seconds of the sample index at top of buffer
Definition: pluginstructures.h:977