Compare commits

..

No commits in common. "f6437fcbe724ac1773eac208664d4e85d74a8f80" and "b95c40265cb4a6ee7a07d60388de5c98d271c5c7" have entirely different histories.

7 changed files with 633 additions and 519 deletions

View File

@ -1,5 +1,5 @@
/******************************************************************************/ /******************************************************************************/
/* Voicemeeter Remote API. V.Burel<EFBFBD>2015-2023 */ /* Voicemeeter Remote API. V.Burel©2015-2023 */
/******************************************************************************/ /******************************************************************************/
/* This Library allows communication with Voicemeeter applications */ /* This Library allows communication with Voicemeeter applications */
/* 4 Client Applications can be connected to remote Voicemeeter. */ /* 4 Client Applications can be connected to remote Voicemeeter. */
@ -19,14 +19,15 @@
/* long = 32 bit integer */ /* long = 32 bit integer */
/******************************************************************************/ /******************************************************************************/
#ifndef __VOICEMEETER_REMOTE_H__ #ifndef __VOICEMEETER_REMOTE_H__
#define __VOICEMEETER_REMOTE_H__ #define __VOICEMEETER_REMOTE_H__
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C" {
{
#endif #endif
#define VBVMR_RESULT_OK 0 #define VBVMR_RESULT_OK 0
/******************************************************************************/ /******************************************************************************/
@ -55,6 +56,7 @@ extern "C"
long __stdcall VBVMR_Logout(void); long __stdcall VBVMR_Logout(void);
/** /**
@brief Run Voicemeeter Application (get installation directory and run Voicemeeter Application). @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). @param vType : Voicemeeter type (1 = Voicemeeter, 2= Voicemeeter Banana, 3= Voicemeeter Potato, 6 = Potato x64 bits).
@ -65,8 +67,19 @@ extern "C"
long __stdcall VBVMR_RunVoicemeeter(long vType); long __stdcall VBVMR_RunVoicemeeter(long vType);
/** @} */ /** @} */
/******************************************************************************/ /******************************************************************************/
/* */ /* */
/* General Information */ /* General Information */
@ -121,8 +134,26 @@ extern "C"
long __stdcall VBVMR_GetVoicemeeterVersion(long * pVersion); long __stdcall VBVMR_GetVoicemeeterVersion(long * pVersion);
/** @} */ /** @} */
/******************************************************************************/ /******************************************************************************/
/* */ /* */
/* Get parameters */ /* Get parameters */
@ -174,6 +205,14 @@ extern "C"
/** @} */ /** @} */
/******************************************************************************/ /******************************************************************************/
/* */ /* */
/* Get levels */ /* Get levels */
@ -244,6 +283,7 @@ extern "C"
long __stdcall VBVMR_GetLevel(long nType, long nuChannel, float * pValue); 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. @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) (this function must be called from one thread only)
@ -261,8 +301,10 @@ extern "C"
-6: no MIDI data -6: no MIDI data
*/ */
long __stdcall VBVMR_GetMidiMessage(unsigned char *pMIDIBuffer, long nbByteMax); 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. @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) (this function must be called from one thread only)
@ -277,10 +319,21 @@ extern "C"
-5: cannot send MIDI data -5: cannot send MIDI data
*/ */
long __stdcall VBVMR_SendMidiMessage(unsigned char *pMIDIBuffer, long nbByte); long __stdcall VBVMR_SendMidiMessage(unsigned char *pMIDIBuffer, long nbByte);
/** @} */ /** @} */
/******************************************************************************/ /******************************************************************************/
/* */ /* */
/* Set Parameters */ /* Set Parameters */
@ -308,6 +361,8 @@ extern "C"
long __stdcall VBVMR_SetParameterFloat(char * szParamName, float Value); long __stdcall VBVMR_SetParameterFloat(char * szParamName, float Value);
/** /**
@brief Set a single string parameters . @brief Set a single string parameters .
@param szParamName : Null Terminal ASCII String giving the name of the parameter (see parameters name table) @param szParamName : Null Terminal ASCII String giving the name of the parameter (see parameters name table)
@ -324,9 +379,13 @@ extern "C"
*/ */
long __stdcall VBVMR_SetParameterStringA(char * szParamName, char * szString); long __stdcall VBVMR_SetParameterStringA(char * szParamName, char * szString);
long __stdcall VBVMR_SetParameterStringW(char * szParamName, unsigned short * wszString); long __stdcall VBVMR_SetParameterStringW(char * szParamName, unsigned short * wszString);
/** /**
@brief Set one or several parameters by a script ( < 48 kB ). @brief Set one or several parameters by a script ( < 48 kB ).
@param szParamName : Null Terminal ASCII String giving the script @param szParamName : Null Terminal ASCII String giving the script
@ -351,12 +410,24 @@ extern "C"
long __stdcall VBVMR_SetParameters(char * szParamScript); long __stdcall VBVMR_SetParameters(char * szParamScript);
long __stdcall VBVMR_SetParametersW(unsigned short * szParamScript); long __stdcall VBVMR_SetParametersW(unsigned short * szParamScript);
/** @} */ /** @} */
/******************************************************************************/ /******************************************************************************/
/* DEVICES ENUMERATOR */ /* DEVICES ENUMERATOR */
/******************************************************************************/ /******************************************************************************/
/** @name Device Enumeration Functions /** @name Device Enumeration Functions
* @{ */ * @{ */
@ -403,8 +474,15 @@ extern "C"
long __stdcall VBVMR_Input_GetDeviceDescA(long zindex, long * nType, char * szDeviceName, char * szHardwareId); 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); long __stdcall VBVMR_Input_GetDeviceDescW(long zindex, long * nType, unsigned short * wszDeviceName, unsigned short * wszHardwareId);
/** @} */ /** @} */
/******************************************************************************/ /******************************************************************************/
/* VB-AUDIO CALLBACK */ /* VB-AUDIO CALLBACK */
/******************************************************************************/ /******************************************************************************/
@ -419,12 +497,14 @@ extern "C"
/** @name VB-Audio Callback Functions /** @name VB-Audio Callback Functions
* @{ */ * @{ */
typedef struct tagVBVMR_AUDIOINFO typedef struct tagVBVMR_AUDIOINFO
{ {
long samplerate; long samplerate;
long nbSamplePerFrame; long nbSamplePerFrame;
} VBVMR_T_AUDIOINFO, *VBVMR_PT_AUDIOINFO, *VBVMR_LPT_AUDIOINFO; } VBVMR_T_AUDIOINFO, *VBVMR_PT_AUDIOINFO, *VBVMR_LPT_AUDIOINFO;
typedef struct tagVBVMR_AUDIOBUFFER typedef struct tagVBVMR_AUDIOBUFFER
{ {
long audiobuffer_sr; //Sampling Rate long audiobuffer_sr; //Sampling Rate
@ -435,6 +515,7 @@ extern "C"
float * audiobuffer_w[128]; //nbo output 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; } 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. @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 part of single TIME CRITICAL Thread.
@ -452,8 +533,10 @@ extern "C"
@return : 0: always 0 (unused). @return : 0: always 0 (unused).
*/ */
typedef long (__stdcall *T_VBVMR_VBAUDIOCALLBACK)(void * lpUser, long nCommand, void * lpData, long nnn); 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 #define VBVMR_CBCOMMAND_STARTING 1 //command to initialize data according SR and buffer size
//info = (VBVMR_LPT_AUDIOINFO)lpData //info = (VBVMR_LPT_AUDIOINFO)lpData
@ -613,6 +696,7 @@ extern "C"
long __stdcall VBVMR_AudioCallbackStart(void); long __stdcall VBVMR_AudioCallbackStart(void);
long __stdcall VBVMR_AudioCallbackStop(void); long __stdcall VBVMR_AudioCallbackStop(void);
/** /**
@brief unregister your callback to release voicemeeter virtual driver @brief unregister your callback to release voicemeeter virtual driver
(this function will automatically call VBVMR_AudioCallbackStop() function) (this function will automatically call VBVMR_AudioCallbackStop() function)
@ -624,8 +708,15 @@ extern "C"
long __stdcall VBVMR_AudioCallbackUnregister(void); long __stdcall VBVMR_AudioCallbackUnregister(void);
/** @} */ /** @} */
/******************************************************************************/ /******************************************************************************/
/* */ /* */
/* Macro Buttons */ /* Macro Buttons */
@ -681,49 +772,62 @@ extern "C"
#define VBVMR_MACROBUTTON_MODE_TRIGGER 0x00000003 //change Trigger State #define VBVMR_MACROBUTTON_MODE_TRIGGER 0x00000003 //change Trigger State
#define VBVMR_MACROBUTTON_MODE_COLOR 0x00000004 //change color #define VBVMR_MACROBUTTON_MODE_COLOR 0x00000004 //change color
/** @} */ /** @} */
/******************************************************************************/ /******************************************************************************/
/* 'C' STRUCTURED INTERFACE */ /* 'C' STRUCTURED INTERFACE */
/******************************************************************************/ /******************************************************************************/
typedef long long(__stdcall *T_VBVMR_Login)(void); typedef long (__stdcall *T_VBVMR_Login)(void);
typedef long long(__stdcall *T_VBVMR_Logout)(void); typedef long (__stdcall *T_VBVMR_Logout)(void);
typedef long long(__stdcall *T_VBVMR_RunVoicemeeter)(long vType); typedef long (__stdcall *T_VBVMR_RunVoicemeeter)(long vType);
typedef long long(__stdcall *T_VBVMR_GetVoicemeeterType)(long *pType); typedef long (__stdcall *T_VBVMR_GetVoicemeeterType)(long * pType);
typedef long long(__stdcall *T_VBVMR_GetVoicemeeterVersion)(long *pVersion); typedef long (__stdcall *T_VBVMR_GetVoicemeeterVersion)(long * pVersion);
typedef long long(__stdcall *T_VBVMR_IsParametersDirty)(void); typedef long (__stdcall *T_VBVMR_IsParametersDirty)(void);
typedef long long(__stdcall *T_VBVMR_GetParameterFloat)(char *szParamName, float *pValue); typedef long (__stdcall *T_VBVMR_GetParameterFloat)(char * szParamName, float * pValue);
typedef long long(__stdcall *T_VBVMR_GetParameterStringA)(char *szParamName, char *szString); typedef long (__stdcall *T_VBVMR_GetParameterStringA)(char * szParamName, char * szString);
typedef long long(__stdcall *T_VBVMR_GetParameterStringW)(char *szParamName, unsigned short *wszString); typedef 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 (__stdcall *T_VBVMR_GetLevel)(long nType, long nuChannel, float * pValue);
typedef long long(__stdcall *T_VBVMR_SetParameters)(char *szParamScript); typedef long (__stdcall *T_VBVMR_GetMidiMessage)(unsigned char *pMIDIBuffer, long nbByteMax);
typedef long long(__stdcall *T_VBVMR_SetParametersW)(unsigned short *szParamScript); typedef long (__stdcall *T_VBVMR_SendMidiMessage)(unsigned char *pMIDIBuffer, long nbByteMax);
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 (__stdcall *T_VBVMR_SetParameterFloat)(char * szParamName, float Value);
typedef long long(__stdcall *T_VBVMR_Output_GetDeviceDescA)(long zindex, long *nType, char *szDeviceName, char *szHardwareId); typedef long (__stdcall *T_VBVMR_SetParameters)(char * szParamScript);
typedef long long(__stdcall *T_VBVMR_Output_GetDeviceDescW)(long zindex, long *nType, unsigned short *wszDeviceName, unsigned short *wszHardwareId); typedef long (__stdcall *T_VBVMR_SetParametersW)(unsigned short * szParamScript);
typedef long long(__stdcall *T_VBVMR_Input_GetDeviceNumber)(void); typedef long (__stdcall *T_VBVMR_SetParameterStringA)(char * szParamName, char * szString);
typedef long long(__stdcall *T_VBVMR_Input_GetDeviceDescA)(long zindex, long *nType, char *szDeviceName, char *szHardwareId); typedef long (__stdcall *T_VBVMR_SetParameterStringW)(char * szParamName, unsigned short * wszString);
typedef long long(__stdcall *T_VBVMR_Input_GetDeviceDescW)(long zindex, long *nType, unsigned short *wszDeviceName, unsigned short *wszHardwareId);
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 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 typedef struct tagVBVMR_INTERFACE
{ {
@ -763,6 +867,7 @@ extern "C"
T_VBVMR_MacroButton_GetStatus VBVMR_MacroButton_GetStatus; T_VBVMR_MacroButton_GetStatus VBVMR_MacroButton_GetStatus;
T_VBVMR_MacroButton_SetStatus VBVMR_MacroButton_SetStatus; T_VBVMR_MacroButton_SetStatus VBVMR_MacroButton_SetStatus;
} T_VBVMR_INTERFACE, *PT_VBVMR_INTERFACE, *LPT_VBVMR_INTERFACE; } T_VBVMR_INTERFACE, *PT_VBVMR_INTERFACE, *LPT_VBVMR_INTERFACE;
#ifdef VBUSE_LOCALLIB #ifdef VBUSE_LOCALLIB
@ -770,6 +875,12 @@ extern "C"
void __stdcall VBVMR_SetHinstance(HINSTANCE hinst); void __stdcall VBVMR_SetHinstance(HINSTANCE hinst);
#endif #endif
/******************************************************************************/ /******************************************************************************/
/* VBAN RT PACKET */ /* VBAN RT PACKET */
/******************************************************************************/ /******************************************************************************/
@ -860,6 +971,7 @@ extern "C"
#define VMRTSTATE_MODE_SEL 0x10000000 #define VMRTSTATE_MODE_SEL 0x10000000
#define VMRTSTATE_MODE_MONITOR 0x20000000 #define VMRTSTATE_MODE_MONITOR 0x20000000
#pragma pack(1) #pragma pack(1)
// long = 4 bytes // long = 4 bytes
@ -934,6 +1046,7 @@ extern "C"
#define VMRT_EQTYPE_LOSHELF 5 #define VMRT_EQTYPE_LOSHELF 5
#define VMRT_EQTYPE_HISHELF 6 #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))) #define expected_size_T_VBAN_VMPARAM_STRIP (8+ (8 * sizeof(short)) + (2*6) + (3 * 6 * sizeof(float)) + ((11 + 9 + 6 + 7) * sizeof(short)))
//170 //170
@ -967,8 +1080,14 @@ extern "C"
long VBVMR_MB_PushSettings(void * lpParam); long VBVMR_MB_PushSettings(void * lpParam);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /*__VOICEMEETER_REMOTE_H__*/ #endif /*__VOICEMEETER_REMOTE_H__*/

View File

@ -1,6 +1,7 @@
#ifndef __CDLL_H__ #ifndef __CDLL_H__
#define __CDLL_H__ #define __CDLL_H__
#include <windows.h>
#include "VoicemeeterRemote.h" #include "VoicemeeterRemote.h"
long initialize_dll_interfaces(T_VBVMR_INTERFACE *iVMR); long initialize_dll_interfaces(T_VBVMR_INTERFACE *iVMR);

View File

@ -3,7 +3,7 @@
void remove_name_in_path(char *szPath); void remove_name_in_path(char *szPath);
int replace_multiple_space_with_one(char *s, size_t len); int replace_multiple_space_with_one(char *s, size_t len);
char *kind_as_string(char *s, int kind, int n); char *kind_as_string(char *s, enum kind kind, int n);
char *version_as_string(char *, long v, int n); char *version_as_string(char *, long v, int n);
#endif /* __UTIL_H__ */ #endif /* __UTIL_H__ */

View File

@ -6,7 +6,6 @@
enum kind enum kind
{ {
UNKNOWN = -1,
BASIC = 1, BASIC = 1,
BANANA, BANANA,
POTATO, POTATO,

View File

@ -1,6 +1,5 @@
#include <stdbool.h> #include <stdbool.h>
#include <stdio.h> #include <stdio.h>
#include <windows.h>
#include "cdll.h" #include "cdll.h"
#include "util.h" #include "util.h"

View File

@ -70,9 +70,9 @@ int replace_multiple_space_with_one(char *s, size_t len)
* @param n maximum number of characters to be written to the buffer * @param n maximum number of characters to be written to the buffer
* @return char* The kind of Voicemeeter as a string * @return char* The kind of Voicemeeter as a string
*/ */
char *kind_as_string(char *s, int kind, int n) char *kind_as_string(char *s, enum kind kind, int n)
{ {
static const char *kinds[] = { char *kinds[] = {
"Basic", "Basic",
"Banana", "Banana",
"Potato", "Potato",

View File

@ -2,8 +2,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdbool.h> #include <stdbool.h>
#include <getopt.h> #include <getopt.h>
#include <string.h>
#include <ctype.h>
#include "cdll.h" #include "cdll.h"
#include "vmr.h" #include "vmr.h"
#include "log.h" #include "log.h"
@ -38,7 +36,7 @@ struct result
void help(void); void help(void);
enum kind set_kind(char *kval); enum kind set_kind(char *kval);
int init_voicemeeter(T_VBVMR_INTERFACE *vmr, enum kind kind); int init_voicemeeter(T_VBVMR_INTERFACE *vmr, int kind);
void interactive(T_VBVMR_INTERFACE *vmr); void interactive(T_VBVMR_INTERFACE *vmr);
void parse_input(T_VBVMR_INTERFACE *vmr, char *input, int len); void parse_input(T_VBVMR_INTERFACE *vmr, char *input, int len);
void parse_command(T_VBVMR_INTERFACE *vmr, char *command); void parse_command(T_VBVMR_INTERFACE *vmr, char *command);
@ -48,10 +46,11 @@ bool vflag = false;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
bool iflag = false, bool iflag = false;
mflag = false, bool mflag = false;
sflag = false; bool sflag = false;
int opt; int opt;
char *kvalue = "";
int dvalue; int dvalue;
enum kind kind = BANANAX64; enum kind kind = BANANAX64;
@ -71,12 +70,8 @@ int main(int argc, char *argv[])
help(); help();
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
case 'k': case 'k':
kind = set_kind(optarg); kvalue = optarg;
if (kind == UNKNOWN) kind = set_kind(kvalue);
{
log_fatal("Unknown Voicemeeter kind '%s'", optarg);
exit(EXIT_FAILURE);
}
break; break;
case 'm': case 'm':
mflag = true; mflag = true;
@ -95,7 +90,7 @@ int main(int argc, char *argv[])
} }
else else
{ {
log_warn( log_error(
"-D arg out of range, expected value from 0 up to 5\n" "-D arg out of range, expected value from 0 up to 5\n"
"Log level will default to LOG_WARN (3).\n"); "Log level will default to LOG_WARN (3).\n");
} }
@ -198,7 +193,8 @@ enum kind set_kind(char *kval)
} }
else else
{ {
return UNKNOWN; log_error("Unknown Voicemeeter kind '%s'\n", kval);
exit(EXIT_FAILURE);
} }
} }
@ -210,18 +206,18 @@ enum kind set_kind(char *kval)
* @param kind * @param kind
* @return int * @return int
*/ */
int init_voicemeeter(T_VBVMR_INTERFACE *vmr, enum kind kind) int init_voicemeeter(T_VBVMR_INTERFACE *vmr, int kind)
{ {
int rep = initialize_dll_interfaces(vmr); int rep = initialize_dll_interfaces(vmr);
if (rep < 0) if (rep < 0)
{ {
if (rep == -100) if (rep == -100)
{ {
log_fatal("Voicemeeter is not installed"); log_error("Voicemeeter is not installed");
} }
else else
{ {
log_fatal("Error loading Voicemeeter dll with code %d\n", rep); log_error("Error loading Voicemeeter dll with code %d\n", rep);
} }
return rep; return rep;
} }
@ -229,7 +225,7 @@ int init_voicemeeter(T_VBVMR_INTERFACE *vmr, enum kind kind)
rep = login(vmr, kind); rep = login(vmr, kind);
if (rep != 0) if (rep != 0)
{ {
log_fatal("Error logging into Voicemeeter"); log_error("Error logging into Voicemeeter");
return rep; return rep;
} }