37 ParamTuple(
int idx = kNoParameter,
double value = 0.)
46 SysExData(
int offset = 0,
int size = 0,
const void* pData = 0)
50 assert(size < MAX_SYSEX_SIZE);
53 memcpy(mData, pData, size);
55 memset(mData, 0, MAX_SYSEX_SIZE);
60 uint8_t mData[MAX_SYSEX_SIZE];
73 static inline int GetBytes(
const uint8_t* pSrc,
int srcSize,
void* pDst,
int nBytesToCopy,
int startPos)
75 int endPos = startPos + nBytesToCopy;
76 if (startPos >= 0 && endPos <= srcSize)
78 memcpy(pDst, pSrc + startPos, nBytesToCopy);
90 static inline int GetStr(
const uint8_t* pSrc,
int srcSize, WDL_String& str,
int startPos)
93 int strStartPos =
GetBytes(pSrc, srcSize, &len,
sizeof(len), startPos);
96 int strEndPos = strStartPos + len;
97 if (strEndPos <= srcSize)
100 str.Set((
char*) (pSrc + strStartPos), len);
122 int magic = IPLUG_VERSION_MAGIC;
124 int ver = IPLUG_VERSION;
134 int magic = 0, ver = 0;
135 int magicpos = chunk.
Get(&magic, position);
137 if (magicpos > position && magic == IPLUG_VERSION_MAGIC)
138 position = chunk.
Get(&ver, magicpos);
147 inline int PutBytes(
const void* pSrc,
int nBytesToCopy)
149 int n = mBytes.GetSize();
150 mBytes.Resize(n + nBytesToCopy);
151 memcpy(mBytes.Get() + n, pSrc, nBytesToCopy);
152 return mBytes.GetSize();
160 inline int GetBytes(
void* pDst,
int nBytesToCopy,
int startPos)
const
170 inline int Put(
const T* pVal)
181 inline int Get(T* pDst,
int startPos)
const
183 return GetBytes(pDst,
sizeof(T), startPos);
191 int slen = (int) strlen(str);
200 inline int GetStr(WDL_String& str,
int startPos)
const
223 return mBytes.GetSize();
231 int n = mBytes.GetSize();
232 mBytes.Resize(newSize);
235 memset(mBytes.Get() + n, 0, (newSize - n));
259 return (otherChunk.
Size() ==
Size() && !memcmp(otherChunk.mBytes.Get(), mBytes.Get(),
Size()));
263 WDL_TypedBuf<uint8_t> mBytes;
270 IByteStream(
const void *pData,
int dataSize) : mBytes(
reinterpret_cast<const uint8_t *
>(pData)), mSize(dataSize) {}
278 inline int GetBytes(
void* pDst,
int nBytesToCopy,
int startPos)
const
289 inline int Get(T* pDst,
int startPos)
const
291 return GetBytes(pDst,
sizeof(T), startPos);
298 inline int GetStr(WDL_String& str,
int startPos)
const
315 return (otherStream.
Size() ==
Size() && !memcmp(otherStream.mBytes, mBytes,
Size()));
326 const uint8_t* mBytes;
346 mPos = mChunk.
GetBytes(pBuf, nBytesToCopy, mPos);
357 mPos = mChunk.
Get(pDst, mPos);
366 mPos = mChunk.
GetStr(str, mPos);
394 const char* channelIOStr;
395 const char* pluginName;
396 const char* productName;
403 bool plugDoesMidiOut;
415 const char* bundleID;
416 const char* appGroupID;
420 const char* channelIOStr,
421 const char* pluginName,
422 const char* productName,
429 bool plugDoesMidiOut,
441 const char* bundleID,
442 const char* appGroupID)
446 , channelIOStr(channelIOStr)
447 , pluginName(pluginName)
448 , productName(productName)
450 , vendorVersion(vendorVersion)
454 , plugDoesMidiIn(plugDoesMidiIn)
455 , plugDoesMidiOut(plugDoesMidiOut)
456 , plugDoesMPE(plugDoesMPE)
457 , plugDoesChunks(plugDoesChunks)
459 , plugHasUI(plugHasUI)
460 , plugWidth(plugWidth)
461 , plugHeight(plugHeight)
462 , plugMinWidth(plugMinWidth)
463 , plugMaxWidth(plugMaxWidth)
464 , plugMinHeight(plugMinHeight)
465 , plugMaxHeight(plugMaxHeight)
466 , plugHostResize(plugHostResize)
468 , appGroupID(appGroupID)
473template<
class TIN = PLUG_SAMPLE_SRC,
class TOUT = PLUG_SAMPLE_DST>
476 bool mConnected =
false;
477 TOUT** mData =
nullptr;
478 TIN* mIncomingData =
nullptr;
479 WDL_TypedBuf<TOUT> mScratchBuf;
488 : mDirection(direction)
493 int NChans()
const {
return mNChans; }
495 ERoute GetDirection()
const {
return mDirection; }
505 WDL_PtrList<IBusInfo> mBusInfo[2];
509 mBusInfo[0].Empty(
true);
510 mBusInfo[1].Empty(
true);
519 mBusInfo[direction].Add(
new IBusInfo(direction, NChans));
528 assert(index >= 0 && index < mBusInfo[direction].GetSize());
529 return mBusInfo[direction].Get(index);
540 if(index >= 0 && index < mBusInfo[direction].GetSize())
541 NChans = mBusInfo[direction].Get(index)->NChans();
551 return mBusInfo[direction].GetSize();
561 for(
int i = 0; i < mBusInfo[direction].GetSize(); i++)
562 total += mBusInfo[direction].Get(i)->NChans();
573 for(
auto i = 0; i < mBusInfo[direction].GetSize(); i++)
575 if(mBusInfo[direction].Get(i)->NChans() < 0)
586 double mTempo = DEFAULT_TEMPO;
587 double mSamplePos = -1.0;
588 double mPPQPos = -1.0;
589 double mLastBar = -1.0;
590 double mCycleStart = -1.0;
591 double mCycleEnd = -1.0;
594 int mDenominator = 4;
596 bool mTransportIsRunning =
false;
597 bool mTransportLoopEnabled =
false;
603 bool mInitialized =
false;
604 char mName[MAX_PRESET_NAME_LEN];
610 snprintf(mName, MAX_PRESET_NAME_LEN,
"%s", UNUSED_PRESET_NAME);
618 char utf8[5] = { 0 };
627 IKeyPress(
const char* _utf8,
int vk,
bool s =
false,
bool c =
false,
bool a =
false)
634 void DBGPrint()
const { DBGMSG(
"VK: %i\n", VK); }
IPlug Constant definitions, Types, magic numbers.
MIDI and sysex structs/utilites.
Utility functions and macros.
Used to manage information about a bus such as whether it's an input or output, channel count.
Manages a block of memory, for plug-in settings store/recall.
static int GetIPlugVerFromChunk(const IByteChunk &chunk, int &position)
Helper method to retrieve the IPlug version number from the beginning of the byte chunk.
const uint8_t * GetData() const
Gets a const ptr to the chunk data.
int Put(const T *pVal)
Copies arbitary typed data into the IByteChunk.
int GetBytes(void *pDst, int nBytesToCopy, int startPos) const
Copy raw bytes from the IByteChunk, returning the new position for subsequent calls.
int PutStr(const char *str)
Put a string into the IByteChunk.
int Get(T *pDst, int startPos) const
Get arbitary typed data from the IByteChunk.
int PutBytes(const void *pSrc, int nBytesToCopy)
Copies data into the chunk, placing it at the end, resizing if necessary.
void Clear()
Clears the chunk (resizes to 0)
bool IsEqual(IByteChunk &otherChunk) const
Compares the size & values of the data of another chunk with this one.
uint8_t * GetData()
Gets a ptr to the chunk data.
static void InitChunkWithIPlugVer(IByteChunk &chunk)
This method is used in order to place the IPlug version number in the chunk when serialising data.
int Size() const
Returns the current size of the chunk.
int Resize(int newSize)
Resizes the chunk.
int GetStr(WDL_String &str, int startPos) const
Get a string from the IByteChunk.
int PutChunk(const IByteChunk *pRHS)
Put another IByteChunk into this one.
Helper class to maintain a read position whilst extracting data from an IByteChunk
void Seek(int pos)
Set the current position in the managed IByteChunk.
int Tell() const
Return the current position in the managed IByteChunk.
int Get(T *pDst)
Copy arbitary typed data out of the managed IByteChunk at the current position and update the positio...
int GetBytes(void *pBuf, int nBytesToCopy)
Copy nBytesToCopy bytes from the managed IByteChunk into pBuf .
int GetStr(WDL_String &str)
Retrieve a string from the managed IByteChunk and put it in str .
Manages a non-owned block of memory, for receiving arbitrary message byte streams.
int GetStr(WDL_String &str, int startPos) const
Get a string from the stream.
int Size() const
Returns the size of the stream.
int GetBytes(void *pDst, int nBytesToCopy, int startPos) const
Copy raw bytes from the stream, returning the new position for subsequent calls.
bool IsEqual(IByteStream &otherStream) const
Compares the size & values of the data of another stream with this one.
int Get(T *pDst, int startPos) const
Get arbitary typed data from the stream.
const uint8_t * GetData()
Gets a const ptr to the stream data.
ERoute
Used to identify whether a bus/channel connection is an input or an output.
Used to manage scratch buffers for each channel of I/O, which may involve converting from single to d...
Encapsulates information about the host transport state.
A helper class for IByteChunk and IByteStream that avoids code duplication.
static int GetStr(const uint8_t *pSrc, int srcSize, WDL_String &str, int startPos)
Get a string from a byte array, to a WDL_String, returning the new position for subsequent calls.
static int GetBytes(const uint8_t *pSrc, int srcSize, void *pDst, int nBytesToCopy, int startPos)
Copy raw bytes from a byte array, returning the new position for subsequent calls.
Used for key press info, such as ASCII representation, virtual key (mapped to win32 codes) and modifi...
IKeyPress(const char *_utf8, int vk, bool s=false, bool c=false, bool a=false)
IKeyPress Constructor.
An IOConfig is used to store bus info for each input/output configuration defined in the channel io s...
int NChansOnBusSAFE(ERoute direction, int index) const
int NBuses(ERoute direction) const
int GetTotalNChannels(ERoute direction) const
Get the total number of channels across all direction buses for this IOConfig.
bool ContainsWildcard(ERoute direction) const
const IBusInfo * GetBusInfo(ERoute direction, int index) const
void AddBusInfo(ERoute direction, int NChans)
A struct used for specifying baked-in factory presets.
In certain cases we need to queue parameter changes for transferral between threads.
This structure is used when queueing Sysex messages.