Voicemeeeter 1.0.4.7 / 2.0.2.7 update

The Virtual Audio Mixer discussions and support...
Post Reply
Vincent Burel
Site Admin
Posts: 2008
Joined: Sun Jan 17, 2010 12:01 pm

Voicemeeeter 1.0.4.7 / 2.0.2.7 update

Post by Vincent Burel »

New Voicemeeter version (Release Candidate) is now available for test:

Voicemeeter Standard 1.0.4.7:
http://vbaudio.jcedeveloppement.com/Dow ... _v1047.zip
REBOOT after de-installation / REBOOT after installation - and check your default audio device settings in Windows Control Panel / Sound Dialog Box

Voicemeeter Banana Package 2.0.2.7 (including Voicemeeter Standard):
http://vbaudio.jcedeveloppement.com/Dow ... _v2027.zip
REBOOT after de-installation / REBOOT after installation - and check your default audio device settings in Windows Control Panel / Sound Dialog Box

In the NEW significant things, there is the possibility to label all sliders (right click on bottom of the slider) and some advanced function in Voicemeeter Remote-API that can also be used in Macro Button (managing more shortcut key):
(1) fonction FadeTo = (target value,ms time):
Strip[0].FadeTo = (-3.0, 1000); will set the gain to -3 dB in one seconds
(2) relative settings: Stript(0).gain +=3; adds 3 db to the current value. Stript(0).gain -=3; subtract 3 dB to the current value.

Release Note: Modification / correction list:
(a) DISPLAY BUG: VAIO AUX Internal SR and buffer size were displaying the same as first virtual input.
(b) SYSTEM SETTINGS: BUFFER SIZE WARNING: Display warning dialog box when changing preferred buffer size.
(c) WINDOW POSITION: keep last position of the Voicemeeter main GUI, between two Launch or two SHOW command
(d) REMOTING API: Player Bus Assignment was missing in the instruction list.
(e) REMOTING SCRIPT: support RELATIVE instruction += or -= to add or subtract a value to the current parameters (implemented on gain, EQ gain, panel, audibility parameters).
(f) REMOTING SCRIPT: fadeto=(value, msTime); can be used to change the gain of a Strip or a Bus progressively. Example: Strip[0].fadeto = (-3.0, 1000) will place the slider at -3dB in 1000 ms from any initial position. Maximum time is 120.000 ms = 120 seconds = 2 minutes.
(g) REMOTE API: New functions to implement audio callback to process audio inside Voicemeeter (see SDK Manual and source code example).
(h) EDIT SLIDER LABEL: Edit Strip and BUS Label by Right clicking on Slider bottom. Label is also displayed inside the slider.
(i) MAIN GUI: “A” Indicator (after Remote Indicator) is there to show if a client application is connected to Audio Callback. A Click on it opens a dialog box showing what application is connected on.
(j) ASIO DRIVER: updated with new VBOARD object
(k) SYSTEM SETTINGS DIALOG BOX: can be moved on the screen by grabbing from everywhere (except active control).
(l) MASTER EQ: Mem A/B was not working correctly. B Memory not initialized correctly.
(m) 2D PANEL: Cursor is drawn in neutral color when in neutral position (double click).
(n) VBAN Dialog Box: Now display the number of detected incoming stream(s).
(o) SYSTEM SETTINGS: Virtual ASIO Type INT32LSB was not working with Virtual INSERT Driver.
Vincent Burel
Site Admin
Posts: 2008
Joined: Sun Jan 17, 2010 12:01 pm

[DEVELOPER] Voicemeeter AUDIO Callback

Post by Vincent Burel »

With Voicemeeter 1.0.4.7 / 2.0.2.4, comes with an important evolution in Voicemeeter Remote API: The AUDIO Callback mechanism providing a new audio API for Windows to process multi channel audio inside Voicemeeter! It means that Developers can now take advantage of the device aggregation and application interconnection made by Voicemeeter, which also manages all audio interface at you place (MME, Direct-X, KS, WDM and ASIO).
VoicemeeterVirtualAudioBoardCallback.jpg
VoicemeeterVirtualAudioBoardCallback.jpg (151.65 KiB) Viewed 8586 times
Voicemeeter Audio Callback provides 3 possible synchronized Streams (that can be possibly handled by 3 different applications or all by the same) to allow 3 kind of processing: the INPUT INSERT to process all audio sources just before being mixed by Voicemeeter. The OUTPUT INSERT to process all audio busses before master processing. Finally the MAIN STREAM provides all I/O’s (all inputs after insert and all outputs after BUS Fader).

With this new Audio API, it’s is now possible to process audio for any kind of application or use case managed by Voicemeeter Audio Mixer. For educational purpose as well as for prototyping or even commercial application, VB-AUDIO Callback API will allow developer to make their project or processing in few hours… where it needs months to manage regular audio MS-API correctly

VB-Audio API is made of 4 functions only:

Code: Select all

VBVMR_AudioCallbackRegister();
VBVMR_AudioCallbackStart();
VBVMR_AudioCallbackStop();
VBVMR_AudioCallbackUnregister();
Get Download Link to Voicemeeter Remote SDK now on this topic:
http://vbaudio.jcedeveloppement.com/for ... ?f=8&t=346

see details in VoicemeeterRemote.h header file:

Code: Select all


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
											

	/** 
	@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
	@param pCallback : Pointer on your callback function.
	@return :	 0: OK (no error).
				-1: error
				 1: callback already unregistered.
	*/

long __stdcall VBVMR_AudioCallbackUnregister(void);
Post Reply