22 #ifndef AAX_PARAMETERS_H 23 #define AAX_PARAMETERS_H 25 #include "AAX_CEffectParameters.h" 26 #pragma warning(disable : 4985) // --- 'ceil': attributes not present on previous declaration NOTE: for VS2008 only, see the google for more info 28 #include "AAX_CAtomicQueue.h" 29 #include "AAX_IParameter.h" 30 #include "AAX_IMIDINode.h" 31 #include "AAX_IString.h" 32 #include "AAX_IEffectDescriptor.h" 33 #include "AAX_IComponentDescriptor.h" 34 #include "AAX_IPropertyMap.h" 42 #include "plugincore.h" 43 #include "customcontrols.h" 46 #include <CoreFoundation/CoreFoundation.h> 55 const AAX_CTypeID PLUGIN_CUSTOMDATA_ID = 0;
58 const AAX_CTypeID GR_MeterID =
'grMT';
59 const unsigned int meterTapCount = 1;
120 float** inputBufferPtrs;
121 float** outputBufferPtrs;
122 int32_t* bufferLength;
127 #ifdef WANT_SIDECHAIN 128 int32_t* sidechainChannel;
132 AAX_IMIDINode* midiInputNode;
133 AAX_IMIDINode* midiTransportNode;
136 int64_t* currentStateNum;
140 #define kMaxAdditionalMIDINodes 15 141 #define kMaxAuxOutputStems 32 153 #define kSynchronizedParameterQueueSize 64 162 typedef std::pair<AAX_CParamID const, const AAX_IParameterValue*>
TParamValPair;
183 static AAX_CEffectParameters* AAX_CALLBACK
Create();
194 virtual AAX_Result
ResetFieldData (AAX_CFieldIndex inFieldIndex,
void * oData, uint32_t iDataSize)
const AAX_OVERRIDE;
203 static AAX_Result
StaticDescribe(AAX_IComponentDescriptor& outDesc);
206 virtual AAX_Result
GetCustomData(AAX_CTypeID iDataBlockID, uint32_t iDataSize,
void* oData, uint32_t* oDataWritten)
const AAX_OVERRIDE;
252 AAX_ASSERT(sCap > mSize);
255 mElem[mSize++] = inElem;
261 AAX_ASSERT(sCap >= mSize + inOther.mSize);
262 for (int32_t i = 0; i < inOther.mSize; ++i)
264 Add(inOther.mElem[i]);
268 void Append(
const std::list<TParamValPair*>& inOther)
270 AAX_ASSERT(sCap >= mSize + (int64_t)inOther.size());
271 for (std::list<TParamValPair*>::const_iterator iter = inOther.begin(); iter != inOther.end(); ++iter)
277 void Merge(AAX_IPointerQueue<TParamValPair>& inOther)
282 if (NULL == val) {
break; }
289 std::memset(mElem, 0x0,
sizeof(mElem));
298 typedef std::set<const AAX_IParameter*> TParamSet;
299 typedef std::pair<int64_t, std::list<TParamValPair*> > TNumberedParamStateList;
300 typedef AAX_CAtomicQueue<TNumberedParamStateList, 256> TNumberedStateListQueue;
302 typedef AAX_CAtomicQueue<const TParamValPair, 16*kSynchronizedParameterQueueSize> TParamValPairQueue;
305 void DeleteUsedParameterChanges();
306 std::set<std::string> mSynchronizedParameters;
307 int64_t mStateCounter;
308 TParamSet mDirtyParameters;
309 TNumberedStateListQueue mQueuedParameterChanges;
310 TNumberedStateListQueue mFinishedParameterChanges;
311 TParamValPairQueue mFinishedParameterValues;
312 int64_t mCurrentStateNum;
315 bool softBypass =
false;
322 AAX_CParameterManager mMeterParameterManager;
324 AAX_Result SetMeterParameterNormalizedValue (AAX_CParamID iParameterID,
double aValue)
326 AAX_IParameter* parameter = mMeterParameterManager.GetParameterByID(iParameterID);
328 return AAX_ERROR_INVALID_PARAMETER_ID;
330 parameter->SetNormalizedValue ( aValue );
335 uint32_t getChannelFormatForAAXStemFormat(AAX_EStemFormat format)
339 case AAX_eStemFormat_None: {
342 case AAX_eStemFormat_Mono: {
345 case AAX_eStemFormat_Stereo: {
348 case AAX_eStemFormat_LCR: {
351 case AAX_eStemFormat_LCRS: {
354 case AAX_eStemFormat_Quad: {
357 case AAX_eStemFormat_5_0: {
360 case AAX_eStemFormat_5_1: {
363 case AAX_eStemFormat_6_0: {
366 case AAX_eStemFormat_6_1: {
369 case AAX_eStemFormat_7_0_SDDS: {
372 case AAX_eStemFormat_7_0_DTS: {
375 case AAX_eStemFormat_7_1_SDDS: {
378 case AAX_eStemFormat_7_1_DTS: {
381 case AAX_eStemFormat_7_1_2: {
382 return kCF7p1Proximity; }
390 #if defined _WINDOWS || defined _WINDLL 391 wchar_t* convertCharArrayToLPCWSTR(
const char* charArray)
393 wchar_t* wString =
new wchar_t[4096];
394 MultiByteToWideChar(CP_ACP, 0, charArray, -1, wString, 4096);
399 char* getMyDLLDirectory(
const char* dllName)
401 wchar_t* cPluginName = convertCharArrayToLPCWSTR(dllName);
402 HMODULE hmodule = GetModuleHandle(cPluginName);
405 memset(&dir[0], 0, MAX_PATH*
sizeof(TCHAR));
406 dir[MAX_PATH-1] =
'\0';
409 GetModuleFileName(hmodule, &dir[0], MAX_PATH);
414 std::wstring backslash(L
"\\");
415 std::wstring strPlugin(cPluginName);
416 std::wstring strDir(&dir[0]);
417 int pathLen = strDir.size() - strPlugin.size() - backslash.size();
420 std::wstring strPath = strDir.substr(0, pathLen);
421 char* str =
new char[MAX_PATH];
422 sprintf(str,
"%ls", strPath.c_str());
423 delete[] cPluginName;
431 char* getMyComponentDirectory(CFStringRef bundleID)
433 if (bundleID !=
nullptr)
435 CFBundleRef helixBundle = CFBundleGetBundleWithIdentifier( bundleID );
436 if(helixBundle !=
nullptr)
438 CFURLRef bundleURL = CFBundleCopyBundleURL ( helixBundle );
439 if(bundleURL !=
nullptr)
441 CFURLRef componentFolderPathURL = CFURLCreateCopyDeletingLastPathComponent(
nullptr, bundleURL);
443 CFStringRef myComponentPath = CFURLCopyFileSystemPath(componentFolderPathURL, kCFURLPOSIXPathStyle);
444 CFRelease(componentFolderPathURL);
446 if(myComponentPath !=
nullptr)
448 int nSize = CFStringGetLength(myComponentPath);
449 char* path =
new char[nSize+1];
450 memset(path, 0, (nSize+1)*
sizeof(
char));
452 bool success = CFStringGetCString(myComponentPath, path, nSize+1, kCFStringEncodingASCII);
453 CFRelease(myComponentPath);
455 if(success)
return path;
458 CFRelease(bundleURL);
492 switch(hostMessageInfo.hostMessage)
498 for (uint32_t i = 0; i < guiUpdateData.
guiParameters.size(); i++)
502 std::stringstream str;
504 AAX_IParameter* oParameter;
505 AAX_Result result =
aaxParameters->GetParameter(str.str().c_str(), &oParameter);
506 if(AAX_SUCCESS == result)
508 oParameter->SetValueWithDouble(guiParam.
actualValue);
513 for (uint32_t i = 0; i < guiUpdateData.
guiParameters.size(); i++)
612 for (customViewControllerMap::const_iterator it = customViewMap.begin(), end = customViewMap.end(); it != end; ++it)
630 std::stringstream str;
631 str << controlID + 1;
634 if(AAX_SUCCESS == result)
644 std::stringstream str;
645 str << controlID + 1;
646 aaxParameters->SetParameterNormalizedValue(str.str().c_str(), value);
654 std::stringstream str;
665 std::stringstream str;
689 MessageInfo info(PLUGINGUI_REGISTER_SUBCONTROLLER);
707 MessageInfo info(PLUGINGUI_DE_REGISTER_SUBCONTROLLER);
724 customViewControllerMap::const_iterator it = customViewMap.find(customViewName);
725 if (it != customViewMap.end())
733 customViewMap.insert(std::make_pair(customViewName, pCVC));
755 MessageInfo info(PLUGINGUI_DE_REGISTER_CUSTOMVIEW);
779 for (customViewControllerMap::const_iterator it = customViewMap.begin(), end = customViewMap.end(); it != end; ++it)
781 it->second->clearCustomViewPtr();
785 it->second->clearCustomViewPtr();
824 for (customViewControllerMap::const_iterator it = customViewMap.begin(), end = customViewMap.end(); it != end; ++it)
826 if (it->second->getCustomViewPtr() == customViewConnector)
839 if (it->second->getCustomViewPtr() == customViewConnector)
877 void setMIDIpackets(
const AAX_CMidiPacket*& _ioPacketPtr, uint32_t& _midiBuffersize)
895 const uint8_t uMessage = (
ioPacketPtr->mData[0] & 0xF0);
896 const uint8_t uChannel = (
ioPacketPtr->mData[0] & 0x0F);
900 event.midiChannel = (
unsigned int)uChannel;
901 event.midiData1 = (
unsigned int)
ioPacketPtr->mData[1];
903 event.midiSampleOffset = sampleOffset;
std::pair< AAX_CParamID const, const AAX_IParameterValue * > TParamValPair
Defines a parameter-value pair for the monolithic parameters AAX programming paradigm; this is very w...
Definition: AAXPluginParameters.h:162
Information that includes the message code as well as the message data.
Definition: pluginstructures.h:705
CustomViewController * getCustomViewController(ICustomView *customViewConnector)
Definition: AAXPluginParameters.h:822
The AAXPluginParameters object implements the monolithic parameters AAX plugin programming paradigm w...
Definition: AAXPluginParameters.h:176
uint32_t midiBuffersize
midi buffer size for each bunch of packets
Definition: AAXPluginParameters.h:918
virtual AAX_Result ResetFieldData(AAX_CFieldIndex inFieldIndex, void *oData, uint32_t iDataSize) const AAX_OVERRIDE
AAX Override.
Definition: AAXPluginParameters.cpp:797
AAXPluginParameters * aaxParameters
the parent object
Definition: AAXPluginParameters.h:814
virtual bool guiWillClose()
Definition: AAXPluginParameters.h:775
std::vector< GUIParameter > guiParameters
list of updates
Definition: pluginstructures.h:461
void setMIDIpackets(const AAX_CMidiPacket *&_ioPacketPtr, uint32_t &_midiBuffersize)
Definition: AAXPluginParameters.h:877
The CustomViewController is part of the safe ICustomView feature in ASPiK. The CustomViewController m...
Definition: AAXPluginParameters.h:539
virtual void updateView()
Definition: AAXPluginParameters.h:547
virtual bool processMIDIEvent(midiEvent &event)
process a MIDI event
Definition: plugincore.cpp:415
See AAX_CMonolithicParameters in SDK; this is part of the strict parameter synchronization in monolit...
Definition: AAXPluginParameters.h:231
void UpdatePluginParameters(const TParamValPair *inSynchronizedParamValues[], int32_t inNumSynchronizedParamValues)
called once per buffer process operation to update any parameters that changed during the buffer fill...
Definition: AAXPluginParameters.cpp:401
virtual void pushDataValue(double data)
Definition: AAXPluginParameters.h:554
PluginCore * pluginCore
core
Definition: AAXPluginParameters.h:916
#define kSynchronizedParameterQueueSize
This is the maximum size of the plugin-core's parameter list; make sure to adjust itg if your core ne...
Definition: AAXPluginParameters.h:153
virtual AAX_Result UpdateParameterNormalizedValue(AAX_CParamID iParameterID, double iValue, AAX_EUpdateSource iSource)
called when a parameter needs to be updated (aka it is "dirty") as part of the AAX monolithic paramet...
Definition: AAXPluginParameters.cpp:763
virtual bool deRregisterSubcontroller(ICustomView *customViewConnector)
Definition: AAXPluginParameters.h:700
uint32_t controlID
ID value.
Definition: pluginstructures.h:352
static AAX_Result StaticDescribe(AAX_IComponentDescriptor &outDesc)
static describe function that exists as an object member and is part of the monolithic programming pa...
Definition: AAXPluginParameters.cpp:635
static void AAX_CALLBACK StaticRenderAudio(AAXAlgorithm *const inInstancesBegin[], const void *inInstancesEnd)
static callback function that exists as an object member and is part of the monolithic programming pa...
Definition: AAXPluginParameters.cpp:597
void AddSynchronizedParameter(const AAX_IParameter &inParameter)
called to add parameters to the synchronized list; this is only called once during EffectInit( ) as p...
Definition: AAXPluginParameters.cpp:742
void clearCustomViewPtr()
Definition: AAXPluginParameters.h:574
virtual bool processMessage(MessageInfo &messageInfo)
For Custom View and Custom Sub-Controller Operations.
Definition: plugincore.cpp:355
virtual bool registerCustomView(std::string customViewName, ICustomView *customViewConnector)
Definition: AAXPluginParameters.h:719
virtual bool checkNonBoundValueChange(int tag, float normalizedValue)
Definition: AAXPluginParameters.h:801
CustomViewController(ICustomView *_customViewIF)
Definition: AAXPluginParameters.h:543
void updateOutboundAAXParameters()
threadsafe update of outbound parameters (meter variables) for GUI.
Definition: AAXPluginParameters.cpp:959
Structure of data that is passed to GUI object once at creation time.
Definition: AAXPluginParameters.h:78
void ProcessAudio(AAXAlgorithm *ioRenderInfo, const TParamValPair *inSynchronizedParamValues[], int32_t inNumSynchronizedParamValues)
audio processing function; note that ALL algorithms point to this function so we have to decode chann...
Definition: AAXPluginParameters.cpp:478
virtual unsigned int getEventCount()
Definition: AAXPluginParameters.h:885
uint32_t midiMessage
BYTE message as UINT.
Definition: pluginstructures.h:641
virtual AAX_Result GenerateCoefficients() AAX_OVERRIDE
AAX Override.
Definition: AAXPluginParameters.cpp:696
virtual AAX_Result GetCustomData(AAX_CTypeID iDataBlockID, uint32_t iDataSize, void *oData, uint32_t *oDataWritten) const AAX_OVERRIDE
note the data that is transferred to GUI; the core is ONLY used for initialization and then it is unu...
Definition: AAXPluginParameters.cpp:159
const AAX_CMidiPacket * ioPacketPtr
array of packets
Definition: AAXPluginParameters.h:917
Information about a GUI update message; this is for sending GUI control information from the plugin c...
Definition: pluginstructures.h:443
virtual bool deRegisterCustomView(ICustomView *customViewConnector)
Definition: AAXPluginParameters.h:747
AAXPluginParameters()
object constructor; this creates the ASPiK core and all of its required interfaces.
Definition: AAXPluginParameters.cpp:75
Custom interface so that GUI can pass information to plugin shell in a thread-safe manner...
Definition: pluginstructures.h:1474
PluginCore * pluginCore
the core object
Definition: AAXPluginParameters.h:812
GUIPluginConnector(AAXPluginParameters *_aaxParameters, PluginCore *_pluginCore)
Definition: AAXPluginParameters.h:603
Custom View interface to allow plugin core to create safe communication channels with GUI custom view...
Definition: pluginstructures.h:1396
void updateHostInfo(AAXAlgorithm *ioRenderInfo, HostInfo *hostInfo)
called once per buffer process operation to set the host information structure for the core ...
Definition: AAXPluginParameters.cpp:434
virtual void parameterChanged(int32_t controlID, double actualValue, double)
Definition: AAXPluginParameters.h:619
virtual void endParameterChangeGesture(int controlTag)
Definition: AAXPluginParameters.h:661
Definition: pluginstructures.h:485
AAXMIDIEventQueue(PluginCore *_pluginCore)
Definition: AAXPluginParameters.h:867
Double buffered queue for MIDI messages.
Definition: pluginstructures.h:1562
Processing structure; this is described in detail in Designing Audio Effects in C++ 2nd Ed...
Definition: AAXPluginParameters.h:116
virtual bool guiParameterChanged(int32_t controlID, double actualValue)
has nothing to do with actual variable or updated variable (binding)
Definition: plugincore.cpp:326
The GUIPluginConnector interface creates a safe message mechanism for the GUI to issue requests to th...
Definition: AAXPluginParameters.h:599
virtual void setNormalizedPluginParameter(int32_t controlID, double value)
Definition: AAXPluginParameters.h:641
std::map< std::string, CustomViewController * > customViewControllerMap
map of custom view controllers
Definition: AAXPluginParameters.h:818
AAX_IEffectParameters * aaxParameters
parent parameters; lifelong existence
Definition: AAXPluginParameters.h:524
AAX_Result GetParameterNormalizedValue(AAX_CParamID iParameterID, double *oValuePtr) const AAX_OVERRIDE
allows threadsafe getting of parameters for GUI; modified to differentiate beteen meters to prevent a...
Definition: AAXPluginParameters.cpp:924
Back-pointer to the parameters; this is described in detail in Designing Audio Effects in C++ 2nd Ed...
Definition: AAXPluginParameters.h:97
virtual double getNormalizedPluginParameter(int32_t controlID)
Definition: AAXPluginParameters.h:626
virtual AAX_Result TimerWakeup() AAX_OVERRIDE
AAX Override.
Definition: AAXPluginParameters.cpp:906
void * inMessageData
incoming message data (interpretation depends on message)
Definition: pluginstructures.h:733
The AAXMIDIEventQueue interface queues incoming MIDI messages and blasts them out during the buffer p...
Definition: AAXPluginParameters.h:863
virtual bool registerSubcontroller(std::string subcontrollerName, ICustomView *customViewConnector)
Definition: AAXPluginParameters.h:672
uint32_t midiData2
BYTE data 2 as UINT.
Definition: pluginstructures.h:644
void setCustomViewPtr(ICustomView *_customViewIF)
Definition: AAXPluginParameters.h:568
CustomViewController * getCustomSubController(ICustomView *customViewConnector)
Definition: AAXPluginParameters.h:835
virtual bool guiDidOpen()
Definition: AAXPluginParameters.h:767
The PluginCore object is the default PluginBase derived object for ASPiK projects. Note that you are fre to change the name of this object (as long as you change it in the compiler settings, etc...)
Definition: plugincore.h:43
virtual ~GUIPluginConnector()
Definition: AAXPluginParameters.h:606
virtual void sendMessage(void *data)
Definition: pluginstructures.h:1417
Information that defines a single GUI parameter's possible values and ID.
Definition: pluginstructures.h:331
virtual bool fireMidiEvents(unsigned int sampleOffset)
Definition: AAXPluginParameters.h:891
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
virtual void updateView()=0
std::string inMessageString
incoming message data as a std::string (interpretation depends on message)
Definition: pluginstructures.h:736
Custom interface to send the plugin shell a message from plugin core.
Definition: pluginstructures.h:1544
The PluginHostConnector implements the IPluginHostConnector interface for the plugin shell object...
Definition: AAXPluginParameters.h:479
static AAX_CEffectParameters *AAX_CALLBACK Create()
creation mechanism for this object
Definition: AAXPluginParameters.cpp:59
virtual void sendHostMessage(const HostMessageInfo &hostMessageInfo)
process a message; by default it processes sendGUIUpdate to safely send a parameter change event but ...
Definition: AAXPluginParameters.h:490
virtual void beginParameterChangeGesture(int controlTag)
Definition: AAXPluginParameters.h:650
const ICustomView * getCustomViewPtr()
Definition: AAXPluginParameters.h:571
customViewControllerMap customSubControllerMap
map of custom sub-controllers
Definition: AAXPluginParameters.h:833
virtual void pushDataValue(double data)
Definition: pluginstructures.h:1407
virtual void sendMessage(void *data)
Definition: AAXPluginParameters.h:561
virtual bool guiTimerPing()
Definition: AAXPluginParameters.h:793
virtual AAX_Result EffectInit() AAX_OVERRIDE
AAX Override.
Definition: AAXPluginParameters.cpp:185
virtual ~AAXPluginParameters()
object destructor; this destroys the ASPiK core and all of its required interfaces.
Definition: AAXPluginParameters.cpp:138
Information about a MIDI event.
Definition: pluginstructures.h:561