voicemeeter-connector
Version:
A Connector to use the Voicemeeter API
3 lines (2 loc) • 6.72 kB
JavaScript
var e=require("koffi"),t=require("winreg");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n,o,i,a,c,u=/*#__PURE__*/r(e),s=/*#__PURE__*/r(t),l=/*#__PURE__*/function(){function e(){var e=this;this.isInitialised=!1,this.isConnected=!1,this.outputDevices=[],this.inputDevices=[],this.version="",this.type=void 0,this.eventPool=[],this.stringParameters=["Label","FadeTo","FadeBy","AppGain","AppMute","name","ip"],this.connect=function(){if(!e.isInitialised)throw new Error("Await the initialisation before connect");if(!e.isConnected){if(0===n.VBVMR_Login())return e.isConnected=!0,e.type=e.getVoicemeeterType(),e.version=e.getVoicemeeterVersion(),void setInterval(e.checkPropertyChange,10);throw e.isConnected=!1,new Error("Connection failed")}},this.disconnect=function(){if(!e.isConnected)throw new Error("Not connected ");try{if(0===n.VBVMR_Logout())return void(e.isConnected=!1);throw new Error("Disconnect failed")}catch(e){throw new Error("Disconnect failed")}},this.updateDeviceList=function(){if(!e.isConnected)throw new Error("Not connected ");e.outputDevices=[],e.inputDevices=[];for(var t=n.VBVMR_Output_GetDeviceNumber(),r=0;r<t;r++){var o=Buffer.alloc(256),i=Buffer.alloc(256),a=[0];n.VBVMR_Output_GetDeviceDescA(r,a,i,o),e.outputDevices.push({name:i.toString().replace(/\u0000+$/g,""),hardwareId:o.toString().replace(/\u0000+$/g,""),type:a[0]})}for(var c=n.VBVMR_Input_GetDeviceNumber(),u=0;u<c;u++){var s=Buffer.alloc(256),l=Buffer.alloc(256),_=[0];n.VBVMR_Input_GetDeviceDescA(u,_,l,s),e.inputDevices.push({name:l.toString().replace(/\u0000+$/g,""),hardwareId:s.toString().replace(/\u0000+$/g,""),type:_[0]})}},this.isParametersDirty=function(){return n.VBVMR_IsParametersDirty()},this.getBusParameter=function(t,r){return e.getParameter("Bus",t,r)},this.getStripParameter=function(t,r){return e.getParameter("Strip",t,r)},this.setStripParameter=function(t,r,n){return e.setParameter("Strip",t,r,n)},this.setBusParameter=function(t,r,n){return e.setParameter("Bus",t,r,n)},this.attachChangeEvent=function(t){e.eventPool.push(t)},this.getOption=function(t){if(!e.isConnected)throw new Error("Not correct connected ");if(e.stringParameters.some(function(e){return t.includes(e)})){var r=Buffer.alloc(512);return n.VBVMR_GetParameterStringA(t,r),String.fromCharCode.apply(null,r).split("").filter(function(e){return"\0"!==e}).join("")}var o=[0];return n.VBVMR_GetParameterFloat(t,o),o[0]},this.setOption=function(e){var t=Buffer.alloc(e.length+1);return t.fill(0).write(e),n.VBVMR_SetParameters(t),new Promise(function(e){return setTimeout(e,200)})},this.checkPropertyChange=function(){1===e.isParametersDirty()&&e.eventPool.forEach(function(e){e()})},this.getVoicemeeterType=function(){var e=[0];if(0!==n.VBVMR_GetVoicemeeterType(e))throw new Error("running failed");switch(e[0]){case 1:return"voicemeeter";case 2:return"voicemeeterBanana";case 3:return"voicemeeterPotato";default:throw new Error("Voicemeeter seems not to be installed")}},this.getVoicemeeterVersion=function(){var e=[0];if(0!==n.VBVMR_GetVoicemeeterVersion(e))throw new Error("running failed");return((4278190080&e[0])>>24)+"."+((16711680&e[0])>>16)+"."+((65280&e[0])>>8)+"."+(255&e[0])},this.getParameter=function(t,r,n){return e.getOption(t+"["+r+"]."+n)},this.setParameter=function(t,r,n,o){if(!e.isConnected)throw new Error("Not connected ");return e.setOption(t+"["+r+"]."+n+"="+o+";")},this.getLevel=function(e,t){var r=[0];return n.VBVMR_GetLevel(e,t,r),r[0]}}var t;return e.init=function(){try{return Promise.resolve(function(){try{var e=new s.default({hive:s.default.HKLM,key:"\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\VB:Voicemeeter {17359A74-1236-5467}"});return Promise.resolve(new Promise(function(t){e.values(function(e,r){if(e)throw new Error(e);var n=r.find(function(e){return"UninstallString"===e.name}).value,o=n.lastIndexOf("\\");t(n.slice(0,o))})}))}catch(e){return Promise.reject(e)}}()).then(function(t){return new Promise(function(r){o||(o=new e);var i=u.default.load(t+"/VoicemeeterRemote64.dll");n={VBVMR_Login:i.func("long __stdcall VBVMR_Login(void)"),VBVMR_Logout:i.func("long __stdcall VBVMR_Logout(void)"),VBVMR_RunVoicemeeter:i.func("long __stdcall VBVMR_RunVoicemeeter(long mode)"),VBVMR_IsParametersDirty:i.func("long __stdcall VBVMR_IsParametersDirty(void)"),VBVMR_GetLevel:i.func("long __stdcall VBVMR_GetLevel(long type, long channel, _Out_ float* value)"),VBVMR_GetParameterFloat:i.func("long __stdcall VBVMR_GetParameterFloat(const char* param, _Out_ float* value)"),VBVMR_GetParameterStringA:i.func("long __stdcall VBVMR_GetParameterStringA(const char* param, _Out_ char* value)"),VBVMR_SetParameters:i.func("long __stdcall VBVMR_SetParameters(const char* param)"),VBVMR_Output_GetDeviceNumber:i.func("long __stdcall VBVMR_Output_GetDeviceNumber(void)"),VBVMR_Output_GetDeviceDescA:i.func("long __stdcall VBVMR_Output_GetDeviceDescA(long index, _Out_ long* type, _Out_ char* name, _Out_ char* hardwareId)"),VBVMR_Input_GetDeviceNumber:i.func("long __stdcall VBVMR_Input_GetDeviceNumber(void)"),VBVMR_Input_GetDeviceDescA:i.func("long __stdcall VBVMR_Input_GetDeviceDescA(long index, long* type, char* name, char* hardwareId)"),VBVMR_GetVoicemeeterType:i.func("long __stdcall VBVMR_GetVoicemeeterType(_Out_ long* type)"),VBVMR_GetVoicemeeterVersion:i.func("long __stdcall VBVMR_GetVoicemeeterVersion(_Out_ long* version)")},o.isInitialised=!0,r(o)})})}catch(e){return Promise.reject(e)}},(t=[{key:"$outputDevices",get:function(){return this.outputDevices}},{key:"$inputDevices",get:function(){return this.inputDevices}},{key:"$version",get:function(){return this.version}},{key:"$type",get:function(){return this.type}}])&&function(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}(e.prototype,t),e}();!function(e){e.Mono="Mono",e.Mute="Mute",e.Solo="Solo",e.MC="MC",e.Gain="Gain",e.Pan_x="Pan_x",e.Pan_y="Pan_y",e.Color_x="Color_x",e.Color_y="Color_y",e.fx_x="fx_x",e.fx_y="fx_y",e.Audibility="Audibility",e.Comp="Comp",e.Gate="Gate",e.EqGain1="EqGain1",e.EqGain2="EqGain2",e.EqGain3="EqGain3",e.Label="Label",e.A1="A1",e.A2="A2",e.A3="A3",e.A4="A4",e.A5="A5",e.B1="B1",e.B2="B2",e.B3="B3",e.FadeTo="FadeTo"}(i||(i={})),(c=a||(a={})).Mono="Mono",c.Mute="Mute",c.EQ="EQ.on",c.Gain="Gain",c.NormalMode="mode.normal",c.AmixMode="mode.Amix",c.BmixMode="mode.Bmix",c.RepeatMode="mode.Repeat",c.CompositeMode="mode.Composite",c.FadeTo="FadeTo",c.Label="Label";var _=i;exports.BusProperties=a,exports.InterfaceTypes={strip:0,bus:1},exports.StripProperties=_,exports.Voicemeeter=l,exports.types={__proto__:null};
//# sourceMappingURL=index.js.map