voicemeeter/
bindings.rs

1/* automatically generated by rust-bindgen 0.72.1 */
2
3#![allow(non_upper_case_globals)]
4#![allow(non_camel_case_types)]
5#![allow(unsafe_op_in_unsafe_fn)]
6#![allow(deref_nullptr)]
7#![allow(clippy::missing_safety_doc)]
8#![allow(non_snake_case)]
9
10pub const VBVMR_RESULT_OK: u32 = 0;
11pub const expected_size_T_VBAN_VMRT_PACKET: u32 = 1384;
12impl VBVMR_DEVTYPE {
13    pub const MME: VBVMR_DEVTYPE = VBVMR_DEVTYPE(1);
14    pub const WDM: VBVMR_DEVTYPE = VBVMR_DEVTYPE(3);
15    pub const KS: VBVMR_DEVTYPE = VBVMR_DEVTYPE(4);
16    pub const ASIO: VBVMR_DEVTYPE = VBVMR_DEVTYPE(5);
17}
18#[repr(transparent)]
19#[doc = " @name Device Enumeration Functions\n @{"]
20#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
21pub struct VBVMR_DEVTYPE(pub ::std::os::raw::c_int);
22#[doc = " @name VB-Audio Callback Functions\n @{"]
23#[repr(C)]
24#[derive(Debug, Copy, Clone)]
25pub struct tagVBVMR_AUDIOINFO {
26    pub samplerate: ::std::os::raw::c_long,
27    pub nbSamplePerFrame: ::std::os::raw::c_long,
28}
29#[allow(clippy::unnecessary_operation, clippy::identity_op)]
30const _: () = {
31    ["Size of tagVBVMR_AUDIOINFO"][::std::mem::size_of::<tagVBVMR_AUDIOINFO>() - 8usize];
32    ["Alignment of tagVBVMR_AUDIOINFO"][::std::mem::align_of::<tagVBVMR_AUDIOINFO>() - 4usize];
33    ["Offset of field: tagVBVMR_AUDIOINFO::samplerate"]
34        [::std::mem::offset_of!(tagVBVMR_AUDIOINFO, samplerate) - 0usize];
35    ["Offset of field: tagVBVMR_AUDIOINFO::nbSamplePerFrame"]
36        [::std::mem::offset_of!(tagVBVMR_AUDIOINFO, nbSamplePerFrame) - 4usize];
37};
38#[doc = " @name VB-Audio Callback Functions\n @{"]
39pub type VBVMR_T_AUDIOINFO = tagVBVMR_AUDIOINFO;
40#[doc = " @name VB-Audio Callback Functions\n @{"]
41pub type VBVMR_PT_AUDIOINFO = *mut tagVBVMR_AUDIOINFO;
42#[doc = " @name VB-Audio Callback Functions\n @{"]
43pub type VBVMR_LPT_AUDIOINFO = *mut tagVBVMR_AUDIOINFO;
44#[repr(C)]
45#[derive(Debug, Copy, Clone)]
46pub struct tagVBVMR_AUDIOBUFFER {
47    pub audiobuffer_sr: ::std::os::raw::c_long,
48    pub audiobuffer_nbs: ::std::os::raw::c_long,
49    pub audiobuffer_nbi: ::std::os::raw::c_long,
50    pub audiobuffer_nbo: ::std::os::raw::c_long,
51    pub audiobuffer_r: [*mut f32; 128usize],
52    pub audiobuffer_w: [*mut f32; 128usize],
53}
54#[allow(clippy::unnecessary_operation, clippy::identity_op)]
55const _: () = {
56    ["Size of tagVBVMR_AUDIOBUFFER"][::std::mem::size_of::<tagVBVMR_AUDIOBUFFER>() - 2064usize];
57    ["Alignment of tagVBVMR_AUDIOBUFFER"][::std::mem::align_of::<tagVBVMR_AUDIOBUFFER>() - 8usize];
58    ["Offset of field: tagVBVMR_AUDIOBUFFER::audiobuffer_sr"]
59        [::std::mem::offset_of!(tagVBVMR_AUDIOBUFFER, audiobuffer_sr) - 0usize];
60    ["Offset of field: tagVBVMR_AUDIOBUFFER::audiobuffer_nbs"]
61        [::std::mem::offset_of!(tagVBVMR_AUDIOBUFFER, audiobuffer_nbs) - 4usize];
62    ["Offset of field: tagVBVMR_AUDIOBUFFER::audiobuffer_nbi"]
63        [::std::mem::offset_of!(tagVBVMR_AUDIOBUFFER, audiobuffer_nbi) - 8usize];
64    ["Offset of field: tagVBVMR_AUDIOBUFFER::audiobuffer_nbo"]
65        [::std::mem::offset_of!(tagVBVMR_AUDIOBUFFER, audiobuffer_nbo) - 12usize];
66    ["Offset of field: tagVBVMR_AUDIOBUFFER::audiobuffer_r"]
67        [::std::mem::offset_of!(tagVBVMR_AUDIOBUFFER, audiobuffer_r) - 16usize];
68    ["Offset of field: tagVBVMR_AUDIOBUFFER::audiobuffer_w"]
69        [::std::mem::offset_of!(tagVBVMR_AUDIOBUFFER, audiobuffer_w) - 1040usize];
70};
71pub type VBVMR_T_AUDIOBUFFER = tagVBVMR_AUDIOBUFFER;
72pub type VBVMR_PT_AUDIOBUFFER = *mut tagVBVMR_AUDIOBUFFER;
73pub type VBVMR_LPT_AUDIOBUFFER = *mut tagVBVMR_AUDIOBUFFER;
74#[doc = "@brief VB-AUDIO Callback is called for different task to Initialize, perform and end your process.\nVB-AUDIO Callback is part of single TIME CRITICAL Thread.\nVB-AUDIO Callback is non re-entrant (cannot be called while in process)\nVB-AUDIO Callback is supposed to be REAL TIME when called to process buffer.\n(it means that the process has to be performed as fast as possible, waiting cycles are forbidden.\ndo not use O/S synchronization object, even Critical_Section can generate waiting cycle. Do not use\nsystem functions that can generate waiting cycle like display, disk or communication functions for example).\n\n@param lpUser: User pointer given on callback registration.\n@param ncommand: reason why the callback is called.\n@param lpData: pointer on structure, pending on nCommand.\n@param nnn: additional data, unused\n\n@return :\t 0: always 0 (unused)."]
75pub type T_VBVMR_VBAUDIOCALLBACK = ::std::option::Option<
76    unsafe extern "C" fn(
77        lpUser: *mut ::std::os::raw::c_void,
78        nCommand: ::std::os::raw::c_long,
79        lpData: *mut ::std::os::raw::c_void,
80        nnn: ::std::os::raw::c_long,
81    ) -> ::std::os::raw::c_long,
82>;
83impl VBVMR_CBCOMMAND {
84    pub const STARTING: VBVMR_CBCOMMAND = VBVMR_CBCOMMAND(1);
85    pub const ENDING: VBVMR_CBCOMMAND = VBVMR_CBCOMMAND(2);
86    pub const CHANGE: VBVMR_CBCOMMAND = VBVMR_CBCOMMAND(3);
87    pub const BUFFER_IN: VBVMR_CBCOMMAND = VBVMR_CBCOMMAND(10);
88    pub const BUFFER_OUT: VBVMR_CBCOMMAND = VBVMR_CBCOMMAND(11);
89    pub const BUFFER_MAIN: VBVMR_CBCOMMAND = VBVMR_CBCOMMAND(20);
90}
91#[repr(transparent)]
92#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
93pub struct VBVMR_CBCOMMAND(pub ::std::os::raw::c_int);
94impl VBVMR_AUDIOCALLBACK {
95    pub const INPUT: VBVMR_AUDIOCALLBACK = VBVMR_AUDIOCALLBACK(1);
96    pub const OUTPUT: VBVMR_AUDIOCALLBACK = VBVMR_AUDIOCALLBACK(2);
97    pub const MAIN: VBVMR_AUDIOCALLBACK = VBVMR_AUDIOCALLBACK(4);
98}
99impl ::std::ops::BitOr<VBVMR_AUDIOCALLBACK> for VBVMR_AUDIOCALLBACK {
100    type Output = Self;
101    #[inline]
102    fn bitor(self, other: Self) -> Self {
103        VBVMR_AUDIOCALLBACK(self.0 | other.0)
104    }
105}
106impl ::std::ops::BitOrAssign for VBVMR_AUDIOCALLBACK {
107    #[inline]
108    fn bitor_assign(&mut self, rhs: VBVMR_AUDIOCALLBACK) {
109        self.0 |= rhs.0;
110    }
111}
112impl ::std::ops::BitAnd<VBVMR_AUDIOCALLBACK> for VBVMR_AUDIOCALLBACK {
113    type Output = Self;
114    #[inline]
115    fn bitand(self, other: Self) -> Self {
116        VBVMR_AUDIOCALLBACK(self.0 & other.0)
117    }
118}
119impl ::std::ops::BitAndAssign for VBVMR_AUDIOCALLBACK {
120    #[inline]
121    fn bitand_assign(&mut self, rhs: VBVMR_AUDIOCALLBACK) {
122        self.0 &= rhs.0;
123    }
124}
125#[repr(transparent)]
126#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
127pub struct VBVMR_AUDIOCALLBACK(pub ::std::os::raw::c_int);
128impl VBVMR_MACROBUTTON_MODE {
129    pub const DEFAULT: VBVMR_MACROBUTTON_MODE = VBVMR_MACROBUTTON_MODE(0);
130    pub const STATEONLY: VBVMR_MACROBUTTON_MODE = VBVMR_MACROBUTTON_MODE(2);
131    pub const TRIGGER: VBVMR_MACROBUTTON_MODE = VBVMR_MACROBUTTON_MODE(3);
132}
133#[repr(transparent)]
134#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
135pub struct VBVMR_MACROBUTTON_MODE(pub ::std::os::raw::c_int);
136pub type T_VBVMR_Login = ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_long>;
137pub type T_VBVMR_Logout = ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_long>;
138pub type T_VBVMR_RunVoicemeeter = ::std::option::Option<
139    unsafe extern "C" fn(vType: ::std::os::raw::c_long) -> ::std::os::raw::c_long,
140>;
141pub type T_VBVMR_GetVoicemeeterType = ::std::option::Option<
142    unsafe extern "C" fn(pType: *mut ::std::os::raw::c_long) -> ::std::os::raw::c_long,
143>;
144pub type T_VBVMR_GetVoicemeeterVersion = ::std::option::Option<
145    unsafe extern "C" fn(pVersion: *mut ::std::os::raw::c_long) -> ::std::os::raw::c_long,
146>;
147pub type T_VBVMR_IsParametersDirty =
148    ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_long>;
149pub type T_VBVMR_GetParameterFloat = ::std::option::Option<
150    unsafe extern "C" fn(
151        szParamName: *mut ::std::os::raw::c_char,
152        pValue: *mut f32,
153    ) -> ::std::os::raw::c_long,
154>;
155pub type T_VBVMR_GetParameterStringA = ::std::option::Option<
156    unsafe extern "C" fn(
157        szParamName: *mut ::std::os::raw::c_char,
158        szString: *mut ::std::os::raw::c_char,
159    ) -> ::std::os::raw::c_long,
160>;
161pub type T_VBVMR_GetParameterStringW = ::std::option::Option<
162    unsafe extern "C" fn(
163        szParamName: *mut ::std::os::raw::c_char,
164        wszString: *mut ::std::os::raw::c_ushort,
165    ) -> ::std::os::raw::c_long,
166>;
167pub type T_VBVMR_GetLevel = ::std::option::Option<
168    unsafe extern "C" fn(
169        nType: ::std::os::raw::c_long,
170        nuChannel: ::std::os::raw::c_long,
171        pValue: *mut f32,
172    ) -> ::std::os::raw::c_long,
173>;
174pub type T_VBVMR_GetMidiMessage = ::std::option::Option<
175    unsafe extern "C" fn(
176        pMIDIBuffer: *mut ::std::os::raw::c_uchar,
177        nbByteMax: ::std::os::raw::c_long,
178    ) -> ::std::os::raw::c_long,
179>;
180pub type T_VBVMR_SetParameterFloat = ::std::option::Option<
181    unsafe extern "C" fn(
182        szParamName: *mut ::std::os::raw::c_char,
183        Value: f32,
184    ) -> ::std::os::raw::c_long,
185>;
186pub type T_VBVMR_SetParameters = ::std::option::Option<
187    unsafe extern "C" fn(szParamScript: *mut ::std::os::raw::c_char) -> ::std::os::raw::c_long,
188>;
189pub type T_VBVMR_SetParametersW = ::std::option::Option<
190    unsafe extern "C" fn(szParamScript: *mut ::std::os::raw::c_ushort) -> ::std::os::raw::c_long,
191>;
192pub type T_VBVMR_SetParameterStringA = ::std::option::Option<
193    unsafe extern "C" fn(
194        szParamName: *mut ::std::os::raw::c_char,
195        szString: *mut ::std::os::raw::c_char,
196    ) -> ::std::os::raw::c_long,
197>;
198pub type T_VBVMR_SetParameterStringW = ::std::option::Option<
199    unsafe extern "C" fn(
200        szParamName: *mut ::std::os::raw::c_char,
201        wszString: *mut ::std::os::raw::c_ushort,
202    ) -> ::std::os::raw::c_long,
203>;
204pub type T_VBVMR_Output_GetDeviceNumber =
205    ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_long>;
206pub type T_VBVMR_Output_GetDeviceDescA = ::std::option::Option<
207    unsafe extern "C" fn(
208        zindex: ::std::os::raw::c_long,
209        nType: *mut ::std::os::raw::c_long,
210        szDeviceName: *mut ::std::os::raw::c_char,
211        szHardwareId: *mut ::std::os::raw::c_char,
212    ) -> ::std::os::raw::c_long,
213>;
214pub type T_VBVMR_Output_GetDeviceDescW = ::std::option::Option<
215    unsafe extern "C" fn(
216        zindex: ::std::os::raw::c_long,
217        nType: *mut ::std::os::raw::c_long,
218        wszDeviceName: *mut ::std::os::raw::c_ushort,
219        wszHardwareId: *mut ::std::os::raw::c_ushort,
220    ) -> ::std::os::raw::c_long,
221>;
222pub type T_VBVMR_Input_GetDeviceNumber =
223    ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_long>;
224pub type T_VBVMR_Input_GetDeviceDescA = ::std::option::Option<
225    unsafe extern "C" fn(
226        zindex: ::std::os::raw::c_long,
227        nType: *mut ::std::os::raw::c_long,
228        szDeviceName: *mut ::std::os::raw::c_char,
229        szHardwareId: *mut ::std::os::raw::c_char,
230    ) -> ::std::os::raw::c_long,
231>;
232pub type T_VBVMR_Input_GetDeviceDescW = ::std::option::Option<
233    unsafe extern "C" fn(
234        zindex: ::std::os::raw::c_long,
235        nType: *mut ::std::os::raw::c_long,
236        wszDeviceName: *mut ::std::os::raw::c_ushort,
237        wszHardwareId: *mut ::std::os::raw::c_ushort,
238    ) -> ::std::os::raw::c_long,
239>;
240pub type T_VBVMR_AudioCallbackRegister = ::std::option::Option<
241    unsafe extern "C" fn(
242        mode: ::std::os::raw::c_long,
243        pCallback: T_VBVMR_VBAUDIOCALLBACK,
244        lpUser: *mut ::std::os::raw::c_void,
245        szClientName: *mut ::std::os::raw::c_char,
246    ) -> ::std::os::raw::c_long,
247>;
248pub type T_VBVMR_AudioCallbackStart =
249    ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_long>;
250pub type T_VBVMR_AudioCallbackStop =
251    ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_long>;
252pub type T_VBVMR_AudioCallbackUnregister =
253    ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_long>;
254pub type T_VBVMR_MacroButton_IsDirty =
255    ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_long>;
256pub type T_VBVMR_MacroButton_GetStatus = ::std::option::Option<
257    unsafe extern "C" fn(
258        nuLogicalButton: ::std::os::raw::c_long,
259        pValue: *mut f32,
260        bitmode: ::std::os::raw::c_long,
261    ) -> ::std::os::raw::c_long,
262>;
263pub type T_VBVMR_MacroButton_SetStatus = ::std::option::Option<
264    unsafe extern "C" fn(
265        nuLogicalButton: ::std::os::raw::c_long,
266        fValue: f32,
267        bitmode: ::std::os::raw::c_long,
268    ) -> ::std::os::raw::c_long,
269>;
270#[repr(C)]
271#[derive(Debug, Copy, Clone)]
272pub struct tagVBVMR_INTERFACE {
273    pub VBVMR_Login: T_VBVMR_Login,
274    pub VBVMR_Logout: T_VBVMR_Logout,
275    pub VBVMR_RunVoicemeeter: T_VBVMR_RunVoicemeeter,
276    pub VBVMR_GetVoicemeeterType: T_VBVMR_GetVoicemeeterType,
277    pub VBVMR_GetVoicemeeterVersion: T_VBVMR_GetVoicemeeterVersion,
278    pub VBVMR_IsParametersDirty: T_VBVMR_IsParametersDirty,
279    pub VBVMR_GetParameterFloat: T_VBVMR_GetParameterFloat,
280    pub VBVMR_GetParameterStringA: T_VBVMR_GetParameterStringA,
281    pub VBVMR_GetParameterStringW: T_VBVMR_GetParameterStringW,
282    pub VBVMR_GetLevel: T_VBVMR_GetLevel,
283    pub VBVMR_GetMidiMessage: T_VBVMR_GetMidiMessage,
284    pub VBVMR_SetParameterFloat: T_VBVMR_SetParameterFloat,
285    pub VBVMR_SetParameters: T_VBVMR_SetParameters,
286    pub VBVMR_SetParametersW: T_VBVMR_SetParametersW,
287    pub VBVMR_SetParameterStringA: T_VBVMR_SetParameterStringA,
288    pub VBVMR_SetParameterStringW: T_VBVMR_SetParameterStringW,
289    pub VBVMR_Output_GetDeviceNumber: T_VBVMR_Output_GetDeviceNumber,
290    pub VBVMR_Output_GetDeviceDescA: T_VBVMR_Output_GetDeviceDescA,
291    pub VBVMR_Output_GetDeviceDescW: T_VBVMR_Output_GetDeviceDescW,
292    pub VBVMR_Input_GetDeviceNumber: T_VBVMR_Input_GetDeviceNumber,
293    pub VBVMR_Input_GetDeviceDescA: T_VBVMR_Input_GetDeviceDescA,
294    pub VBVMR_Input_GetDeviceDescW: T_VBVMR_Input_GetDeviceDescW,
295    pub VBVMR_AudioCallbackRegister: T_VBVMR_AudioCallbackRegister,
296    pub VBVMR_AudioCallbackStart: T_VBVMR_AudioCallbackStart,
297    pub VBVMR_AudioCallbackStop: T_VBVMR_AudioCallbackStop,
298    pub VBVMR_AudioCallbackUnregister: T_VBVMR_AudioCallbackUnregister,
299    pub VBVMR_MacroButton_IsDirty: T_VBVMR_MacroButton_IsDirty,
300    pub VBVMR_MacroButton_GetStatus: T_VBVMR_MacroButton_GetStatus,
301    pub VBVMR_MacroButton_SetStatus: T_VBVMR_MacroButton_SetStatus,
302}
303#[allow(clippy::unnecessary_operation, clippy::identity_op)]
304const _: () = {
305    ["Size of tagVBVMR_INTERFACE"][::std::mem::size_of::<tagVBVMR_INTERFACE>() - 232usize];
306    ["Alignment of tagVBVMR_INTERFACE"][::std::mem::align_of::<tagVBVMR_INTERFACE>() - 8usize];
307    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_Login"]
308        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_Login) - 0usize];
309    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_Logout"]
310        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_Logout) - 8usize];
311    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_RunVoicemeeter"]
312        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_RunVoicemeeter) - 16usize];
313    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_GetVoicemeeterType"]
314        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_GetVoicemeeterType) - 24usize];
315    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_GetVoicemeeterVersion"]
316        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_GetVoicemeeterVersion) - 32usize];
317    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_IsParametersDirty"]
318        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_IsParametersDirty) - 40usize];
319    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_GetParameterFloat"]
320        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_GetParameterFloat) - 48usize];
321    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_GetParameterStringA"]
322        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_GetParameterStringA) - 56usize];
323    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_GetParameterStringW"]
324        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_GetParameterStringW) - 64usize];
325    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_GetLevel"]
326        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_GetLevel) - 72usize];
327    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_GetMidiMessage"]
328        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_GetMidiMessage) - 80usize];
329    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_SetParameterFloat"]
330        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_SetParameterFloat) - 88usize];
331    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_SetParameters"]
332        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_SetParameters) - 96usize];
333    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_SetParametersW"]
334        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_SetParametersW) - 104usize];
335    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_SetParameterStringA"]
336        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_SetParameterStringA) - 112usize];
337    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_SetParameterStringW"]
338        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_SetParameterStringW) - 120usize];
339    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_Output_GetDeviceNumber"]
340        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_Output_GetDeviceNumber) - 128usize];
341    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_Output_GetDeviceDescA"]
342        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_Output_GetDeviceDescA) - 136usize];
343    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_Output_GetDeviceDescW"]
344        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_Output_GetDeviceDescW) - 144usize];
345    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_Input_GetDeviceNumber"]
346        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_Input_GetDeviceNumber) - 152usize];
347    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_Input_GetDeviceDescA"]
348        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_Input_GetDeviceDescA) - 160usize];
349    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_Input_GetDeviceDescW"]
350        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_Input_GetDeviceDescW) - 168usize];
351    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_AudioCallbackRegister"]
352        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_AudioCallbackRegister) - 176usize];
353    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_AudioCallbackStart"]
354        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_AudioCallbackStart) - 184usize];
355    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_AudioCallbackStop"]
356        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_AudioCallbackStop) - 192usize];
357    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_AudioCallbackUnregister"]
358        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_AudioCallbackUnregister) - 200usize];
359    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_MacroButton_IsDirty"]
360        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_MacroButton_IsDirty) - 208usize];
361    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_MacroButton_GetStatus"]
362        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_MacroButton_GetStatus) - 216usize];
363    ["Offset of field: tagVBVMR_INTERFACE::VBVMR_MacroButton_SetStatus"]
364        [::std::mem::offset_of!(tagVBVMR_INTERFACE, VBVMR_MacroButton_SetStatus) - 224usize];
365};
366pub type T_VBVMR_INTERFACE = tagVBVMR_INTERFACE;
367pub type PT_VBVMR_INTERFACE = *mut tagVBVMR_INTERFACE;
368pub type LPT_VBVMR_INTERFACE = *mut tagVBVMR_INTERFACE;
369#[repr(C, packed)]
370#[derive(Debug, Copy, Clone)]
371pub struct tagVBAN_VMRT_PACKET {
372    pub voicemeeterType: ::std::os::raw::c_uchar,
373    pub reserved: ::std::os::raw::c_uchar,
374    pub buffersize: ::std::os::raw::c_ushort,
375    pub voicemeeterVersion: ::std::os::raw::c_ulong,
376    pub optionBits: ::std::os::raw::c_ulong,
377    pub samplerate: ::std::os::raw::c_ulong,
378    pub inputLeveldB100: [::std::os::raw::c_short; 34usize],
379    pub outputLeveldB100: [::std::os::raw::c_short; 64usize],
380    pub TransportBit: ::std::os::raw::c_ulong,
381    pub stripState: [::std::os::raw::c_ulong; 8usize],
382    pub busState: [::std::os::raw::c_ulong; 8usize],
383    pub stripGaindB100Layer1: [::std::os::raw::c_short; 8usize],
384    pub stripGaindB100Layer2: [::std::os::raw::c_short; 8usize],
385    pub stripGaindB100Layer3: [::std::os::raw::c_short; 8usize],
386    pub stripGaindB100Layer4: [::std::os::raw::c_short; 8usize],
387    pub stripGaindB100Layer5: [::std::os::raw::c_short; 8usize],
388    pub stripGaindB100Layer6: [::std::os::raw::c_short; 8usize],
389    pub stripGaindB100Layer7: [::std::os::raw::c_short; 8usize],
390    pub stripGaindB100Layer8: [::std::os::raw::c_short; 8usize],
391    pub busGaindB100: [::std::os::raw::c_short; 8usize],
392    pub stripLabelUTF8c60: [[::std::os::raw::c_char; 60usize]; 8usize],
393    pub busLabelUTF8c60: [[::std::os::raw::c_char; 60usize]; 8usize],
394}
395#[allow(clippy::unnecessary_operation, clippy::identity_op)]
396const _: () = {
397    ["Size of tagVBAN_VMRT_PACKET"][::std::mem::size_of::<tagVBAN_VMRT_PACKET>() - 1384usize];
398    ["Alignment of tagVBAN_VMRT_PACKET"][::std::mem::align_of::<tagVBAN_VMRT_PACKET>() - 1usize];
399    ["Offset of field: tagVBAN_VMRT_PACKET::voicemeeterType"]
400        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, voicemeeterType) - 0usize];
401    ["Offset of field: tagVBAN_VMRT_PACKET::reserved"]
402        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, reserved) - 1usize];
403    ["Offset of field: tagVBAN_VMRT_PACKET::buffersize"]
404        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, buffersize) - 2usize];
405    ["Offset of field: tagVBAN_VMRT_PACKET::voicemeeterVersion"]
406        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, voicemeeterVersion) - 4usize];
407    ["Offset of field: tagVBAN_VMRT_PACKET::optionBits"]
408        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, optionBits) - 8usize];
409    ["Offset of field: tagVBAN_VMRT_PACKET::samplerate"]
410        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, samplerate) - 12usize];
411    ["Offset of field: tagVBAN_VMRT_PACKET::inputLeveldB100"]
412        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, inputLeveldB100) - 16usize];
413    ["Offset of field: tagVBAN_VMRT_PACKET::outputLeveldB100"]
414        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, outputLeveldB100) - 84usize];
415    ["Offset of field: tagVBAN_VMRT_PACKET::TransportBit"]
416        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, TransportBit) - 212usize];
417    ["Offset of field: tagVBAN_VMRT_PACKET::stripState"]
418        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, stripState) - 216usize];
419    ["Offset of field: tagVBAN_VMRT_PACKET::busState"]
420        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, busState) - 248usize];
421    ["Offset of field: tagVBAN_VMRT_PACKET::stripGaindB100Layer1"]
422        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, stripGaindB100Layer1) - 280usize];
423    ["Offset of field: tagVBAN_VMRT_PACKET::stripGaindB100Layer2"]
424        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, stripGaindB100Layer2) - 296usize];
425    ["Offset of field: tagVBAN_VMRT_PACKET::stripGaindB100Layer3"]
426        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, stripGaindB100Layer3) - 312usize];
427    ["Offset of field: tagVBAN_VMRT_PACKET::stripGaindB100Layer4"]
428        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, stripGaindB100Layer4) - 328usize];
429    ["Offset of field: tagVBAN_VMRT_PACKET::stripGaindB100Layer5"]
430        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, stripGaindB100Layer5) - 344usize];
431    ["Offset of field: tagVBAN_VMRT_PACKET::stripGaindB100Layer6"]
432        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, stripGaindB100Layer6) - 360usize];
433    ["Offset of field: tagVBAN_VMRT_PACKET::stripGaindB100Layer7"]
434        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, stripGaindB100Layer7) - 376usize];
435    ["Offset of field: tagVBAN_VMRT_PACKET::stripGaindB100Layer8"]
436        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, stripGaindB100Layer8) - 392usize];
437    ["Offset of field: tagVBAN_VMRT_PACKET::busGaindB100"]
438        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, busGaindB100) - 408usize];
439    ["Offset of field: tagVBAN_VMRT_PACKET::stripLabelUTF8c60"]
440        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, stripLabelUTF8c60) - 424usize];
441    ["Offset of field: tagVBAN_VMRT_PACKET::busLabelUTF8c60"]
442        [::std::mem::offset_of!(tagVBAN_VMRT_PACKET, busLabelUTF8c60) - 904usize];
443};
444pub type T_VBAN_VMRT_PACKET = tagVBAN_VMRT_PACKET;
445pub type PT_VBAN_VMRT_PACKET = *mut tagVBAN_VMRT_PACKET;
446pub type LPT_VBAN_VMRT_PACKET = *mut tagVBAN_VMRT_PACKET;
447impl VMRTSTATE_MODE {
448    pub const MUTE: VMRTSTATE_MODE = VMRTSTATE_MODE(1);
449    pub const SOLO: VMRTSTATE_MODE = VMRTSTATE_MODE(2);
450    pub const MONO: VMRTSTATE_MODE = VMRTSTATE_MODE(4);
451    pub const MUTEC: VMRTSTATE_MODE = VMRTSTATE_MODE(8);
452    pub const MIXDOWN: VMRTSTATE_MODE = VMRTSTATE_MODE(16);
453    pub const REPEAT: VMRTSTATE_MODE = VMRTSTATE_MODE(32);
454    pub const MIXDOWNB: VMRTSTATE_MODE = VMRTSTATE_MODE(48);
455    pub const COMPOSITE: VMRTSTATE_MODE = VMRTSTATE_MODE(64);
456    pub const UPMIXTV: VMRTSTATE_MODE = VMRTSTATE_MODE(80);
457    pub const UPMIX2: VMRTSTATE_MODE = VMRTSTATE_MODE(96);
458    pub const UPMIX4: VMRTSTATE_MODE = VMRTSTATE_MODE(112);
459    pub const UPMIX6: VMRTSTATE_MODE = VMRTSTATE_MODE(128);
460    pub const CENTER: VMRTSTATE_MODE = VMRTSTATE_MODE(144);
461    pub const LFE: VMRTSTATE_MODE = VMRTSTATE_MODE(160);
462    pub const REAR: VMRTSTATE_MODE = VMRTSTATE_MODE(176);
463    pub const MASK: VMRTSTATE_MODE = VMRTSTATE_MODE(240);
464    pub const EQ: VMRTSTATE_MODE = VMRTSTATE_MODE(256);
465    pub const CROSS: VMRTSTATE_MODE = VMRTSTATE_MODE(512);
466    pub const EQB: VMRTSTATE_MODE = VMRTSTATE_MODE(2048);
467    pub const BUSA: VMRTSTATE_MODE = VMRTSTATE_MODE(4096);
468    pub const BUSA1: VMRTSTATE_MODE = VMRTSTATE_MODE(4096);
469    pub const BUSA2: VMRTSTATE_MODE = VMRTSTATE_MODE(8192);
470    pub const BUSA3: VMRTSTATE_MODE = VMRTSTATE_MODE(16384);
471    pub const BUSA4: VMRTSTATE_MODE = VMRTSTATE_MODE(32768);
472    pub const BUSA5: VMRTSTATE_MODE = VMRTSTATE_MODE(524288);
473    pub const BUSB: VMRTSTATE_MODE = VMRTSTATE_MODE(65536);
474    pub const BUSB1: VMRTSTATE_MODE = VMRTSTATE_MODE(65536);
475    pub const BUSB2: VMRTSTATE_MODE = VMRTSTATE_MODE(131072);
476    pub const BUSB3: VMRTSTATE_MODE = VMRTSTATE_MODE(262144);
477    pub const PAN0: VMRTSTATE_MODE = VMRTSTATE_MODE(0);
478    pub const PANCOLOR: VMRTSTATE_MODE = VMRTSTATE_MODE(1048576);
479    pub const PANMOD: VMRTSTATE_MODE = VMRTSTATE_MODE(2097152);
480    pub const PANMASK: VMRTSTATE_MODE = VMRTSTATE_MODE(15728640);
481    pub const POSTFX_R: VMRTSTATE_MODE = VMRTSTATE_MODE(16777216);
482    pub const POSTFX_D: VMRTSTATE_MODE = VMRTSTATE_MODE(33554432);
483    pub const POSTFX1: VMRTSTATE_MODE = VMRTSTATE_MODE(67108864);
484    pub const POSTFX2: VMRTSTATE_MODE = VMRTSTATE_MODE(134217728);
485    pub const SEL: VMRTSTATE_MODE = VMRTSTATE_MODE(268435456);
486    pub const MONITOR: VMRTSTATE_MODE = VMRTSTATE_MODE(536870912);
487}
488#[repr(transparent)]
489#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
490pub struct VMRTSTATE_MODE(pub ::std::os::raw::c_int);
491pub struct VoicemeeterRemoteRaw {
492    __library: ::libloading::Library,
493    pub VBVMR_Login: unsafe extern "system" fn() -> ::std::os::raw::c_long,
494    pub VBVMR_Logout: unsafe extern "system" fn() -> ::std::os::raw::c_long,
495    pub VBVMR_RunVoicemeeter:
496        unsafe extern "system" fn(vType: ::std::os::raw::c_long) -> ::std::os::raw::c_long,
497    pub VBVMR_GetVoicemeeterType:
498        unsafe extern "system" fn(pType: *mut ::std::os::raw::c_long) -> ::std::os::raw::c_long,
499    pub VBVMR_GetVoicemeeterVersion:
500        unsafe extern "system" fn(pVersion: *mut ::std::os::raw::c_long) -> ::std::os::raw::c_long,
501    pub VBVMR_IsParametersDirty: unsafe extern "system" fn() -> ::std::os::raw::c_long,
502    pub VBVMR_GetParameterFloat: unsafe extern "system" fn(
503        szParamName: *mut ::std::os::raw::c_char,
504        pValue: *mut f32,
505    ) -> ::std::os::raw::c_long,
506    pub VBVMR_GetParameterStringA: unsafe extern "system" fn(
507        szParamName: *mut ::std::os::raw::c_char,
508        szString: *mut ::std::os::raw::c_char,
509    ) -> ::std::os::raw::c_long,
510    pub VBVMR_GetParameterStringW: unsafe extern "system" fn(
511        szParamName: *mut ::std::os::raw::c_char,
512        wszString: *mut ::std::os::raw::c_ushort,
513    ) -> ::std::os::raw::c_long,
514    pub VBVMR_GetLevel: unsafe extern "system" fn(
515        nType: ::std::os::raw::c_long,
516        nuChannel: ::std::os::raw::c_long,
517        pValue: *mut f32,
518    ) -> ::std::os::raw::c_long,
519    pub VBVMR_GetMidiMessage: unsafe extern "system" fn(
520        pMIDIBuffer: *mut ::std::os::raw::c_uchar,
521        nbByteMax: ::std::os::raw::c_long,
522    ) -> ::std::os::raw::c_long,
523    pub VBVMR_SetParameterFloat: unsafe extern "system" fn(
524        szParamName: *mut ::std::os::raw::c_char,
525        Value: f32,
526    ) -> ::std::os::raw::c_long,
527    pub VBVMR_SetParameterStringA: unsafe extern "system" fn(
528        szParamName: *mut ::std::os::raw::c_char,
529        szString: *mut ::std::os::raw::c_char,
530    ) -> ::std::os::raw::c_long,
531    pub VBVMR_SetParameterStringW: unsafe extern "system" fn(
532        szParamName: *mut ::std::os::raw::c_char,
533        wszString: *mut ::std::os::raw::c_ushort,
534    ) -> ::std::os::raw::c_long,
535    pub VBVMR_SetParameters: unsafe extern "system" fn(
536        szParamScript: *mut ::std::os::raw::c_char,
537    ) -> ::std::os::raw::c_long,
538    pub VBVMR_SetParametersW: unsafe extern "system" fn(
539        szParamScript: *mut ::std::os::raw::c_ushort,
540    ) -> ::std::os::raw::c_long,
541    pub VBVMR_Output_GetDeviceNumber: unsafe extern "system" fn() -> ::std::os::raw::c_long,
542    pub VBVMR_Output_GetDeviceDescA: unsafe extern "system" fn(
543        zindex: ::std::os::raw::c_long,
544        nType: *mut ::std::os::raw::c_long,
545        szDeviceName: *mut ::std::os::raw::c_char,
546        szHardwareId: *mut ::std::os::raw::c_char,
547    ) -> ::std::os::raw::c_long,
548    pub VBVMR_Output_GetDeviceDescW: unsafe extern "system" fn(
549        zindex: ::std::os::raw::c_long,
550        nType: *mut ::std::os::raw::c_long,
551        wszDeviceName: *mut ::std::os::raw::c_ushort,
552        wszHardwareId: *mut ::std::os::raw::c_ushort,
553    ) -> ::std::os::raw::c_long,
554    pub VBVMR_Input_GetDeviceNumber: unsafe extern "system" fn() -> ::std::os::raw::c_long,
555    pub VBVMR_Input_GetDeviceDescA: unsafe extern "system" fn(
556        zindex: ::std::os::raw::c_long,
557        nType: *mut ::std::os::raw::c_long,
558        szDeviceName: *mut ::std::os::raw::c_char,
559        szHardwareId: *mut ::std::os::raw::c_char,
560    ) -> ::std::os::raw::c_long,
561    pub VBVMR_Input_GetDeviceDescW: unsafe extern "system" fn(
562        zindex: ::std::os::raw::c_long,
563        nType: *mut ::std::os::raw::c_long,
564        wszDeviceName: *mut ::std::os::raw::c_ushort,
565        wszHardwareId: *mut ::std::os::raw::c_ushort,
566    ) -> ::std::os::raw::c_long,
567    pub VBVMR_AudioCallbackRegister: unsafe extern "system" fn(
568        mode: ::std::os::raw::c_long,
569        pCallback: T_VBVMR_VBAUDIOCALLBACK,
570        lpUser: *mut ::std::os::raw::c_void,
571        szClientName: *mut ::std::os::raw::c_char,
572    ) -> ::std::os::raw::c_long,
573    pub VBVMR_AudioCallbackStart: unsafe extern "system" fn() -> ::std::os::raw::c_long,
574    pub VBVMR_AudioCallbackStop: unsafe extern "system" fn() -> ::std::os::raw::c_long,
575    pub VBVMR_AudioCallbackUnregister: unsafe extern "system" fn() -> ::std::os::raw::c_long,
576    pub VBVMR_MacroButton_IsDirty: unsafe extern "system" fn() -> ::std::os::raw::c_long,
577    pub VBVMR_MacroButton_GetStatus: unsafe extern "system" fn(
578        nuLogicalButton: ::std::os::raw::c_long,
579        pValue: *mut f32,
580        bitmode: ::std::os::raw::c_long,
581    ) -> ::std::os::raw::c_long,
582    pub VBVMR_MacroButton_SetStatus: unsafe extern "system" fn(
583        nuLogicalButton: ::std::os::raw::c_long,
584        fValue: f32,
585        bitmode: ::std::os::raw::c_long,
586    ) -> ::std::os::raw::c_long,
587}
588impl VoicemeeterRemoteRaw {
589    pub unsafe fn new<P>(path: P) -> Result<Self, ::libloading::Error>
590    where
591        P: AsRef<::std::ffi::OsStr>,
592    {
593        let library = ::libloading::Library::new(path)?;
594        Self::from_library(library)
595    }
596    pub unsafe fn from_library<L>(library: L) -> Result<Self, ::libloading::Error>
597    where
598        L: Into<::libloading::Library>,
599    {
600        let __library = library.into();
601        let VBVMR_Login = __library.get(b"VBVMR_Login\0").map(|sym| *sym)?;
602        let VBVMR_Logout = __library.get(b"VBVMR_Logout\0").map(|sym| *sym)?;
603        let VBVMR_RunVoicemeeter = __library.get(b"VBVMR_RunVoicemeeter\0").map(|sym| *sym)?;
604        let VBVMR_GetVoicemeeterType = __library
605            .get(b"VBVMR_GetVoicemeeterType\0")
606            .map(|sym| *sym)?;
607        let VBVMR_GetVoicemeeterVersion = __library
608            .get(b"VBVMR_GetVoicemeeterVersion\0")
609            .map(|sym| *sym)?;
610        let VBVMR_IsParametersDirty = __library
611            .get(b"VBVMR_IsParametersDirty\0")
612            .map(|sym| *sym)?;
613        let VBVMR_GetParameterFloat = __library
614            .get(b"VBVMR_GetParameterFloat\0")
615            .map(|sym| *sym)?;
616        let VBVMR_GetParameterStringA = __library
617            .get(b"VBVMR_GetParameterStringA\0")
618            .map(|sym| *sym)?;
619        let VBVMR_GetParameterStringW = __library
620            .get(b"VBVMR_GetParameterStringW\0")
621            .map(|sym| *sym)?;
622        let VBVMR_GetLevel = __library.get(b"VBVMR_GetLevel\0").map(|sym| *sym)?;
623        let VBVMR_GetMidiMessage = __library.get(b"VBVMR_GetMidiMessage\0").map(|sym| *sym)?;
624        let VBVMR_SetParameterFloat = __library
625            .get(b"VBVMR_SetParameterFloat\0")
626            .map(|sym| *sym)?;
627        let VBVMR_SetParameterStringA = __library
628            .get(b"VBVMR_SetParameterStringA\0")
629            .map(|sym| *sym)?;
630        let VBVMR_SetParameterStringW = __library
631            .get(b"VBVMR_SetParameterStringW\0")
632            .map(|sym| *sym)?;
633        let VBVMR_SetParameters = __library.get(b"VBVMR_SetParameters\0").map(|sym| *sym)?;
634        let VBVMR_SetParametersW = __library.get(b"VBVMR_SetParametersW\0").map(|sym| *sym)?;
635        let VBVMR_Output_GetDeviceNumber = __library
636            .get(b"VBVMR_Output_GetDeviceNumber\0")
637            .map(|sym| *sym)?;
638        let VBVMR_Output_GetDeviceDescA = __library
639            .get(b"VBVMR_Output_GetDeviceDescA\0")
640            .map(|sym| *sym)?;
641        let VBVMR_Output_GetDeviceDescW = __library
642            .get(b"VBVMR_Output_GetDeviceDescW\0")
643            .map(|sym| *sym)?;
644        let VBVMR_Input_GetDeviceNumber = __library
645            .get(b"VBVMR_Input_GetDeviceNumber\0")
646            .map(|sym| *sym)?;
647        let VBVMR_Input_GetDeviceDescA = __library
648            .get(b"VBVMR_Input_GetDeviceDescA\0")
649            .map(|sym| *sym)?;
650        let VBVMR_Input_GetDeviceDescW = __library
651            .get(b"VBVMR_Input_GetDeviceDescW\0")
652            .map(|sym| *sym)?;
653        let VBVMR_AudioCallbackRegister = __library
654            .get(b"VBVMR_AudioCallbackRegister\0")
655            .map(|sym| *sym)?;
656        let VBVMR_AudioCallbackStart = __library
657            .get(b"VBVMR_AudioCallbackStart\0")
658            .map(|sym| *sym)?;
659        let VBVMR_AudioCallbackStop = __library
660            .get(b"VBVMR_AudioCallbackStop\0")
661            .map(|sym| *sym)?;
662        let VBVMR_AudioCallbackUnregister = __library
663            .get(b"VBVMR_AudioCallbackUnregister\0")
664            .map(|sym| *sym)?;
665        let VBVMR_MacroButton_IsDirty = __library
666            .get(b"VBVMR_MacroButton_IsDirty\0")
667            .map(|sym| *sym)?;
668        let VBVMR_MacroButton_GetStatus = __library
669            .get(b"VBVMR_MacroButton_GetStatus\0")
670            .map(|sym| *sym)?;
671        let VBVMR_MacroButton_SetStatus = __library
672            .get(b"VBVMR_MacroButton_SetStatus\0")
673            .map(|sym| *sym)?;
674        Ok(VoicemeeterRemoteRaw {
675            __library,
676            VBVMR_Login,
677            VBVMR_Logout,
678            VBVMR_RunVoicemeeter,
679            VBVMR_GetVoicemeeterType,
680            VBVMR_GetVoicemeeterVersion,
681            VBVMR_IsParametersDirty,
682            VBVMR_GetParameterFloat,
683            VBVMR_GetParameterStringA,
684            VBVMR_GetParameterStringW,
685            VBVMR_GetLevel,
686            VBVMR_GetMidiMessage,
687            VBVMR_SetParameterFloat,
688            VBVMR_SetParameterStringA,
689            VBVMR_SetParameterStringW,
690            VBVMR_SetParameters,
691            VBVMR_SetParametersW,
692            VBVMR_Output_GetDeviceNumber,
693            VBVMR_Output_GetDeviceDescA,
694            VBVMR_Output_GetDeviceDescW,
695            VBVMR_Input_GetDeviceNumber,
696            VBVMR_Input_GetDeviceDescA,
697            VBVMR_Input_GetDeviceDescW,
698            VBVMR_AudioCallbackRegister,
699            VBVMR_AudioCallbackStart,
700            VBVMR_AudioCallbackStop,
701            VBVMR_AudioCallbackUnregister,
702            VBVMR_MacroButton_IsDirty,
703            VBVMR_MacroButton_GetStatus,
704            VBVMR_MacroButton_SetStatus,
705        })
706    }
707    #[doc = "@brief Open Communication Pipe With Voicemeeter (typically called on software startup).\n@return :\t 0: OK (no error).\n1: OK but Voicemeeter Application not launched.\n-1: cannot get client (unexpected)\n-2: unexpected login (logout was expected before)."]
708    pub unsafe fn VBVMR_Login(&self) -> ::std::os::raw::c_long {
709        (self.VBVMR_Login)()
710    }
711    #[doc = "@brief Close Communication Pipe With Voicemeeter (typically called on software end).\n@return : 0 if ok."]
712    pub unsafe fn VBVMR_Logout(&self) -> ::std::os::raw::c_long {
713        (self.VBVMR_Logout)()
714    }
715    #[doc = "@brief Run Voicemeeter Application (get installation directory and run Voicemeeter Application).\n@param vType : Voicemeeter type  (1 = Voicemeeter, 2= Voicemeeter Banana, 3= Voicemeeter Potato, 6 = Potato x64 bits).\n@return :\t 0: Ok.\n-1: not installed (UninstallString not found in registry).\n-2: unknown vType number"]
716    pub unsafe fn VBVMR_RunVoicemeeter(
717        &self,
718        vType: ::std::os::raw::c_long,
719    ) -> ::std::os::raw::c_long {
720        (self.VBVMR_RunVoicemeeter)(vType)
721    }
722    #[doc = "@brief Get Voicemeeter Type\n@param pType : Pointer on 32bit long receiving the type (1 = Voicemeeter, 2= Voicemeeter Banana, 3 Potato).\n\nVOICEMEETER STRIP/BUS INDEX ASSIGNMENT\n\n| Strip 1 | Strip 2 |Virtual Input|  BUS A  |  BUS B  |\n+---------+---------+-------------+---------+---------+\n|    0    |    1    |      2      |    0    |    1    |\n\nVOICEMEETER BANANA STRIP/BUS INDEX ASSIGNMENT\n\n| Strip 1 | Strip 2 | Strip 2 |Virtual Input|Virtual AUX|BUS A1|BUS A2|BUS A3|BUS B1|BUS B2|\n+---------+---------+---------+-------------+-----------+------+------+------+------+------+\n|    0    |    1    |    2    |       3     |     4     |   0  |   1  |   2  |   3  |   4  |\n\nVOICEMEETER POTATO STRIP/BUS INDEX ASSIGNMENT\n\n| 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|\n+---------+---------+---------+---------+---------+-------------+-----------+-----------+------+------+------+------+------+------+------+------+\n|    0    |    1    |    2    |    3    |    4    |      5      |     6     |     7     |   0  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |\n\n\n@return :\t 0: OK (no error).\n-1: cannot get client (unexpected)\n-2: no server."]
723    pub unsafe fn VBVMR_GetVoicemeeterType(
724        &self,
725        pType: *mut ::std::os::raw::c_long,
726    ) -> ::std::os::raw::c_long {
727        (self.VBVMR_GetVoicemeeterType)(pType)
728    }
729    #[doc = "@brief Get Voicemeeter Version\n@param pType : Pointer on 32bit integer receiving the version (v1.v2.v3.v4)\nv1 = (version & 0xFF000000)>>24;\nv2 = (version & 0x00FF0000)>>16;\nv3 = (version & 0x0000FF00)>>8;\nv4 = version & 0x000000FF;\n\n@return :\t 0: OK (no error).\n-1: cannot get client (unexpected)\n-2: no server."]
730    pub unsafe fn VBVMR_GetVoicemeeterVersion(
731        &self,
732        pVersion: *mut ::std::os::raw::c_long,
733    ) -> ::std::os::raw::c_long {
734        (self.VBVMR_GetVoicemeeterVersion)(pVersion)
735    }
736    #[doc = "@brief  Check if parameters have changed.\nCall this function periodically (typically every 10 or 20ms).\n(this function must be called from one thread only)\n\n@return:\t 0: no new paramters.\n1: New parameters -> update your display.\n-1: error (unexpected)\n-2: no server."]
737    pub unsafe fn VBVMR_IsParametersDirty(&self) -> ::std::os::raw::c_long {
738        (self.VBVMR_IsParametersDirty)()
739    }
740    #[doc = "@brief get parameter value.\n@param szParamName : Null Terminal ASCII String giving the name of the parameter (see parameters name table)\n@param pValue : Pointer on float (32bit float by reference) receiving the wanted value.\n@return :\t 0: OK (no error).\n-1: error\n-2: no server.\n-3: unknown parameter\n-5: structure mismatch"]
741    pub unsafe fn VBVMR_GetParameterFloat(
742        &self,
743        szParamName: *mut ::std::os::raw::c_char,
744        pValue: *mut f32,
745    ) -> ::std::os::raw::c_long {
746        (self.VBVMR_GetParameterFloat)(szParamName, pValue)
747    }
748    #[doc = "@brief get parameter value.\n@param szParamName : Null Terminal ASCII String giving the name of the parameter (see parameters name table)\n@param pValue : Pointer on String (512 char or wchar) receiving the wanted value.\n@return :\t 0: OK (no error).\n-1: error\n-2: no server.\n-3: unknown parameter\n-5: structure mismatch"]
749    pub unsafe fn VBVMR_GetParameterStringA(
750        &self,
751        szParamName: *mut ::std::os::raw::c_char,
752        szString: *mut ::std::os::raw::c_char,
753    ) -> ::std::os::raw::c_long {
754        (self.VBVMR_GetParameterStringA)(szParamName, szString)
755    }
756    pub unsafe fn VBVMR_GetParameterStringW(
757        &self,
758        szParamName: *mut ::std::os::raw::c_char,
759        wszString: *mut ::std::os::raw::c_ushort,
760    ) -> ::std::os::raw::c_long {
761        (self.VBVMR_GetParameterStringW)(szParamName, wszString)
762    }
763    #[doc = "@brief Get Current levels.\n(this function must be called from one thread only)\n\n@param nType:\t0= pre fader input levels.\n1= post fader input levels.\n2= post Mute input levels.\n3= output levels.\n\n@param nuChannel: audio channel zero based index\nfor input 0 = in#1 left, 1= in#1 Right, etc...\nfor output 0 = busA ch1, 1 = busA ch2...\n\nVOICEMEETER CHANNEL ASSIGNMENT\n\n| Strip 1 | Strip 2 |             Virtual Input             |\n+----+----+----+----+----+----+----+----+----+----+----+----+\n| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |\n\n|             Output A1 / A2            |             Virtual Output            |\n+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+\n| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 |\n\nVOICEMEETER BANANA CHANNEL ASSIGNMENT\n\n| Strip 1 | Strip 2 | Strip 3 |             Virtual Input             |            Virtual Input AUX          |\n+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+\n| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |\n\n|             Output A1                 |                Output A2              |                Output A3              |\n+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+\n| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |\n\n|            Virtual Output B1          |             Virtual Output B2         |\n+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+\n| 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |\n\nVOICEMEETER POTATO CHANNEL ASSIGNMENT\n\n| Strip 1 | Strip 2 | Strip 3 | Strip 4 | Strip 5 |             Virtual Input             |            Virtual Input AUX          |                 VAIO3                 |\n+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+\n| 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 |\n\n|             Output A1                 |                Output A2              |                Output A3              |                Output A4              |                Output A5              |\n+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+\n| 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 |\n\n|            Virtual Output B1          |             Virtual Output B2         |             Virtual Output B3         |\n+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+\n| 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |\n\n\n@return :\t 0: OK (no error).\n-1: error\n-2: no server.\n-3: no level available\n-4: out of range"]
764    pub unsafe fn VBVMR_GetLevel(
765        &self,
766        nType: ::std::os::raw::c_long,
767        nuChannel: ::std::os::raw::c_long,
768        pValue: *mut f32,
769    ) -> ::std::os::raw::c_long {
770        (self.VBVMR_GetLevel)(nType, nuChannel, pValue)
771    }
772    #[doc = "@brief Get MIDI message from M.I.D.I. input device used by Voicemeeter M.I.D.I. mapping.\n(this function must be called from one thread only)\n\n@param pMIDIBuffer:\tpointer on MIDI Buffer. Expected message size is below 4 bytes,\nbut it's recommended to use 1024 Bytes local buffer to receive\npossible multiple M.I.D.I. event message in optimal way:\nunsigned char pBuffer[1024];\n\n\n@return :\t>0: number of bytes placed in buffer (2 or 3 byte for usual M.I.D.I. message)\n-1: error\n-2: no server.\n-5: no MIDI data\n-6: no MIDI data"]
773    pub unsafe fn VBVMR_GetMidiMessage(
774        &self,
775        pMIDIBuffer: *mut ::std::os::raw::c_uchar,
776        nbByteMax: ::std::os::raw::c_long,
777    ) -> ::std::os::raw::c_long {
778        (self.VBVMR_GetMidiMessage)(pMIDIBuffer, nbByteMax)
779    }
780    #[doc = "@brief Set a single float 32 bits parameters .\n@param szParamName : Null Terminal ASCII String giving the name of the parameter (see parameters name table)\nexample:\nStrip[1].gain\nStrip[0].mute\nBus[0].gain\nBus[0].eq.channel[0].cell[0].gain\n\n@param pValue : float 32bit containing the new value.\n@return :\t 0: OK (no error).\n-1: error\n-2: no server.\n-3: unknown parameter"]
781    pub unsafe fn VBVMR_SetParameterFloat(
782        &self,
783        szParamName: *mut ::std::os::raw::c_char,
784        Value: f32,
785    ) -> ::std::os::raw::c_long {
786        (self.VBVMR_SetParameterFloat)(szParamName, Value)
787    }
788    #[doc = "@brief Set a single string parameters .\n@param szParamName : Null Terminal ASCII String giving the name of the parameter (see parameters name table)\nexample:\nStrip[1].name\nStrip[0].device.mme\nBus[0].device.asio\n\n@param szString : zero terminal string.\n@return :\t 0: OK (no error).\n-1: error\n-2: no server.\n-3: unknown parameter\n"]
789    pub unsafe fn VBVMR_SetParameterStringA(
790        &self,
791        szParamName: *mut ::std::os::raw::c_char,
792        szString: *mut ::std::os::raw::c_char,
793    ) -> ::std::os::raw::c_long {
794        (self.VBVMR_SetParameterStringA)(szParamName, szString)
795    }
796    pub unsafe fn VBVMR_SetParameterStringW(
797        &self,
798        szParamName: *mut ::std::os::raw::c_char,
799        wszString: *mut ::std::os::raw::c_ushort,
800    ) -> ::std::os::raw::c_long {
801        (self.VBVMR_SetParameterStringW)(szParamName, wszString)
802    }
803    #[doc = "@brief Set one or several parameters by a script ( < 48 kB ).\n@param szParamName : Null Terminal ASCII String giving the script\n(script allows to change several parameters in the same time - SYNCHRO).\nPossible Instuction separators: ',' ';' or '\\n'(CR)\nEXAMPLE:\n\"Strip[0].gain = -6.0\nStrip[0].A1 = 0\nStrip[0].B1 = 1\nStrip[1].gain = -6.0\nStrip[2].gain = 0.0\nStrip[3].name = \"Skype Caller\" \"\n\n@return :\t 0: OK (no error).\n>0: number of line causing script error.\n-1: error\n-2: no server.\n-3: unexpected error\n-4: unexpected error"]
804    pub unsafe fn VBVMR_SetParameters(
805        &self,
806        szParamScript: *mut ::std::os::raw::c_char,
807    ) -> ::std::os::raw::c_long {
808        (self.VBVMR_SetParameters)(szParamScript)
809    }
810    pub unsafe fn VBVMR_SetParametersW(
811        &self,
812        szParamScript: *mut ::std::os::raw::c_ushort,
813    ) -> ::std::os::raw::c_long {
814        (self.VBVMR_SetParametersW)(szParamScript)
815    }
816    #[doc = "@brief Get number of Audio Output Device available on the system\n@return : return number of device found."]
817    pub unsafe fn VBVMR_Output_GetDeviceNumber(&self) -> ::std::os::raw::c_long {
818        (self.VBVMR_Output_GetDeviceNumber)()
819    }
820    #[doc = "@brief Return pointer on Output Device Descriptor according index\n@param zindex : zero based index\n@param nType : Pointer on 32bit long receiving the type (pointer can be NULL).\n@param szName : Pointer on string (256 char min) receiving the device name (pointer can be NULL).\n@param szHardwareId : Pointer on string (256 char min) receiving the hardware ID (pointer can be NULL).\n@return :\t 0: OK (no error)."]
821    pub unsafe fn VBVMR_Output_GetDeviceDescA(
822        &self,
823        zindex: ::std::os::raw::c_long,
824        nType: *mut ::std::os::raw::c_long,
825        szDeviceName: *mut ::std::os::raw::c_char,
826        szHardwareId: *mut ::std::os::raw::c_char,
827    ) -> ::std::os::raw::c_long {
828        (self.VBVMR_Output_GetDeviceDescA)(zindex, nType, szDeviceName, szHardwareId)
829    }
830    pub unsafe fn VBVMR_Output_GetDeviceDescW(
831        &self,
832        zindex: ::std::os::raw::c_long,
833        nType: *mut ::std::os::raw::c_long,
834        wszDeviceName: *mut ::std::os::raw::c_ushort,
835        wszHardwareId: *mut ::std::os::raw::c_ushort,
836    ) -> ::std::os::raw::c_long {
837        (self.VBVMR_Output_GetDeviceDescW)(zindex, nType, wszDeviceName, wszHardwareId)
838    }
839    #[doc = "@brief Get number of Audio Input Device available on the system\n@return : return number of device found."]
840    pub unsafe fn VBVMR_Input_GetDeviceNumber(&self) -> ::std::os::raw::c_long {
841        (self.VBVMR_Input_GetDeviceNumber)()
842    }
843    #[doc = "@brief Return pointer on Input Device Descriptor according index\n@param zindex : zero based index\n@param nType : Pointer on 32bit long receiving the type (pointer can be NULL).\n@param szName : Pointer on string (256 char min) receiving the device name (pointer can be NULL).\n@param szHardwareId : Pointer on string (256 char min) receiving the hardware ID (pointer can be NULL).\n@return :\t 0: OK (no error)."]
844    pub unsafe fn VBVMR_Input_GetDeviceDescA(
845        &self,
846        zindex: ::std::os::raw::c_long,
847        nType: *mut ::std::os::raw::c_long,
848        szDeviceName: *mut ::std::os::raw::c_char,
849        szHardwareId: *mut ::std::os::raw::c_char,
850    ) -> ::std::os::raw::c_long {
851        (self.VBVMR_Input_GetDeviceDescA)(zindex, nType, szDeviceName, szHardwareId)
852    }
853    pub unsafe fn VBVMR_Input_GetDeviceDescW(
854        &self,
855        zindex: ::std::os::raw::c_long,
856        nType: *mut ::std::os::raw::c_long,
857        wszDeviceName: *mut ::std::os::raw::c_ushort,
858        wszHardwareId: *mut ::std::os::raw::c_ushort,
859    ) -> ::std::os::raw::c_long {
860        (self.VBVMR_Input_GetDeviceDescW)(zindex, nType, wszDeviceName, wszHardwareId)
861    }
862    #[doc = "@brief register your audio callback function to receive real time audio buffer\nit's possible to register up to 3x different Audio Callback in the same application or in\n3x different applications. In the same application, this is possible because Voicemeeter\nprovides 3 kind of audio Streams:\n- AUDIO INPUT INSERT (to process all Voicemeeter inputs as insert)\n- AUDIO OUTPUT INSERT (to process all Voicemeeter BUS outputs as insert)\n- ALL AUDIO I/O (to process all Voicemeeter i/o).\nNote: a single callback can be used to receive the 3 possible audio streams.\n\n@param mode : callback type (main, input or bus output) see define below\n@param pCallback : Pointer on your callback function.\n@param lpUser : user pointer (pointer that will be passed in callback first argument).\n@param szClientName[64]: IN: Name of the application registering the Callback.\nOUT: Name of the application already registered.\n@return :\t 0: OK (no error).\n-1: error\n1: callback already registered (by another application)."]
863    pub unsafe fn VBVMR_AudioCallbackRegister(
864        &self,
865        mode: ::std::os::raw::c_long,
866        pCallback: T_VBVMR_VBAUDIOCALLBACK,
867        lpUser: *mut ::std::os::raw::c_void,
868        szClientName: *mut ::std::os::raw::c_char,
869    ) -> ::std::os::raw::c_long {
870        (self.VBVMR_AudioCallbackRegister)(mode, pCallback, lpUser, szClientName)
871    }
872    #[doc = "@brief\tStart / Stop Audio processing\n\nhe Callback will be called with\n@return :\t 0: OK (no error).\n-1: error\n-2: no callback registred."]
873    pub unsafe fn VBVMR_AudioCallbackStart(&self) -> ::std::os::raw::c_long {
874        (self.VBVMR_AudioCallbackStart)()
875    }
876    pub unsafe fn VBVMR_AudioCallbackStop(&self) -> ::std::os::raw::c_long {
877        (self.VBVMR_AudioCallbackStop)()
878    }
879    #[doc = "@brief unregister your callback to release voicemeeter virtual driver\n(this function will automatically call VBVMR_AudioCallbackStop() function)\n@param pCallback : Pointer on your callback function.\n@return :\t 0: OK (no error).\n-1: error\n1: callback already unregistered."]
880    pub unsafe fn VBVMR_AudioCallbackUnregister(&self) -> ::std::os::raw::c_long {
881        (self.VBVMR_AudioCallbackUnregister)()
882    }
883    #[doc = "@brief  Check if Macro Buttons states changed.\nCall this function periodically (typically every 50 or 500ms) to know if something happen on MacroButton states .\n(this function must be called from one thread only)\n\n@return:\t 0: no new status.\n>0: last nu logical button status changed.\n-1: error (unexpected)\n-2: no server."]
884    pub unsafe fn VBVMR_MacroButton_IsDirty(&self) -> ::std::os::raw::c_long {
885        (self.VBVMR_MacroButton_IsDirty)()
886    }
887    #[doc = "@brief get current status of a given button.\n@param nuLogicalButton : button index: 0 to 79)\n@param pValue : Pointer on float (32bit float by reference) receiving the wanted value (0.0 = OFF / 1.0 = ON).\n@param bitmode: define what kind of value you want to read (see MACROBUTTON_MODE below)\n@return :\t 0: OK (no error).\n-1: error\n-2: no server.\n-3: unknown parameter\n-5: structure mismatch"]
888    pub unsafe fn VBVMR_MacroButton_GetStatus(
889        &self,
890        nuLogicalButton: ::std::os::raw::c_long,
891        pValue: *mut f32,
892        bitmode: ::std::os::raw::c_long,
893    ) -> ::std::os::raw::c_long {
894        (self.VBVMR_MacroButton_GetStatus)(nuLogicalButton, pValue, bitmode)
895    }
896    #[doc = "@brief set current button value.\n@param nuLogicalButton : button index: 0 to 79)\n@param fValue : float 32 bit value giving the status (0.0 = OFF / 1.0 = ON).\n@param bitmode: define what kind of value you want to write/modify (see MACROBUTTON_MODE below)\n@return :\t 0: OK (no error).\n-1: error\n-2: no server.\n-3: unknown parameter\n-5: structure mismatch"]
897    pub unsafe fn VBVMR_MacroButton_SetStatus(
898        &self,
899        nuLogicalButton: ::std::os::raw::c_long,
900        fValue: f32,
901        bitmode: ::std::os::raw::c_long,
902    ) -> ::std::os::raw::c_long {
903        (self.VBVMR_MacroButton_SetStatus)(nuLogicalButton, fValue, bitmode)
904    }
905}