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);
518 mBusInfo[direction].Add(
new IBusInfo(direction, NChans));
527 assert(index >= 0 && index < mBusInfo[direction].GetSize());
528 return mBusInfo[direction].Get(index);
539 if(index >= 0 && index < mBusInfo[direction].GetSize())
540 NChans = mBusInfo[direction].Get(index)->NChans();
550 return mBusInfo[direction].GetSize();
560 for(
int i = 0; i < mBusInfo[direction].GetSize(); i++)
561 total += mBusInfo[direction].Get(i)->NChans();
572 for(
auto i = 0; i < mBusInfo[direction].GetSize(); i++)
574 if(mBusInfo[direction].Get(i)->NChans() < 0)
585 double mTempo = DEFAULT_TEMPO;
586 double mSamplePos = -1.0;
587 double mPPQPos = -1.0;
588 double mLastBar = -1.0;
589 double mCycleStart = -1.0;
590 double mCycleEnd = -1.0;
593 int mDenominator = 4;
595 bool mTransportIsRunning =
false;
596 bool mTransportLoopEnabled =
false;
602 bool mInitialized =
false;
603 char mName[MAX_PRESET_NAME_LEN];
609 snprintf(mName, MAX_PRESET_NAME_LEN,
"%s", UNUSED_PRESET_NAME);
617 char utf8[5] = { 0 };
626 IKeyPress(
const char* _utf8,
int vk,
bool s =
false,
bool c =
false,
bool a =
false)
633 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
Gets the number of channels on a bus with bounds checking.
int NBuses(ERoute direction) const
Gets the number of buses for a given direction.
int GetTotalNChannels(ERoute direction) const
Get the total number of channels across all buses for this IOConfig.
bool ContainsWildcard(ERoute direction) const
Checks if any bus in the given direction has a wildcard channel count.
const IBusInfo * GetBusInfo(ERoute direction, int index) const
Gets bus information for a specific bus.
void AddBusInfo(ERoute direction, int NChans)
Adds bus information for this IOConfig.
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.