ts-easy-voicemeeter-remote
Version:
A easy Node.js voicemeeter remote
568 lines • 29.7 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.VoiceMeeterGroupTypes = exports.VoiceMeeterRunError = exports.VoiceMeeterMidiError = exports.VoiceMeeterMacroButtonError = exports.VoiceMeeterLoginError = exports.VoiceMeeterLevelError = exports.VoiceMeeterInitializationError = exports.VoiceMeeterGetVersionError = exports.VoiceMeeterGetParametersError = exports.VoiceMeeterError = exports.VoiceMeeterDirtyError = exports.VoiceMeeterConnectionError = exports.VoiceMeeter = exports.InterfaceType = exports.VoiceMeeterType = void 0;
var ffi_napi_1 = __importDefault(require("ffi-napi"));
var winreg_1 = __importDefault(require("winreg"));
var ref_napi_1 = __importDefault(require("ref-napi"));
var ref_array_napi_1 = __importDefault(require("ref-array-napi"));
var vmChannels_1 = __importDefault(require("./vmChannels"));
var ioFuncs_1 = __importDefault(require("./ioFuncs"));
var voiceMeeterConfig_1 = __importDefault(require("./voiceMeeterConfig"));
var voiceMeeterUtils_1 = require("./voiceMeeterUtils");
var errors_1 = require("./errors");
// TODO: Can this be replaced?
var CharArray = ref_array_napi_1.default(ref_napi_1.default.types.char);
function getDLLPath() {
return __awaiter(this, void 0, void 0, function () {
var regKey;
return __generator(this, function (_a) {
regKey = new winreg_1.default({
hive: winreg_1.default.HKLM,
key: '\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\VB:Voicemeeter {17359A74-1236-5467}',
});
return [2 /*return*/, new Promise(function (resolve) {
regKey.values(function (err, items) {
var _a;
var uninstallerPath = (_a = items.find(function (i) { return i.name === 'UninstallString'; })) === null || _a === void 0 ? void 0 : _a.value;
if (!uninstallerPath) {
throw new errors_1.VoiceMeeterError('Could not find VoiceMeeter installation path');
}
var fileNameIndex = uninstallerPath.lastIndexOf('\\');
resolve(uninstallerPath.slice(0, fileNameIndex));
});
})];
});
});
}
var VoiceMeeterType;
(function (VoiceMeeterType) {
VoiceMeeterType[VoiceMeeterType["unknown"] = 0] = "unknown";
VoiceMeeterType[VoiceMeeterType["voiceMeeter"] = 1] = "voiceMeeter";
VoiceMeeterType[VoiceMeeterType["voiceMeeterBanana"] = 2] = "voiceMeeterBanana";
VoiceMeeterType[VoiceMeeterType["voiceMeeterPotato"] = 3] = "voiceMeeterPotato";
})(VoiceMeeterType = exports.VoiceMeeterType || (exports.VoiceMeeterType = {}));
;
var InterfaceType;
(function (InterfaceType) {
InterfaceType["strip"] = "strip";
InterfaceType["bus"] = "bus";
})(InterfaceType = exports.InterfaceType || (exports.InterfaceType = {}));
;
var VoiceMeeter = /** @class */ (function () {
function VoiceMeeter() {
this.isConnected = false;
this.isInitialized = false;
this.isLoggedIn = false;
this.outputDevices = [];
this.inputDevices = [];
this.channels = vmChannels_1.default;
this.type = VoiceMeeterType.unknown;
this.version = '';
this.voiceMeeterConfig = voiceMeeterConfig_1.default[VoiceMeeterType.unknown];
}
Object.defineProperty(VoiceMeeter.prototype, "libVoiceMeeter", {
get: function () {
if (!this.isInitialized || !this._libVoiceMeeter) {
throw new errors_1.VoiceMeeterInitializationError();
}
return this._libVoiceMeeter;
},
set: function (value) {
this._libVoiceMeeter = value;
},
enumerable: false,
configurable: true
});
VoiceMeeter.prototype.init = function () {
return __awaiter(this, void 0, void 0, function () {
var _a, _b, _c, _d, _e;
return __generator(this, function (_f) {
switch (_f.label) {
case 0:
_b = (_a = console).debug;
return [4 /*yield*/, getDLLPath()];
case 1:
_b.apply(_a, [(_f.sent()) + '/VoicemeeterRemote64.dll']);
_c = this;
_e = (_d = ffi_napi_1.default).Library;
return [4 /*yield*/, getDLLPath()];
case 2:
_c.libVoiceMeeter = _e.apply(_d, [(_f.sent()) + '/VoicemeeterRemote64.dll', {
'VBVMR_Login': ['long', []],
'VBVMR_Logout': ['long', []],
'VBVMR_RunVoicemeeter': ['long', ['long']],
'VBVMR_GetVoicemeeterType': ['long', ['long *']],
'VBVMR_GetVoicemeeterVersion': ['long', ['long *']],
'VBVMR_IsParametersDirty': ['long', []],
'VBVMR_GetParameterFloat': ['long', [CharArray, 'float *']],
'VBVMR_GetParameterStringA': ['long', [CharArray, CharArray]],
'VBVMR_SetParameters': ['long', [CharArray]],
'VBVMR_Output_GetDeviceNumber': ['long', []],
'VBVMR_Output_GetDeviceDescA': ['long', ['long', 'long *', CharArray, CharArray]],
'VBVMR_Input_GetDeviceNumber': ['long', []],
'VBVMR_Input_GetDeviceDescA': ['long', ['long', 'long *', CharArray, CharArray]],
'VBVMR_GetLevel': ['long', ['long', 'long', 'float *']],
'VBVMR_GetMidiMessage': ['long', ['pointer', 'long']],
'VBVMR_MacroButton_IsDirty': ['long', []],
'VBVMR_MacroButton_GetStatus': ['long', ['long', 'float *', 'long']],
'VBVMR_MacroButton_SetStatus': ['long', ['long', 'float', 'long']],
}]);
this.isInitialized = true;
return [2 /*return*/];
}
});
});
};
VoiceMeeter.prototype.runVoiceMeeter = function (voiceMeeterType) {
var retVal = this.libVoiceMeeter.VBVMR_RunVoicemeeter(voiceMeeterType);
if (retVal === 0) {
return;
}
throw new errors_1.VoiceMeeterRunError(retVal);
};
// TODO: should only return a number
VoiceMeeter.prototype.isParametersDirty = function () {
var retVal = this.libVoiceMeeter.VBVMR_IsParametersDirty();
if (retVal < 0) {
throw new errors_1.VoiceMeeterDirtyError(retVal);
}
return Boolean(retVal);
};
VoiceMeeter.getStringParameter = function (voiceMeeter, parameterName) {
var hardwareIdPtr = Buffer.alloc(parameterName.length + 1);
hardwareIdPtr.write(parameterName);
var namePtr = Buffer.alloc(512);
var retVal = voiceMeeter.libVoiceMeeter.VBVMR_GetParameterStringA(hardwareIdPtr, namePtr);
if (retVal !== 0) {
throw new errors_1.VoiceMeeterGetParametersError(retVal, parameterName);
}
return namePtr.toString().replace(/\x00+$/g, '');
};
VoiceMeeter.getParameter = function (voiceMeeter, parameterName) {
var hardwareIdPtr = Buffer.alloc(parameterName.length + 1);
hardwareIdPtr.write(parameterName);
var namePtr = ref_napi_1.default.alloc(ref_napi_1.default.types.float).ref();
var retVal = voiceMeeter.libVoiceMeeter.VBVMR_GetParameterFloat(hardwareIdPtr, namePtr);
if (retVal !== 0) {
throw new errors_1.VoiceMeeterGetParametersError(retVal, parameterName);
}
// TODO: Find out, must we use readFloatLE?
// return namePtr[0];
return namePtr.readFloatLE();
};
VoiceMeeter.prototype._getVoiceMeeterType = function () {
var typePtr = ref_napi_1.default.alloc(ref_napi_1.default.types.long).ref();
var retVal = this.libVoiceMeeter.VBVMR_GetVoicemeeterType(typePtr);
if (retVal !== 0) {
throw new errors_1.VoiceMeeterGetVersionError(retVal);
}
switch (typePtr.readInt32LE()) {
case 1: // VoiceMeeter software
return VoiceMeeterType.voiceMeeter;
case 2: // VoiceMeeter Banana software
return VoiceMeeterType.voiceMeeterBanana;
case 3: // VoiceMeeter Potato software
return VoiceMeeterType.voiceMeeterPotato;
default: // unknown software
return VoiceMeeterType.unknown;
}
};
VoiceMeeter.prototype._getVoiceMeeterVersion = function () {
// Pointer on 32bit integer receiving the version (v1.v2.v3.v4)
// v1 = (version & 0xFF000000)>>24;
// v2 = (version & 0x00FF0000)>>16;
// v3 = (version & 0x0000FF00)>>8;
// v4 = version & 0x000000FF;
var versionPtr = ref_napi_1.default.alloc(ref_napi_1.default.types.long).ref();
var retVal = this.libVoiceMeeter.VBVMR_GetVoicemeeterVersion(versionPtr);
if (retVal !== 0) {
throw new errors_1.VoiceMeeterGetVersionError(retVal);
}
var fullVer = versionPtr.readInt32LE();
var v4 = fullVer % Math.pow(2, 8);
var v3 = (fullVer - v4) % Math.pow(2, 16) / Math.pow(2, 8);
var v2 = ((fullVer - v3 * 256 - v4) % Math.pow(2, 24)) / Math.pow(2, 16);
var v1 = (fullVer - v2 * 512 - v3 * 256 - v4) / Math.pow(2, 24);
return v1 + "." + v2 + "." + v3 + "." + v4;
};
VoiceMeeter.prototype.login = function () {
if (!this.isInitialized) {
throw new errors_1.VoiceMeeterInitializationError();
}
if (this.isConnected || this.isLoggedIn) {
return;
}
var retVal = this.libVoiceMeeter.VBVMR_Login();
// 0 = no error
// 1 = connected but no application;
if (retVal == 0) {
this.isConnected = true;
this.isLoggedIn = true;
this.type = this._getVoiceMeeterType();
this.version = this._getVoiceMeeterVersion();
this.voiceMeeterConfig = voiceMeeterConfig_1.default[this.type];
return;
}
if (retVal == 1) {
this.isLoggedIn = true;
}
this.isConnected = false;
throw new errors_1.VoiceMeeterLoginError(retVal);
};
// TODO: review this function and what it should do
/** Test if we have an active connection to a running instance of VoiceMeeter */
VoiceMeeter.prototype.testConnection = function () {
var comError = this.libVoiceMeeter.VBVMR_IsParametersDirty();
if (comError >= 0) {
this.isConnected = true;
this.type = this._getVoiceMeeterType();
this.version = this._getVoiceMeeterVersion();
this.voiceMeeterConfig = voiceMeeterConfig_1.default[this.type];
}
return comError >= 0;
};
VoiceMeeter.prototype.logout = function () {
if (!this.isLoggedIn) {
throw new errors_1.VoiceMeeterError('Not logged in');
}
if (!this.isConnected) {
throw new errors_1.VoiceMeeterConnectionError();
}
if (this.libVoiceMeeter.VBVMR_Logout() === 0) {
this.isConnected = false;
this.isLoggedIn = false;
return;
}
throw new errors_1.VoiceMeeterError('Logout failed unexpectedly');
};
VoiceMeeter.prototype.updateDeviceList = function () {
if (!this.isConnected) {
throw new errors_1.VoiceMeeterConnectionError();
}
this.outputDevices = [];
this.inputDevices = [];
var outputDeviceNumber = this.libVoiceMeeter.VBVMR_Output_GetDeviceNumber();
for (var i = 0; i < outputDeviceNumber; i++) {
var typePtr = ref_napi_1.default.alloc(ref_napi_1.default.types.long).ref();
var namePtr = Buffer.alloc(256);
var hardwareIdPtr = Buffer.alloc(256);
if (this.libVoiceMeeter.VBVMR_Output_GetDeviceDescA(i, typePtr, namePtr, hardwareIdPtr) !== 0) {
throw new errors_1.VoiceMeeterError('Error getting output device');
}
this.outputDevices.push({
name: namePtr.toString().replace(/\x00+$/g, ''),
hardwareId: hardwareIdPtr.toString().replace(/\x00+$/g, ''),
type: typePtr.readInt32LE(),
});
}
var inputDeviceNumber = this.libVoiceMeeter.VBVMR_Input_GetDeviceNumber();
for (var i = 0; i < inputDeviceNumber; i++) {
var typePtr = ref_napi_1.default.alloc(ref_napi_1.default.types.long).ref();
var namePtr = Buffer.alloc(256);
var hardwareIdPtr = Buffer.alloc(256);
if (this.libVoiceMeeter.VBVMR_Input_GetDeviceDescA(i, typePtr, namePtr, hardwareIdPtr) !== 0) {
throw new errors_1.VoiceMeeterError('Error getting output device');
}
this.inputDevices.push({
name: namePtr.toString().replace(/\x00+$/g, ''),
hardwareId: hardwareIdPtr.toString().replace(/\x00+$/g, ''),
type: typePtr.readInt32LE(),
});
}
};
VoiceMeeter.prototype.sendRawParameterScript = function (scriptString) {
var script = Buffer.alloc(scriptString.length + 1);
script.fill(0);
script.write(scriptString);
var retVal = this.libVoiceMeeter.VBVMR_SetParameters(script);
if (retVal !== 0) {
//
}
return retVal;
};
VoiceMeeter.prototype._setParameter = function (type, name, id, value) {
if (typeof (value) === 'boolean') {
value = value ? 1 : 0;
}
return this.sendRawParameterScript(type + "[" + id + "]." + name + "=" + value + ";");
};
VoiceMeeter.prototype.setStripParameter = function (name, id, value) {
if (this.voiceMeeterConfig.strips.findIndex(function (strip) { return strip.id === id; }) === -1) {
// TODO: replace with a better error
throw new errors_1.VoiceMeeterError(InterfaceType[InterfaceType.strip] + " " + id + " not found");
}
return this._setParameter(InterfaceType.strip, name, id, value);
};
VoiceMeeter.prototype.setBusParameter = function (name, id, value) {
if (this.voiceMeeterConfig.buses.findIndex(function (bus) { return bus.id === id; }) === -1) {
// TODO: replace with a better error
throw new errors_1.VoiceMeeterError(InterfaceType[InterfaceType.bus] + " " + id + " not found");
}
return this._setParameter(InterfaceType.bus, name, id, value);
};
VoiceMeeter.prototype.getLevel = function (type, channel) {
if (!channel) {
return 0;
}
var value = ref_napi_1.default.alloc(ref_napi_1.default.types.float).ref();
var retVal = this.libVoiceMeeter.VBVMR_GetLevel(type, channel, value);
if (retVal !== 0) {
throw new errors_1.VoiceMeeterLevelError(retVal);
}
return 20 * Math.log10(value.readFloatLE()) + 60;
};
VoiceMeeter.prototype.getMidi = function () {
var buffer = Buffer.alloc(1024);
var retVal = this.libVoiceMeeter.VBVMR_GetMidiMessage(buffer, 1024);
if (retVal < 0) {
throw new errors_1.VoiceMeeterMidiError(retVal);
}
var unorg = Uint8Array.from(buffer);
var org = [];
for (var i = 0; i < unorg.length; i += 3)
if (unorg[i])
org.push([unorg[i], unorg[i + 1], unorg[i + 2]]);
return org;
};
VoiceMeeter.prototype.getLevelByID = function (m, index) {
var mode = m || 0;
index = index || 0;
var out = {};
var vmType = this._getVoiceMeeterType();
var vmChannelsByType = this.channels[vmType];
if (!vmChannelsByType) {
// TODO: replace with a better error
throw new errors_1.VoiceMeeterError('Invalid VoiceMeeter type');
}
if (mode == 3) {
var outChannels = vmChannelsByType.outputs[index];
out.l = this.getLevel(mode, outChannels.l);
out.r = this.getLevel(mode, outChannels.r);
out.fc = this.getLevel(mode, outChannels.fc);
out.lfe = this.getLevel(mode, outChannels.lfe);
out.sl = this.getLevel(mode, outChannels.sl);
out.sr = this.getLevel(mode, outChannels.sr);
out.bl = this.getLevel(mode, outChannels.bl);
out.br = this.getLevel(mode, outChannels.br);
return out;
}
else if (mode == 0 || 1 || 2) {
var inChannels = vmChannelsByType.inputs[index];
var inputs = this.voiceMeeterConfig.strips;
if (inputs[index].isVirtual) {
out.l = this.getLevel(mode, inChannels.l);
out.r = this.getLevel(mode, inChannels.r);
out.fc = this.getLevel(mode, inChannels.fc);
out.lfe = this.getLevel(mode, inChannels.lfe);
out.sl = this.getLevel(mode, inChannels.sl);
out.sr = this.getLevel(mode, inChannels.sr);
out.bl = this.getLevel(mode, inChannels.bl);
out.br = this.getLevel(mode, inChannels.br);
}
else {
out.l = this.getLevel(mode, inChannels.l);
out.r = this.getLevel(mode, inChannels.r);
}
return out;
}
};
VoiceMeeter.prototype._getGetParamType = function (prop) {
var func = prop.type == 'float' ? VoiceMeeter.getParameter : VoiceMeeter.getStringParameter;
return func;
};
VoiceMeeter.prototype.getAllParameters = function () {
return __awaiter(this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve, rejects) {
var data = {
strips: [],
buses: [],
};
_this.voiceMeeterConfig.strips.forEach(function (element) {
var inP = {
type: InterfaceType[InterfaceType.strip],
id: element.id,
getVals: [],
};
var out = {
type: inP.type,
id: element.id,
name: element.name,
};
for (var funcName in ioFuncs_1.default.strip) {
var func = ioFuncs_1.default.strip[funcName];
var val = _this._getGetParamType(func)(_this, "Strip[" + element.id + "]." + func.val);
if (typeof (val) != "string" || val) {
out[func.out] = val;
}
}
data.strips.push(out);
});
_this.voiceMeeterConfig.buses.forEach(function (element) {
var inP = {
type: InterfaceType.bus,
id: element.id,
getVals: [],
};
var out = {
type: inP.type,
id: element.id,
name: element.name,
};
for (var funcName in ioFuncs_1.default.bus) {
var func = ioFuncs_1.default.bus[funcName];
var val = _this._getGetParamType(func)(_this, "Bus[" + element.id + "]." + func.val);
if (typeof (val) != "string" || val) {
out[func.out] = val;
}
}
data.buses.push(out);
});
resolve(data);
})];
});
});
};
VoiceMeeter.prototype.getMultiParameter = function (param) {
return __awaiter(this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve, rejects) {
var data = {
strips: [],
buses: [],
};
param.forEach(function (paramElement) {
var t = paramElement.type == InterfaceType.strip ? voiceMeeterUtils_1.VoiceMeeterGroupTypes.strips : voiceMeeterUtils_1.VoiceMeeterGroupTypes.buses;
var out = {
type: paramElement.type,
id: paramElement.id,
name: _this.voiceMeeterConfig[t][paramElement.id].name,
};
// always include getting name val
paramElement.getVals.push('name');
paramElement.getVals.forEach(function (element) {
try {
var func = ioFuncs_1.default[paramElement.type][element];
var val = _this._getGetParamType(func)(_this, paramElement.type + "[" + paramElement.id + "]." + func.val);
if (typeof (val) != "string" || val) {
out[func.out] = val;
}
}
catch (error) {
console.log(error);
}
});
if (paramElement.type == InterfaceType.strip) {
data.strips.push(out);
}
else if (paramElement.type == InterfaceType.bus) {
data.buses.push(out);
}
});
resolve(data);
})];
});
});
};
VoiceMeeter.prototype.getVoiceMeeterInfo = function () {
return { name: this.channels[this.type].name, type: this.type, version: this.version };
};
VoiceMeeter.prototype.isMacroButtonDirty = function () {
var retVal = this.libVoiceMeeter.VBVMR_MacroButton_IsDirty();
if (retVal < 0) {
throw new errors_1.VoiceMeeterDirtyError(retVal);
}
return retVal;
};
VoiceMeeter.prototype.getMacroButtonStatus = function (index) {
var pValue = ref_napi_1.default.alloc(ref_napi_1.default.types.float).ref();
// bitmode
// 0 = push or release
// 2 = change displayed state only
// 3 = change Trigger state
var retVal = this.libVoiceMeeter.VBVMR_MacroButton_GetStatus(index, pValue, 0);
if (retVal < 0) {
throw new errors_1.VoiceMeeterMacroButtonError(retVal);
}
return pValue.readFloatLE();
};
/**
*
* @param index The logical ID of the macro button
* @param value Button state 0 or 1
* @returns 0 = success
*/
VoiceMeeter.prototype.setMacroButtonStatus = function (index, value) {
var retVal = this.libVoiceMeeter.VBVMR_MacroButton_SetStatus(index, value, 0);
if (retVal !== 0) {
throw new errors_1.VoiceMeeterMacroButtonError(retVal);
}
return retVal;
};
VoiceMeeter.prototype.toggleMacroButtonStatus = function (index) {
if (this.getMacroButtonStatus(index) == 1) {
return this.setMacroButtonStatus(index, 0);
}
else {
return this.setMacroButtonStatus(index, 1);
}
};
return VoiceMeeter;
}());
exports.VoiceMeeter = VoiceMeeter;
var errors_2 = require("./errors");
Object.defineProperty(exports, "VoiceMeeterConnectionError", { enumerable: true, get: function () { return errors_2.VoiceMeeterConnectionError; } });
Object.defineProperty(exports, "VoiceMeeterDirtyError", { enumerable: true, get: function () { return errors_2.VoiceMeeterDirtyError; } });
Object.defineProperty(exports, "VoiceMeeterError", { enumerable: true, get: function () { return errors_2.VoiceMeeterError; } });
Object.defineProperty(exports, "VoiceMeeterGetParametersError", { enumerable: true, get: function () { return errors_2.VoiceMeeterGetParametersError; } });
Object.defineProperty(exports, "VoiceMeeterGetVersionError", { enumerable: true, get: function () { return errors_2.VoiceMeeterGetVersionError; } });
Object.defineProperty(exports, "VoiceMeeterInitializationError", { enumerable: true, get: function () { return errors_2.VoiceMeeterInitializationError; } });
Object.defineProperty(exports, "VoiceMeeterLevelError", { enumerable: true, get: function () { return errors_2.VoiceMeeterLevelError; } });
Object.defineProperty(exports, "VoiceMeeterLoginError", { enumerable: true, get: function () { return errors_2.VoiceMeeterLoginError; } });
Object.defineProperty(exports, "VoiceMeeterMacroButtonError", { enumerable: true, get: function () { return errors_2.VoiceMeeterMacroButtonError; } });
Object.defineProperty(exports, "VoiceMeeterMidiError", { enumerable: true, get: function () { return errors_2.VoiceMeeterMidiError; } });
Object.defineProperty(exports, "VoiceMeeterRunError", { enumerable: true, get: function () { return errors_2.VoiceMeeterRunError; } });
var voiceMeeterUtils_2 = require("./voiceMeeterUtils");
Object.defineProperty(exports, "VoiceMeeterGroupTypes", { enumerable: true, get: function () { return voiceMeeterUtils_2.VoiceMeeterGroupTypes; } });
//# sourceMappingURL=index.js.map