/// <reference types="node" />
import ref from 'ref-napi';
import { IoChannels, StripParamName, BusParamName, DeviceInfo, VoiceMeeterInfo } from './voiceMeeterUtils';
interface VoiceMeeterLibrary {
    VBVMR_Login(): string | number;
    VBVMR_Logout(): string | number;
    VBVMR_RunVoicemeeter(voiceMeeterType: number): string | number;
    VBVMR_GetVoicemeeterType(typePtr: ref.Pointer<string | number>): string | number;
    VBVMR_GetVoicemeeterVersion(typePtr: ref.Pointer<string | number>): string | number;
    VBVMR_IsParametersDirty(): string | number;
    VBVMR_GetParameterFloat(hardwareIdPtr: Buffer, namePtr: ref.Pointer<number>): string | number;
    VBVMR_GetParameterStringA(hardwareIdPtr: Buffer, namePtr: Buffer): string | number;
    VBVMR_SetParameters(script: Buffer): string | number;
    VBVMR_Output_GetDeviceNumber(): string | number;
    VBVMR_Output_GetDeviceDescA(deviceId: string | number, typePtr: ref.Pointer<string | number>, namePtr: Buffer, hardwareIdPtr: Buffer): string | number;
    VBVMR_Input_GetDeviceNumber(): string | number;
    VBVMR_Input_GetDeviceDescA(deviceId: string | number, typePtr: ref.Pointer<string | number>, namePtr: Buffer, hardwareIdPtr: Buffer): string | number;
    VBVMR_GetLevel(type: string | number, channel: string | number, value: ref.Pointer<number>): string | number;
    VBVMR_GetMidiMessage(buffer: Buffer, size: string | number): string | number;
    VBVMR_MacroButton_IsDirty(): string | number;
    VBVMR_MacroButton_GetStatus(nuLogicalButton: number, pValue: ref.Pointer<number>, bitmode: number): string | number;
    VBVMR_MacroButton_SetStatus(nuLogicalButton: number, fValue: number, bitmode: number): string | number;
}
export declare enum VoiceMeeterType {
    unknown = 0,
    voiceMeeter = 1,
    voiceMeeterBanana = 2,
    voiceMeeterPotato = 3
}
export declare enum InterfaceType {
    strip = "strip",
    bus = "bus"
}
export interface InParam {
    type: InterfaceType;
    id: number;
    getVals: StripParamName[] | BusParamName[];
}
export declare type OutParam = {
    [index in StripParamName | BusParamName]?: any;
} & {
    type: InterfaceType;
    id: number;
};
export interface OutParamData {
    strips: OutParam[];
    buses: OutParam[];
}
export declare class VoiceMeeter {
    isConnected: boolean;
    isInitialized: boolean;
    isLoggedIn: boolean;
    outputDevices: DeviceInfo[];
    inputDevices: DeviceInfo[];
    private channels;
    private type;
    private version;
    private voiceMeeterConfig;
    private _libVoiceMeeter;
    get libVoiceMeeter(): VoiceMeeterLibrary;
    set libVoiceMeeter(value: VoiceMeeterLibrary);
    init(): Promise<void>;
    runVoiceMeeter(voiceMeeterType: VoiceMeeterType): void;
    isParametersDirty(): boolean;
    static getStringParameter(voiceMeeter: VoiceMeeter, parameterName: string): string;
    static getParameter(voiceMeeter: VoiceMeeter, parameterName: string): number;
    private _getVoiceMeeterType;
    private _getVoiceMeeterVersion;
    login(): void;
    /** Test if we have an active connection to a running instance of VoiceMeeter */
    testConnection(): boolean;
    logout(): void;
    updateDeviceList(): void;
    sendRawParameterScript(scriptString: string): string | number;
    private _setParameter;
    setStripParameter(name: StripParamName, id: number, value: boolean | number | string): string | number;
    setBusParameter(name: BusParamName, id: number, value: boolean | number | string): string | number;
    getLevel(type: number, channel: number | undefined): number;
    getMidi(): number[][];
    getLevelByID(m: number, index: number): IoChannels | undefined;
    private _getGetParamType;
    getAllParameters(): Promise<OutParamData>;
    getMultiParameter(param: InParam[]): Promise<OutParamData>;
    getVoiceMeeterInfo(): VoiceMeeterInfo;
    isMacroButtonDirty(): string | number;
    getMacroButtonStatus(index: number): number;
    /**
     *
     * @param index The logical ID of the macro button
     * @param value Button state 0 or 1
     * @returns 0 = success
     */
    setMacroButtonStatus(index: number, value: number): number;
    toggleMacroButtonStatus(index: number): number;
}
export { VoiceMeeterConnectionError, VoiceMeeterDirtyError, VoiceMeeterError, VoiceMeeterGetParametersError, VoiceMeeterGetVersionError, VoiceMeeterInitializationError, VoiceMeeterLevelError, VoiceMeeterLoginError, VoiceMeeterMacroButtonError, VoiceMeeterMidiError, VoiceMeeterRunError } from './errors';
export { VoiceMeeterInfo, StripParamName, BusParamName, VoiceMeeterGroup, IoChannels, VoiceMeeterIO, VoiceMeeterGroupTypes } from './voiceMeeterUtils';
