vmrcli/include/VoicemeeterRemote.h

975 lines
42 KiB
C
Raw Normal View History

2024-06-25 04:34:28 +01:00
/******************************************************************************/
/* Voicemeeter Remote API. V.Burel<65>2015-2023 */
2024-06-25 04:34:28 +01:00
/******************************************************************************/
/* This Library allows communication with Voicemeeter applications */
/* 4 Client Applications can be connected to remote Voicemeeter. */
/* it also allows communication with MacroButtons application. */
/******************************************************************************/
/* */
/* OFFICIAL LINK : WWW.VOICEMEETER.COM */
/* */
/******************************************************************************/
/* COPYRIGHT: Vincent Burel(c)2015-2021 All Rights Reserved */
/******************************************************************************/
/* */
/* LICENSING: VoicemeeterRemote.dll usage is driven by a license agreement */
/* given in VoicemeeterRemoteAPI.pdf or readme.txt */
/* */
/******************************************************************************/
/* long = 32 bit integer */
/******************************************************************************/
#ifndef __VOICEMEETER_REMOTE_H__
#define __VOICEMEETER_REMOTE_H__
#ifdef __cplusplus
extern "C"
{
2024-06-25 04:34:28 +01:00
#endif
#define VBVMR_RESULT_OK 0
2024-06-25 04:34:28 +01:00
/******************************************************************************/
/* */
/* Login */
/* */
/******************************************************************************/
2024-06-25 04:34:28 +01:00
/** @name Communication Login / logout
* @{ */
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Open Communication Pipe With Voicemeeter (typically called on software startup).
@return : 0: OK (no error).
1: OK but Voicemeeter Application not launched.
-1: cannot get client (unexpected)
-2: unexpected login (logout was expected before).
*/
long __stdcall VBVMR_Login(void);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Close Communication Pipe With Voicemeeter (typically called on software end).
@return : 0 if ok.
*/
long __stdcall VBVMR_Logout(void);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Run Voicemeeter Application (get installation directory and run Voicemeeter Application).
@param vType : Voicemeeter type (1 = Voicemeeter, 2= Voicemeeter Banana, 3= Voicemeeter Potato, 6 = Potato x64 bits).
@return : 0: Ok.
-1: not installed (UninstallString not found in registry).
-2: unknown vType number
*/
long __stdcall VBVMR_RunVoicemeeter(long vType);
2024-06-25 04:34:28 +01:00
/** @} */
2024-06-25 04:34:28 +01:00
/******************************************************************************/
/* */
/* General Information */
/* */
/******************************************************************************/
2024-06-25 04:34:28 +01:00
/** @name General Information
* @{ */
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Get Voicemeeter Type
@param pType : Pointer on 32bit long receiving the type (1 = Voicemeeter, 2= Voicemeeter Banana, 3 Potato).
VOICEMEETER STRIP/BUS INDEX ASSIGNMENT
| Strip 1 | Strip 2 |Virtual Input| BUS A | BUS B |
+---------+---------+-------------+---------+---------+
| 0 | 1 | 2 | 0 | 1 |
VOICEMEETER BANANA STRIP/BUS INDEX ASSIGNMENT
| Strip 1 | Strip 2 | Strip 2 |Virtual Input|Virtual AUX|BUS A1|BUS A2|BUS A3|BUS B1|BUS B2|
+---------+---------+---------+-------------+-----------+------+------+------+------+------+
| 0 | 1 | 2 | 3 | 4 | 0 | 1 | 2 | 3 | 4 |
VOICEMEETER POTATO STRIP/BUS INDEX ASSIGNMENT
| Strip 1 | Strip 2 | Strip 2 | Strip 2 | Strip 2 |Virtual Input|Virtual AUX| VAIO3 |BUS A1|BUS A2|BUS A3|BUS A4|BUS A5|BUS B1|BUS B2|BUS B3|
+---------+---------+---------+---------+---------+-------------+-----------+-----------+------+------+------+------+------+------+------+------+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
@return : 0: OK (no error).
-1: cannot get client (unexpected)
-2: no server.
*/
long __stdcall VBVMR_GetVoicemeeterType(long *pType);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Get Voicemeeter Version
@param pType : Pointer on 32bit integer receiving the version (v1.v2.v3.v4)
v1 = (version & 0xFF000000)>>24;
v2 = (version & 0x00FF0000)>>16;
v3 = (version & 0x0000FF00)>>8;
v4 = version & 0x000000FF;
@return : 0: OK (no error).
-1: cannot get client (unexpected)
-2: no server.
*/
long __stdcall VBVMR_GetVoicemeeterVersion(long *pVersion);
2024-06-25 04:34:28 +01:00
/** @} */
2024-06-25 04:34:28 +01:00
/******************************************************************************/
/* */
/* Get parameters */
/* */
/******************************************************************************/
2024-06-25 04:34:28 +01:00
/** @name Getting Parameters
* @{ */
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Check if parameters have changed.
Call this function periodically (typically every 10 or 20ms).
(this function must be called from one thread only)
2024-06-25 04:34:28 +01:00
@return: 0: no new paramters.
1: New parameters -> update your display.
-1: error (unexpected)
-2: no server.
*/
long __stdcall VBVMR_IsParametersDirty(void);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief get parameter value.
@param szParamName : Null Terminal ASCII String giving the name of the parameter (see parameters name table)
@param pValue : Pointer on float (32bit float by reference) receiving the wanted value.
@return : 0: OK (no error).
-1: error
-2: no server.
-3: unknown parameter
-5: structure mismatch
*/
long __stdcall VBVMR_GetParameterFloat(char *szParamName, float *pValue);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief get parameter value.
@param szParamName : Null Terminal ASCII String giving the name of the parameter (see parameters name table)
@param pValue : Pointer on String (512 char or wchar) receiving the wanted value.
@return : 0: OK (no error).
-1: error
-2: no server.
-3: unknown parameter
-5: structure mismatch
*/
long __stdcall VBVMR_GetParameterStringA(char *szParamName, char *szString);
long __stdcall VBVMR_GetParameterStringW(char *szParamName, unsigned short *wszString);
2024-06-25 04:34:28 +01:00
/** @} */
2024-06-25 04:34:28 +01:00
/******************************************************************************/
/* */
/* Get levels */
/* */
/******************************************************************************/
2024-06-25 04:34:28 +01:00
/** @name Getting RT Data
* @{ */
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Get Current levels.
(this function must be called from one thread only)
@param nType: 0= pre fader input levels.
1= post fader input levels.
2= post Mute input levels.
3= output levels.
@param nuChannel: audio channel zero based index
2024-06-25 04:34:28 +01:00
for input 0 = in#1 left, 1= in#1 Right, etc...
for output 0 = busA ch1, 1 = busA ch2...
VOICEMEETER CHANNEL ASSIGNMENT
| Strip 1 | Strip 2 | Virtual Input |
+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
| Output A1 / A2 | Virtual Output |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 |
VOICEMEETER BANANA CHANNEL ASSIGNMENT
| Strip 1 | Strip 2 | Strip 3 | Virtual Input | Virtual Input AUX |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| Output A1 | Output A2 | Output A3 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| Virtual Output B1 | Virtual Output B2 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
VOICEMEETER POTATO CHANNEL ASSIGNMENT
| Strip 1 | Strip 2 | Strip 3 | Strip 4 | Strip 5 | Virtual Input | Virtual Input AUX | VAIO3 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
| Output A1 | Output A2 | Output A3 | Output A4 | Output A5 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
| Virtual Output B1 | Virtual Output B2 | Virtual Output B3 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
@return : 0: OK (no error).
-1: error
-2: no server.
-3: no level available
-4: out of range
*/
long __stdcall VBVMR_GetLevel(long nType, long nuChannel, float *pValue);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Get MIDI message from M.I.D.I. input device used by Voicemeeter M.I.D.I. mapping.
(this function must be called from one thread only)
@param pMIDIBuffer: pointer on MIDI Buffer. Expected message size is below 4 bytes,
but it's recommended to use 1024 Bytes local buffer to receive
possible multiple M.I.D.I. event message in optimal way:
2024-06-25 04:34:28 +01:00
unsigned char pBuffer[1024];
@return : >0: number of bytes placed in buffer (2 or 3 byte for usual M.I.D.I. message)
2024-06-25 04:34:28 +01:00
-1: error
-2: no server.
-5: no MIDI data
-6: no MIDI data
*/
long __stdcall VBVMR_GetMidiMessage(unsigned char *pMIDIBuffer, long nbByteMax);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Send MIDI message to M.I.D.I. output device used by Voicemeeter M.I.D.I. mapping.
(this function must be called from one thread only)
@param pMIDIBuffer: pointer on MIDI Buffer containing consistent MIDI message.
(we recommand to not use more than 4KB buffer);
@return : >0: number of bytes sent.
2024-06-25 04:34:28 +01:00
-1: error
-2: no server.
-5: cannot send MIDI data
*/
long __stdcall VBVMR_SendMidiMessage(unsigned char *pMIDIBuffer, long nbByte);
2024-06-25 04:34:28 +01:00
/** @} */
2024-06-25 04:34:28 +01:00
/******************************************************************************/
/* */
/* Set Parameters */
/* */
/******************************************************************************/
2024-06-25 04:34:28 +01:00
/** @name Setting Parameters
* @{ */
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Set a single float 32 bits parameters .
@param szParamName : Null Terminal ASCII String giving the name of the parameter (see parameters name table)
example:
Strip[1].gain
Strip[0].mute
Bus[0].gain
Bus[0].eq.channel[0].cell[0].gain
@param pValue : float 32bit containing the new value.
@return : 0: OK (no error).
-1: error
-2: no server.
-3: unknown parameter
*/
long __stdcall VBVMR_SetParameterFloat(char *szParamName, float Value);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Set a single string parameters .
@param szParamName : Null Terminal ASCII String giving the name of the parameter (see parameters name table)
example:
Strip[1].name
Strip[0].device.mme
Bus[0].device.asio
@param szString : zero terminal string.
@return : 0: OK (no error).
-1: error
-2: no server.
-3: unknown parameter
*/
2024-06-25 04:34:28 +01:00
long __stdcall VBVMR_SetParameterStringA(char *szParamName, char *szString);
long __stdcall VBVMR_SetParameterStringW(char *szParamName, unsigned short *wszString);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Set one or several parameters by a script ( < 48 kB ).
@param szParamName : Null Terminal ASCII String giving the script
2024-06-25 04:34:28 +01:00
(script allows to change several parameters in the same time - SYNCHRO).
Possible Instuction separators: ',' ';' or '\n'(CR)
EXAMPLE:
"Strip[0].gain = -6.0
Strip[0].A1 = 0
Strip[0].B1 = 1
Strip[1].gain = -6.0
Strip[2].gain = 0.0
Strip[3].name = "Skype Caller" "
@return : 0: OK (no error).
>0: number of line causing script error.
-1: error
-2: no server.
-3: unexpected error
-4: unexpected error
*/
long __stdcall VBVMR_SetParameters(char *szParamScript);
long __stdcall VBVMR_SetParametersW(unsigned short *szParamScript);
2024-06-25 04:34:28 +01:00
/** @} */
2024-06-25 04:34:28 +01:00
/******************************************************************************/
/* DEVICES ENUMERATOR */
/******************************************************************************/
2024-06-25 04:34:28 +01:00
/** @name Device Enumeration Functions
* @{ */
2024-06-25 04:34:28 +01:00
#define VBVMR_DEVTYPE_MME 1
#define VBVMR_DEVTYPE_WDM 3
#define VBVMR_DEVTYPE_KS 4
#define VBVMR_DEVTYPE_ASIO 5
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Get number of Audio Output Device available on the system
@return : return number of device found.
*/
long __stdcall VBVMR_Output_GetDeviceNumber(void);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Return pointer on Output Device Descriptor according index
@param zindex : zero based index
@param nType : Pointer on 32bit long receiving the type (pointer can be NULL).
@param szName : Pointer on string (256 char min) receiving the device name (pointer can be NULL).
@param szHardwareId : Pointer on string (256 char min) receiving the hardware ID (pointer can be NULL).
@return : 0: OK (no error).
*/
long __stdcall VBVMR_Output_GetDeviceDescA(long zindex, long *nType, char *szDeviceName, char *szHardwareId);
long __stdcall VBVMR_Output_GetDeviceDescW(long zindex, long *nType, unsigned short *wszDeviceName, unsigned short *wszHardwareId);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Get number of Audio Input Device available on the system
@return : return number of device found.
*/
long __stdcall VBVMR_Input_GetDeviceNumber(void);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Return pointer on Input Device Descriptor according index
@param zindex : zero based index
@param nType : Pointer on 32bit long receiving the type (pointer can be NULL).
@param szName : Pointer on string (256 char min) receiving the device name (pointer can be NULL).
@param szHardwareId : Pointer on string (256 char min) receiving the hardware ID (pointer can be NULL).
@return : 0: OK (no error).
*/
long __stdcall VBVMR_Input_GetDeviceDescA(long zindex, long *nType, char *szDeviceName, char *szHardwareId);
long __stdcall VBVMR_Input_GetDeviceDescW(long zindex, long *nType, unsigned short *wszDeviceName, unsigned short *wszHardwareId);
/** @} */
/******************************************************************************/
/* VB-AUDIO CALLBACK */
/******************************************************************************/
/* 4x Functions to process all voicemeeter audio input and output channels */
/* */
/* VBVMR_AudioCallbackRegister :to register your audio callback(s) */
/* VBVMR_AudioCallbackStart :to start the audio stream */
/* VBVMR_AudioCallbackStop :to stop the audio stream */
/* VBVMR_AudioCallbackUnregister :to unregister / Release callback(s) */
/******************************************************************************/
/** @name VB-Audio Callback Functions
* @{ */
typedef struct tagVBVMR_AUDIOINFO
{
long samplerate;
long nbSamplePerFrame;
} VBVMR_T_AUDIOINFO, *VBVMR_PT_AUDIOINFO, *VBVMR_LPT_AUDIOINFO;
typedef struct tagVBVMR_AUDIOBUFFER
{
long audiobuffer_sr; // Sampling Rate
long audiobuffer_nbs; // number of sample per frame
long audiobuffer_nbi; // number of inputs
long audiobuffer_nbo; // number of outputs
float *audiobuffer_r[128]; // nbi input pointers containing frame of nbs sample (of 32bits float)
float *audiobuffer_w[128]; // nbo output pointers containing frame of nbs sample (of 32bits float)
} VBVMR_T_AUDIOBUFFER, *VBVMR_PT_AUDIOBUFFER, *VBVMR_LPT_AUDIOBUFFER;
/**
2024-06-25 04:34:28 +01:00
@brief VB-AUDIO Callback is called for different task to Initialize, perform and end your process.
VB-AUDIO Callback is part of single TIME CRITICAL Thread.
VB-AUDIO Callback is non re-entrant (cannot be called while in process)
VB-AUDIO Callback is supposed to be REAL TIME when called to process buffer.
2024-06-25 04:34:28 +01:00
(it means that the process has to be performed as fast as possible, waiting cycles are forbidden.
do not use O/S synchronization object, even Critical_Section can generate waiting cycle. Do not use
2024-06-25 04:34:28 +01:00
system functions that can generate waiting cycle like display, disk or communication functions for example).
2024-06-25 04:34:28 +01:00
@param lpUser: User pointer given on callback registration.
@param ncommand: reason why the callback is called.
@param lpData: pointer on structure, pending on nCommand.
@param nnn: additional data, unused
@return : 0: always 0 (unused).
*/
typedef long(__stdcall *T_VBVMR_VBAUDIOCALLBACK)(void *lpUser, long nCommand, void *lpData, long nnn);
2024-06-25 04:34:28 +01:00
#define VBVMR_CBCOMMAND_STARTING 1 // command to initialize data according SR and buffer size
// info = (VBVMR_LPT_AUDIOINFO)lpData
2024-06-25 04:34:28 +01:00
#define VBVMR_CBCOMMAND_ENDING 2 // command to release data
#define VBVMR_CBCOMMAND_CHANGE 3 // If change in audio stream, you will have to restart audio
2024-06-25 04:34:28 +01:00
#define VBVMR_CBCOMMAND_BUFFER_IN 10 // input insert
#define VBVMR_CBCOMMAND_BUFFER_OUT 11 // bus output insert
#define VBVMR_CBCOMMAND_BUFFER_MAIN 20 // all i/o
// audiobuffer = (VBVMR_LPT_AUDIOBUFFER)lpData
// nnn = synchro = 1 if synchro with Voicemeeter
2024-06-25 04:34:28 +01:00
/*
-----------------------------------------------------
AUDIO BUFFER for VBVMR_CBCOMMAND_BUFFER_IN
-----------------------------------------------------
VOICEMEETER
2024-06-25 04:34:28 +01:00
| Strip 1 | Strip 2 | Virtual Input |
+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2024-06-25 04:34:28 +01:00
VOICEMEETER BANANA
2024-06-25 04:34:28 +01:00
| Strip 1 | Strip 2 | Strip 3 | Virtual Input | Virtual Input AUX |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
2024-06-25 04:34:28 +01:00
VOICEMEETER 8
2024-06-25 04:34:28 +01:00
| Strip 1 | Strip 2 | Strip 3 | Strip 4 | Strip 5 | Virtual Input | Virtual Input AUX | Virtual Input 8 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
2024-06-25 04:34:28 +01:00
-----------------------------------------------------
AUDIO BUFFER for VBVMR_CBCOMMAND_BUFFER_OUT
-----------------------------------------------------
VOICEMEETER
2024-06-25 04:34:28 +01:00
| Output A1 / A2 | Virtual Output |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 |
2024-06-25 04:34:28 +01:00
VOICEMEETER BANANA
2024-06-25 04:34:28 +01:00
| Output A1 | Output A2 | Output A3 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
2024-06-25 04:34:28 +01:00
| Virtual Output B1 | Virtual Output B2 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
2024-06-25 04:34:28 +01:00
VOICEMEETER 8
2024-06-25 04:34:28 +01:00
| Output A1 | Output A2 | Output A3 | Output A4 | Output A5 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
2024-06-25 04:34:28 +01:00
| Virtual Output B1 | Virtual Output B2 | Virtual Output B3 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
2024-06-25 04:34:28 +01:00
-----------------------------------------------------
AUDIO BUFFER for VBVMR_CBCOMMAND_BUFFER_MAIN
-----------------------------------------------------
VOICEMEETER
2024-06-25 04:34:28 +01:00
| Strip 1 | Strip 2 | Virtual Input |
+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2024-06-25 04:34:28 +01:00
| Output A1 / A2 | Virtual Output |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
Output buffer provides outputs only:
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 |
2024-06-25 04:34:28 +01:00
VOICEMEETER BANANA
2024-06-25 04:34:28 +01:00
| Strip 1 | Strip 2 | Strip 3 | Virtual Input | Virtual Input AUX |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
2024-06-25 04:34:28 +01:00
| Output A1 | Output A2 | Output A3 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |
Output buffer provides outputs only:
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
2024-06-25 04:34:28 +01:00
| Virtual Output B1 | Virtual Output B2 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 |
Output buffer provides outputs only:
| 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
2024-06-25 04:34:28 +01:00
VOICEMEETER 8
2024-06-25 04:34:28 +01:00
| Strip 1 | Strip 2 | Strip 3 | Strip 4 | Strip 5 | Virtual Input | Virtual Input AUX | Virtual Input 8 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
2024-06-25 04:34:28 +01:00
| Output A1 | Output A2 | Output A3 | Output A4 | Output A5 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
Output buffer provides outputs only:
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
2024-06-25 04:34:28 +01:00
| Virtual Output B1 | Virtual Output B2 | Virtual Output B3 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 |
Output buffer provides outputs only:
| 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
2024-06-25 04:34:28 +01:00
*/
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief register your audio callback function to receive real time audio buffer
it's possible to register up to 3x different Audio Callback in the same application or in
2024-06-25 04:34:28 +01:00
3x different applications. In the same application, this is possible because Voicemeeter
provides 3 kind of audio Streams:
- AUDIO INPUT INSERT (to process all Voicemeeter inputs as insert)
- AUDIO OUTPUT INSERT (to process all Voicemeeter BUS outputs as insert)
2024-06-25 04:34:28 +01:00
- ALL AUDIO I/O (to process all Voicemeeter i/o).
Note: a single callback can be used to receive the 3 possible audio streams.
@param mode : callback type (main, input or bus output) see define below
@param pCallback : Pointer on your callback function.
@param lpUser : user pointer (pointer that will be passed in callback first argument).
@param szClientName[64]: IN: Name of the application registering the Callback.
OUT: Name of the application already registered.
@return : 0: OK (no error).
-1: error
1: callback already registered (by another application).
*/
long __stdcall VBVMR_AudioCallbackRegister(long mode, T_VBVMR_VBAUDIOCALLBACK pCallback, void *lpUser, char szClientName[64]);
#define VBVMR_AUDIOCALLBACK_IN 0x00000001 // to process input insert
#define VBVMR_AUDIOCALLBACK_OUT 0x00000002 // to process output bus insert
#define VBVMR_AUDIOCALLBACK_MAIN 0x00000004 // to receive all i/o
2024-06-25 04:34:28 +01:00
/**
@brief Start / Stop Audio processing
2024-06-25 04:34:28 +01:00
he Callback will be called with
2024-06-25 04:34:28 +01:00
@return : 0: OK (no error).
-1: error
-2: no callback registred.
*/
long __stdcall VBVMR_AudioCallbackStart(void);
long __stdcall VBVMR_AudioCallbackStop(void);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief unregister your callback to release voicemeeter virtual driver
(this function will automatically call VBVMR_AudioCallbackStop() function)
@param pCallback : Pointer on your callback function.
@return : 0: OK (no error).
-1: error
1: callback already unregistered.
*/
long __stdcall VBVMR_AudioCallbackUnregister(void);
2024-06-25 04:34:28 +01:00
/** @} */
2024-06-25 04:34:28 +01:00
/******************************************************************************/
/* */
/* Macro Buttons */
/* */
/******************************************************************************/
2024-06-25 04:34:28 +01:00
/** @name Macro Buttons functions
* @{ */
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief Check if Macro Buttons states changed.
Call this function periodically (typically every 50 or 500ms) to know if something happen on MacroButton states .
(this function must be called from one thread only)
2024-06-25 04:34:28 +01:00
@return: 0: no new status.
>0: last nu logical button status changed.
-1: error (unexpected)
-2: no server.
*/
long __stdcall VBVMR_MacroButton_IsDirty(void);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief get current status of a given button.
@param nuLogicalButton : button index: 0 to 79)
@param pValue : Pointer on float (32bit float by reference) receiving the wanted value (0.0 = OFF / 1.0 = ON).
@param bitmode: define what kind of value you want to read (see MACROBUTTON_MODE below)
@return : 0: OK (no error).
-1: error
-2: no server.
-3: unknown parameter
-5: structure mismatch
*/
long __stdcall VBVMR_MacroButton_GetStatus(long nuLogicalButton, float *pValue, long bitmode);
2024-06-25 04:34:28 +01:00
/**
2024-06-25 04:34:28 +01:00
@brief set current button value.
@param nuLogicalButton : button index: 0 to 79)
@param fValue : float 32 bit value giving the status (0.0 = OFF / 1.0 = ON).
@param bitmode: define what kind of value you want to write/modify (see MACROBUTTON_MODE below)
@return : 0: OK (no error).
-1: error
-2: no server.
-3: unknown parameter
-5: structure mismatch
*/
long __stdcall VBVMR_MacroButton_SetStatus(long nuLogicalButton, float fValue, long bitmode);
#define VBVMR_MACROBUTTON_MODE_DEFAULT 0x00000000 // PUSH or RELEASE button
#define VBVMR_MACROBUTTON_MODE_STATEONLY 0x00000002 // change Displayed State only
#define VBVMR_MACROBUTTON_MODE_TRIGGER 0x00000003 // change Trigger State
#define VBVMR_MACROBUTTON_MODE_COLOR 0x00000004 // change color
/** @} */
/******************************************************************************/
/* 'C' STRUCTURED INTERFACE */
/******************************************************************************/
typedef long(__stdcall *T_VBVMR_Login)(void);
typedef long(__stdcall *T_VBVMR_Logout)(void);
typedef long(__stdcall *T_VBVMR_RunVoicemeeter)(long vType);
typedef long(__stdcall *T_VBVMR_GetVoicemeeterType)(long *pType);
typedef long(__stdcall *T_VBVMR_GetVoicemeeterVersion)(long *pVersion);
typedef long(__stdcall *T_VBVMR_IsParametersDirty)(void);
typedef long(__stdcall *T_VBVMR_GetParameterFloat)(char *szParamName, float *pValue);
typedef long(__stdcall *T_VBVMR_GetParameterStringA)(char *szParamName, char *szString);
typedef long(__stdcall *T_VBVMR_GetParameterStringW)(char *szParamName, unsigned short *wszString);
typedef long(__stdcall *T_VBVMR_GetLevel)(long nType, long nuChannel, float *pValue);
typedef long(__stdcall *T_VBVMR_GetMidiMessage)(unsigned char *pMIDIBuffer, long nbByteMax);
typedef long(__stdcall *T_VBVMR_SendMidiMessage)(unsigned char *pMIDIBuffer, long nbByteMax);
typedef long(__stdcall *T_VBVMR_SetParameterFloat)(char *szParamName, float Value);
typedef long(__stdcall *T_VBVMR_SetParameters)(char *szParamScript);
typedef long(__stdcall *T_VBVMR_SetParametersW)(unsigned short *szParamScript);
typedef long(__stdcall *T_VBVMR_SetParameterStringA)(char *szParamName, char *szString);
typedef long(__stdcall *T_VBVMR_SetParameterStringW)(char *szParamName, unsigned short *wszString);
typedef long(__stdcall *T_VBVMR_Output_GetDeviceNumber)(void);
typedef long(__stdcall *T_VBVMR_Output_GetDeviceDescA)(long zindex, long *nType, char *szDeviceName, char *szHardwareId);
typedef long(__stdcall *T_VBVMR_Output_GetDeviceDescW)(long zindex, long *nType, unsigned short *wszDeviceName, unsigned short *wszHardwareId);
typedef long(__stdcall *T_VBVMR_Input_GetDeviceNumber)(void);
typedef long(__stdcall *T_VBVMR_Input_GetDeviceDescA)(long zindex, long *nType, char *szDeviceName, char *szHardwareId);
typedef long(__stdcall *T_VBVMR_Input_GetDeviceDescW)(long zindex, long *nType, unsigned short *wszDeviceName, unsigned short *wszHardwareId);
typedef long(__stdcall *T_VBVMR_AudioCallbackRegister)(long mode, T_VBVMR_VBAUDIOCALLBACK pCallback, void *lpUser, char szClientName[64]);
typedef long(__stdcall *T_VBVMR_AudioCallbackStart)(void);
typedef long(__stdcall *T_VBVMR_AudioCallbackStop)(void);
typedef long(__stdcall *T_VBVMR_AudioCallbackUnregister)(void);
typedef long(__stdcall *T_VBVMR_MacroButton_IsDirty)(void);
typedef long(__stdcall *T_VBVMR_MacroButton_GetStatus)(long nuLogicalButton, float *pValue, long bitmode);
typedef long(__stdcall *T_VBVMR_MacroButton_SetStatus)(long nuLogicalButton, float fValue, long bitmode);
typedef struct tagVBVMR_INTERFACE
{
T_VBVMR_Login VBVMR_Login;
T_VBVMR_Logout VBVMR_Logout;
T_VBVMR_RunVoicemeeter VBVMR_RunVoicemeeter;
T_VBVMR_GetVoicemeeterType VBVMR_GetVoicemeeterType;
T_VBVMR_GetVoicemeeterVersion VBVMR_GetVoicemeeterVersion;
T_VBVMR_IsParametersDirty VBVMR_IsParametersDirty;
T_VBVMR_GetParameterFloat VBVMR_GetParameterFloat;
T_VBVMR_GetParameterStringA VBVMR_GetParameterStringA;
T_VBVMR_GetParameterStringW VBVMR_GetParameterStringW;
T_VBVMR_GetLevel VBVMR_GetLevel;
T_VBVMR_GetMidiMessage VBVMR_GetMidiMessage;
T_VBVMR_SendMidiMessage VBVMR_SendMidiMessage;
T_VBVMR_SetParameterFloat VBVMR_SetParameterFloat;
T_VBVMR_SetParameters VBVMR_SetParameters;
T_VBVMR_SetParametersW VBVMR_SetParametersW;
T_VBVMR_SetParameterStringA VBVMR_SetParameterStringA;
T_VBVMR_SetParameterStringW VBVMR_SetParameterStringW;
T_VBVMR_Output_GetDeviceNumber VBVMR_Output_GetDeviceNumber;
T_VBVMR_Output_GetDeviceDescA VBVMR_Output_GetDeviceDescA;
T_VBVMR_Output_GetDeviceDescW VBVMR_Output_GetDeviceDescW;
T_VBVMR_Input_GetDeviceNumber VBVMR_Input_GetDeviceNumber;
T_VBVMR_Input_GetDeviceDescA VBVMR_Input_GetDeviceDescA;
T_VBVMR_Input_GetDeviceDescW VBVMR_Input_GetDeviceDescW;
T_VBVMR_AudioCallbackRegister VBVMR_AudioCallbackRegister;
T_VBVMR_AudioCallbackStart VBVMR_AudioCallbackStart;
T_VBVMR_AudioCallbackStop VBVMR_AudioCallbackStop;
T_VBVMR_AudioCallbackUnregister VBVMR_AudioCallbackUnregister;
T_VBVMR_MacroButton_IsDirty VBVMR_MacroButton_IsDirty;
T_VBVMR_MacroButton_GetStatus VBVMR_MacroButton_GetStatus;
T_VBVMR_MacroButton_SetStatus VBVMR_MacroButton_SetStatus;
} T_VBVMR_INTERFACE, *PT_VBVMR_INTERFACE, *LPT_VBVMR_INTERFACE, *PT_VMR;
2024-06-25 04:34:28 +01:00
#ifdef VBUSE_LOCALLIB
// internal used (not public)
void __stdcall VBVMR_SetHinstance(HINSTANCE hinst);
#endif
/******************************************************************************/
/* VBAN RT PACKET */
/******************************************************************************/
2024-06-25 04:34:28 +01:00
#pragma pack(1)
// short = 2 bytes
// char = 1 byte
// COMPATIBILITY: defined structure cannot be changed.
// some field could be added at the end of the structure to keep the compatibility in the time.
typedef struct tagVBAN_VMRT_PACKET // packedt ident: 0
{
unsigned char voicemeeterType; // 1 = Voicemeeter, 2= Voicemeeter Banana, 3 Potato
unsigned char reserved; // unused
unsigned short buffersize; // main stream buffer size
unsigned long voicemeeterVersion; // version like for VBVMR_GetVoicemeeterVersion() functino
unsigned long optionBits; // unused
unsigned long samplerate; // main stream samplerate
short inputLeveldB100[34]; // pre fader input peak level in dB * 100
short outputLeveldB100[64]; // bus output peak level in dB * 100
unsigned long TransportBit; // Transport Status
unsigned long stripState[8]; // Strip Buttons Status (see MODE bits below)
unsigned long busState[8]; // Bus Buttons Status (see MODE bits below)
short stripGaindB100Layer1[8]; // Strip Gain in dB * 100
short stripGaindB100Layer2[8];
short stripGaindB100Layer3[8];
short stripGaindB100Layer4[8];
short stripGaindB100Layer5[8];
short stripGaindB100Layer6[8];
short stripGaindB100Layer7[8];
short stripGaindB100Layer8[8];
short busGaindB100[8]; // Bus Gain in dB * 100
char stripLabelUTF8c60[8][60]; // Strip Label
char busLabelUTF8c60[8][60]; // Bus Label
} T_VBAN_VMRT_PACKET, *PT_VBAN_VMRT_PACKET, *LPT_VBAN_VMRT_PACKET;
#define expected_size_T_VBAN_VMRT_PACKET 1384 // 1436 max
2024-06-25 04:34:28 +01:00
#pragma pack()
#define VMRTSTATE_MODE_MUTE 0x00000001
#define VMRTSTATE_MODE_SOLO 0x00000002
#define VMRTSTATE_MODE_MONO 0x00000004
#define VMRTSTATE_MODE_MUTEC 0x00000008
#define VMRTSTATE_MODE_MIXDOWN 0x00000010
#define VMRTSTATE_MODE_REPEAT 0x00000020
#define VMRTSTATE_MODE_MIXDOWNB 0x00000030
#define VMRTSTATE_MODE_COMPOSITE 0x00000040
#define VMRTSTATE_MODE_UPMIXTV 0x00000050
#define VMRTSTATE_MODE_UPMIX2 0x00000060
#define VMRTSTATE_MODE_UPMIX4 0x00000070
#define VMRTSTATE_MODE_UPMIX6 0x00000080
#define VMRTSTATE_MODE_CENTER 0x00000090
#define VMRTSTATE_MODE_LFE 0x000000A0
#define VMRTSTATE_MODE_REAR 0x000000B0
#define VMRTSTATE_MODE_MASK 0x000000F0
#define VMRTSTATE_MODE_EQ 0x00000100
#define VMRTSTATE_MODE_CROSS 0x00000200
#define VMRTSTATE_MODE_EQB 0x00000800
#define VMRTSTATE_MODE_BUSA 0x00001000
#define VMRTSTATE_MODE_BUSA1 0x00001000
#define VMRTSTATE_MODE_BUSA2 0x00002000
#define VMRTSTATE_MODE_BUSA3 0x00004000
#define VMRTSTATE_MODE_BUSA4 0x00008000
#define VMRTSTATE_MODE_BUSA5 0x00080000
#define VMRTSTATE_MODE_BUSB 0x00010000
#define VMRTSTATE_MODE_BUSB1 0x00010000
#define VMRTSTATE_MODE_BUSB2 0x00020000
#define VMRTSTATE_MODE_BUSB3 0x00040000
#define VMRTSTATE_MODE_PAN0 0x00000000
#define VMRTSTATE_MODE_PANCOLOR 0x00100000
#define VMRTSTATE_MODE_PANMOD 0x00200000
#define VMRTSTATE_MODE_PANMASK 0x00F00000
#define VMRTSTATE_MODE_POSTFX_R 0x01000000
#define VMRTSTATE_MODE_POSTFX_D 0x02000000
#define VMRTSTATE_MODE_POSTFX1 0x04000000
#define VMRTSTATE_MODE_POSTFX2 0x08000000
#define VMRTSTATE_MODE_SEL 0x10000000
#define VMRTSTATE_MODE_MONITOR 0x20000000
2024-06-25 04:34:28 +01:00
#pragma pack(1)
// long = 4 bytes
// short = 2 bytes
// char = 1 byte
// float = 4 bytes
typedef struct tagVBAN_VMPARAM_STRIP
{
long mode;
float dblevel; // x 100
short Audibility; // x 100
short pos3D_x; // x 100
short pos3D_y; // x 100
short posColor_x; // x 100
short posColor_y; // x 100
short EQgain1; // x 100
short EQgain2; // x 100
short EQgain3; // x 100
// first channel parametric EQ
char PEQ_eqOn[6]; // 0 or 1
char PEQ_eqtype[6]; // see define below
float PEQ_eqgain[6];
float PEQ_eqfreq[6];
float PEQ_eqq[6];
short Audibility_c; // x 100
short Audibility_g; // x 100
short Audibility_d; // x 100
short posMod_x; // x 100
short posMod_y; // x 100
short send_reverb; // x 100
short send_delay; // x 100
short send_fx1; // x 100
short send_fx2; // x 100
short dblimit; // x 100
short nKaraoke; // x 100
short COMP_gain_in; // x 100
short COMP_attack_ms; // x 10
short COMP_release_ms; // x 10
short COMP_n_knee; // x 100
short COMP_comprate; // x 100
short COMP_threshold; // x 100
short COMP_c_enabled;
short COMP_c_auto;
short COMP_gain_out; // x 100
short GATE_dBThreshold_in; // x 100
short GATE_dBDamping_max; // x 100
short GATE_BP_Sidechain; // x 10
short GATE_attack_ms; // x 10
short GATE_hold_ms; // x 10
short GATE_release_ms; // x 10
short DenoiserThreshold; // x 100
short PitchEnabled;
short Pitch_DryWet; // x 100
short Pitch_Value; // x 100
short Pitch_formant_lo; // x 100
short Pitch_formant_med; // x 100
short Pitch_formant_high; // x 100
} T_VBAN_VMPARAM_STRIP, *PT_VBAN_VMPARAM_STRIP, *LPT_VBAN_VMPARAM_STRIP;
#define VMRT_EQTYPE_PEQ 0
#define VMRT_EQTYPE_NOTCH 1
#define VMRT_EQTYPE_BPF 2
#define VMRT_EQTYPE_LPF 3
#define VMRT_EQTYPE_HPF 4
#define VMRT_EQTYPE_LOSHELF 5
#define VMRT_EQTYPE_HISHELF 6
#define expected_size_T_VBAN_VMPARAM_STRIP (8 + (8 * sizeof(short)) + (2 * 6) + (3 * 6 * sizeof(float)) + ((11 + 9 + 6 + 7) * sizeof(short)))
// 170
typedef struct tagVBAN_VMPARAMSTRIP_PACKET // packedt ident: 1
{
unsigned char voicemeeterType; // 1 = Voicemeeter, 2= Voicemeeter Banana, 3 Potato
unsigned char reserved; // unused
unsigned short buffersize; // main stream buffer size
unsigned long voicemeeterVersion; // version like for VBVMR_GetVoicemeeterVersion() functino
unsigned long optionBits; // unused
unsigned long samplerate; // main stream samplerate
T_VBAN_VMPARAM_STRIP Strips[8]; // all input strips
} T_VBAN_VMPARAMSTRIP_PACKET, *PT_VBAN_VMPARAMSTRIP_PACKET, *LPT_VBAN_VMPARAMSTRIP_PACKET;
2024-06-25 04:34:28 +01:00
#pragma pack()
#define expected_size_T_VBAN_VMPARAMSTRIP_PACKET ((4 * 4) + (expected_size_T_VBAN_VMPARAM_STRIP * 8)) // 1436 max
// 1376
2024-06-25 04:34:28 +01:00
/******************************************************************************/
/* LOCAL FUNCTIONS */
/******************************************************************************/
2024-06-25 04:34:28 +01:00
long VBVMR_LocalInit(void);
long VBVMR_LocalEnd(void);
void *VBVMR_GetRequestVB0STREAMPTR(void);
2024-06-25 04:34:28 +01:00
long VBVMR_SetParametersWEx(unsigned short *szParamScript, long fCopyToClient);
2024-06-25 04:34:28 +01:00
long VBVMR_LoginEx(long properties);
2024-06-25 04:34:28 +01:00
long VBVMR_MB_PushSettings(void *lpParam);
2024-06-25 04:34:28 +01:00
#ifdef __cplusplus
}
#endif
#endif /*__VOICEMEETER_REMOTE_H__*/