mirror of
https://github.com/onyx-and-iris/vmrcli.git
synced 2024-11-16 01:50:57 +00:00
975 lines
42 KiB
C
975 lines
42 KiB
C
/******************************************************************************/
|
||
/* Voicemeeter Remote API. V.Burel<65>2015-2023 */
|
||
/******************************************************************************/
|
||
/* 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"
|
||
{
|
||
#endif
|
||
|
||
#define VBVMR_RESULT_OK 0
|
||
|
||
/******************************************************************************/
|
||
/* */
|
||
/* Login */
|
||
/* */
|
||
/******************************************************************************/
|
||
|
||
/** @name Communication Login / logout
|
||
* @{ */
|
||
|
||
/**
|
||
@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);
|
||
|
||
/**
|
||
@brief Close Communication Pipe With Voicemeeter (typically called on software end).
|
||
@return : 0 if ok.
|
||
*/
|
||
|
||
long __stdcall VBVMR_Logout(void);
|
||
|
||
/**
|
||
@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);
|
||
|
||
/** @} */
|
||
|
||
/******************************************************************************/
|
||
/* */
|
||
/* General Information */
|
||
/* */
|
||
/******************************************************************************/
|
||
|
||
/** @name General Information
|
||
* @{ */
|
||
|
||
/**
|
||
@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);
|
||
|
||
/**
|
||
@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);
|
||
|
||
/** @} */
|
||
|
||
/******************************************************************************/
|
||
/* */
|
||
/* Get parameters */
|
||
/* */
|
||
/******************************************************************************/
|
||
|
||
/** @name Getting Parameters
|
||
* @{ */
|
||
|
||
/**
|
||
@brief Check if parameters have changed.
|
||
Call this function periodically (typically every 10 or 20ms).
|
||
(this function must be called from one thread only)
|
||
|
||
@return: 0: no new paramters.
|
||
1: New parameters -> update your display.
|
||
-1: error (unexpected)
|
||
-2: no server.
|
||
*/
|
||
|
||
long __stdcall VBVMR_IsParametersDirty(void);
|
||
|
||
/**
|
||
@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);
|
||
|
||
/**
|
||
@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);
|
||
|
||
/** @} */
|
||
|
||
/******************************************************************************/
|
||
/* */
|
||
/* Get levels */
|
||
/* */
|
||
/******************************************************************************/
|
||
|
||
/** @name Getting RT Data
|
||
* @{ */
|
||
|
||
/**
|
||
@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
|
||
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);
|
||
|
||
/**
|
||
@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:
|
||
unsigned char pBuffer[1024];
|
||
|
||
|
||
@return : >0: number of bytes placed in buffer (2 or 3 byte for usual M.I.D.I. message)
|
||
-1: error
|
||
-2: no server.
|
||
-5: no MIDI data
|
||
-6: no MIDI data
|
||
*/
|
||
|
||
long __stdcall VBVMR_GetMidiMessage(unsigned char *pMIDIBuffer, long nbByteMax);
|
||
|
||
/**
|
||
@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.
|
||
-1: error
|
||
-2: no server.
|
||
-5: cannot send MIDI data
|
||
*/
|
||
|
||
long __stdcall VBVMR_SendMidiMessage(unsigned char *pMIDIBuffer, long nbByte);
|
||
|
||
/** @} */
|
||
|
||
/******************************************************************************/
|
||
/* */
|
||
/* Set Parameters */
|
||
/* */
|
||
/******************************************************************************/
|
||
|
||
/** @name Setting Parameters
|
||
* @{ */
|
||
|
||
/**
|
||
@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);
|
||
|
||
/**
|
||
@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
|
||
|
||
*/
|
||
|
||
long __stdcall VBVMR_SetParameterStringA(char *szParamName, char *szString);
|
||
long __stdcall VBVMR_SetParameterStringW(char *szParamName, unsigned short *wszString);
|
||
|
||
/**
|
||
@brief Set one or several parameters by a script ( < 48 kB ).
|
||
@param szParamName : Null Terminal ASCII String giving the script
|
||
(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);
|
||
|
||
/** @} */
|
||
|
||
/******************************************************************************/
|
||
/* DEVICES ENUMERATOR */
|
||
/******************************************************************************/
|
||
|
||
/** @name Device Enumeration Functions
|
||
* @{ */
|
||
|
||
#define VBVMR_DEVTYPE_MME 1
|
||
#define VBVMR_DEVTYPE_WDM 3
|
||
#define VBVMR_DEVTYPE_KS 4
|
||
#define VBVMR_DEVTYPE_ASIO 5
|
||
|
||
/**
|
||
@brief Get number of Audio Output Device available on the system
|
||
@return : return number of device found.
|
||
*/
|
||
|
||
long __stdcall VBVMR_Output_GetDeviceNumber(void);
|
||
|
||
/**
|
||
@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);
|
||
|
||
/**
|
||
@brief Get number of Audio Input Device available on the system
|
||
@return : return number of device found.
|
||
*/
|
||
|
||
long __stdcall VBVMR_Input_GetDeviceNumber(void);
|
||
|
||
/**
|
||
@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;
|
||
|
||
/**
|
||
@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.
|
||
(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
|
||
system functions that can generate waiting cycle like display, disk or communication functions for example).
|
||
|
||
@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);
|
||
|
||
#define VBVMR_CBCOMMAND_STARTING 1 // command to initialize data according SR and buffer size
|
||
// info = (VBVMR_LPT_AUDIOINFO)lpData
|
||
|
||
#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
|
||
|
||
#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
|
||
|
||
/*
|
||
-----------------------------------------------------
|
||
AUDIO BUFFER for VBVMR_CBCOMMAND_BUFFER_IN
|
||
-----------------------------------------------------
|
||
VOICEMEETER
|
||
|
||
| Strip 1 | Strip 2 | Virtual Input |
|
||
+----+----+----+----+----+----+----+----+----+----+----+----+
|
||
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
|
||
|
||
VOICEMEETER BANANA
|
||
|
||
| 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 |
|
||
|
||
VOICEMEETER 8
|
||
|
||
| 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 |
|
||
|
||
|
||
-----------------------------------------------------
|
||
AUDIO BUFFER for VBVMR_CBCOMMAND_BUFFER_OUT
|
||
-----------------------------------------------------
|
||
VOICEMEETER
|
||
|
||
| Output A1 / A2 | Virtual Output |
|
||
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|
||
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||
|
||
VOICEMEETER BANANA
|
||
|
||
| 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 8
|
||
|
||
| 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 |
|
||
|
||
|
||
-----------------------------------------------------
|
||
AUDIO BUFFER for VBVMR_CBCOMMAND_BUFFER_MAIN
|
||
-----------------------------------------------------
|
||
VOICEMEETER
|
||
|
||
| Strip 1 | Strip 2 | Virtual Input |
|
||
+----+----+----+----+----+----+----+----+----+----+----+----+
|
||
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
|
||
|
||
| 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 |
|
||
|
||
VOICEMEETER BANANA
|
||
|
||
| 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 |
|
||
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|
||
| 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 |
|
||
|
||
| 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 |
|
||
|
||
|
||
VOICEMEETER 8
|
||
|
||
| 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 |
|
||
|
||
| 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 |
|
||
|
||
| 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 |
|
||
|
||
|
||
*/
|
||
|
||
/**
|
||
@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
|
||
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)
|
||
- 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
|
||
|
||
/**
|
||
@brief Start / Stop Audio processing
|
||
|
||
he Callback will be called with
|
||
@return : 0: OK (no error).
|
||
-1: error
|
||
-2: no callback registred.
|
||
*/
|
||
|
||
long __stdcall VBVMR_AudioCallbackStart(void);
|
||
long __stdcall VBVMR_AudioCallbackStop(void);
|
||
|
||
/**
|
||
@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);
|
||
|
||
/** @} */
|
||
|
||
/******************************************************************************/
|
||
/* */
|
||
/* Macro Buttons */
|
||
/* */
|
||
/******************************************************************************/
|
||
|
||
/** @name Macro Buttons functions
|
||
* @{ */
|
||
|
||
/**
|
||
@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)
|
||
|
||
@return: 0: no new status.
|
||
>0: last nu logical button status changed.
|
||
-1: error (unexpected)
|
||
-2: no server.
|
||
*/
|
||
|
||
long __stdcall VBVMR_MacroButton_IsDirty(void);
|
||
|
||
/**
|
||
@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);
|
||
|
||
/**
|
||
@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 long(__stdcall *T_VBVMR_Login)(void);
|
||
typedef long long(__stdcall *T_VBVMR_Logout)(void);
|
||
typedef long long(__stdcall *T_VBVMR_RunVoicemeeter)(long vType);
|
||
|
||
typedef long long(__stdcall *T_VBVMR_GetVoicemeeterType)(long *pType);
|
||
typedef long long(__stdcall *T_VBVMR_GetVoicemeeterVersion)(long *pVersion);
|
||
|
||
typedef long long(__stdcall *T_VBVMR_IsParametersDirty)(void);
|
||
typedef long long(__stdcall *T_VBVMR_GetParameterFloat)(char *szParamName, float *pValue);
|
||
typedef long long(__stdcall *T_VBVMR_GetParameterStringA)(char *szParamName, char *szString);
|
||
typedef long long(__stdcall *T_VBVMR_GetParameterStringW)(char *szParamName, unsigned short *wszString);
|
||
|
||
typedef long long(__stdcall *T_VBVMR_GetLevel)(long nType, long nuChannel, float *pValue);
|
||
typedef long long(__stdcall *T_VBVMR_GetMidiMessage)(unsigned char *pMIDIBuffer, long nbByteMax);
|
||
typedef long long(__stdcall *T_VBVMR_SendMidiMessage)(unsigned char *pMIDIBuffer, long nbByteMax);
|
||
|
||
typedef long long(__stdcall *T_VBVMR_SetParameterFloat)(char *szParamName, float Value);
|
||
typedef long long(__stdcall *T_VBVMR_SetParameters)(char *szParamScript);
|
||
typedef long long(__stdcall *T_VBVMR_SetParametersW)(unsigned short *szParamScript);
|
||
typedef long long(__stdcall *T_VBVMR_SetParameterStringA)(char *szParamName, char *szString);
|
||
typedef long long(__stdcall *T_VBVMR_SetParameterStringW)(char *szParamName, unsigned short *wszString);
|
||
|
||
typedef long long(__stdcall *T_VBVMR_Output_GetDeviceNumber)(void);
|
||
typedef long long(__stdcall *T_VBVMR_Output_GetDeviceDescA)(long zindex, long *nType, char *szDeviceName, char *szHardwareId);
|
||
typedef long long(__stdcall *T_VBVMR_Output_GetDeviceDescW)(long zindex, long *nType, unsigned short *wszDeviceName, unsigned short *wszHardwareId);
|
||
typedef long long(__stdcall *T_VBVMR_Input_GetDeviceNumber)(void);
|
||
typedef long long(__stdcall *T_VBVMR_Input_GetDeviceDescA)(long zindex, long *nType, char *szDeviceName, char *szHardwareId);
|
||
typedef long long(__stdcall *T_VBVMR_Input_GetDeviceDescW)(long zindex, long *nType, unsigned short *wszDeviceName, unsigned short *wszHardwareId);
|
||
|
||
typedef long long(__stdcall *T_VBVMR_AudioCallbackRegister)(long mode, T_VBVMR_VBAUDIOCALLBACK pCallback, void *lpUser, char szClientName[64]);
|
||
typedef long long(__stdcall *T_VBVMR_AudioCallbackStart)(void);
|
||
typedef long long(__stdcall *T_VBVMR_AudioCallbackStop)(void);
|
||
typedef long long(__stdcall *T_VBVMR_AudioCallbackUnregister)(void);
|
||
|
||
typedef long long(__stdcall *T_VBVMR_MacroButton_IsDirty)(void);
|
||
typedef long long(__stdcall *T_VBVMR_MacroButton_GetStatus)(long nuLogicalButton, float *pValue, long bitmode);
|
||
typedef long 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;
|
||
|
||
#ifdef VBUSE_LOCALLIB
|
||
// internal used (not public)
|
||
void __stdcall VBVMR_SetHinstance(HINSTANCE hinst);
|
||
#endif
|
||
|
||
/******************************************************************************/
|
||
/* VBAN RT PACKET */
|
||
/******************************************************************************/
|
||
|
||
#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
|
||
|
||
#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
|
||
|
||
#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;
|
||
|
||
#pragma pack()
|
||
|
||
#define expected_size_T_VBAN_VMPARAMSTRIP_PACKET ((4 * 4) + (expected_size_T_VBAN_VMPARAM_STRIP * 8)) // 1436 max
|
||
// 1376
|
||
|
||
/******************************************************************************/
|
||
/* LOCAL FUNCTIONS */
|
||
/******************************************************************************/
|
||
|
||
long VBVMR_LocalInit(void);
|
||
long VBVMR_LocalEnd(void);
|
||
void *VBVMR_GetRequestVB0STREAMPTR(void);
|
||
|
||
long VBVMR_SetParametersWEx(unsigned short *szParamScript, long fCopyToClient);
|
||
|
||
long VBVMR_LoginEx(long properties);
|
||
|
||
long VBVMR_MB_PushSettings(void *lpParam);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /*__VOICEMEETER_REMOTE_H__*/
|