UNPKG

voicemeeter-connector

Version:
3 lines (2 loc) 6.18 kB
import e from"koffi";import t from"winreg";let r,i;class o{constructor(){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=()=>{if(!this.isInitialised)throw new Error("Await the initialisation before connect");if(!this.isConnected){if(0===r.VBVMR_Login())return this.isConnected=!0,this.type=this.getVoicemeeterType(),this.version=this.getVoicemeeterVersion(),void setInterval(this.checkPropertyChange,10);throw this.isConnected=!1,new Error("Connection failed")}},this.disconnect=()=>{if(!this.isConnected)throw new Error("Not connected ");try{if(0===r.VBVMR_Logout())return void(this.isConnected=!1);throw new Error("Disconnect failed")}catch(e){throw new Error("Disconnect failed")}},this.updateDeviceList=()=>{if(!this.isConnected)throw new Error("Not connected ");this.outputDevices=[],this.inputDevices=[];const e=r.VBVMR_Output_GetDeviceNumber();for(let t=0;t<e;t++){const e=Buffer.alloc(256),i=Buffer.alloc(256),o=[0];r.VBVMR_Output_GetDeviceDescA(t,o,i,e),this.outputDevices.push({name:i.toString().replace(/\u0000+$/g,""),hardwareId:e.toString().replace(/\u0000+$/g,""),type:o[0]})}const t=r.VBVMR_Input_GetDeviceNumber();for(let e=0;e<t;e++){const t=Buffer.alloc(256),i=Buffer.alloc(256),o=[0];r.VBVMR_Input_GetDeviceDescA(e,o,i,t),this.inputDevices.push({name:i.toString().replace(/\u0000+$/g,""),hardwareId:t.toString().replace(/\u0000+$/g,""),type:o[0]})}},this.isParametersDirty=()=>r.VBVMR_IsParametersDirty(),this.getBusParameter=(e,t)=>this.getParameter("Bus",e,t),this.getStripParameter=(e,t)=>this.getParameter("Strip",e,t),this.setStripParameter=(e,t,r)=>this.setParameter("Strip",e,t,r),this.setBusParameter=(e,t,r)=>this.setParameter("Bus",e,t,r),this.attachChangeEvent=e=>{this.eventPool.push(e)},this.getOption=e=>{if(!this.isConnected)throw new Error("Not correct connected ");if(this.stringParameters.some(t=>e.includes(t))){const t=Buffer.alloc(512);return r.VBVMR_GetParameterStringA(e,t),String.fromCharCode.apply(null,t).split("").filter(e=>"\0"!==e).join("")}const t=[0];return r.VBVMR_GetParameterFloat(e,t),t[0]},this.setOption=e=>{const t=Buffer.alloc(e.length+1);return t.fill(0).write(e),r.VBVMR_SetParameters(t),new Promise(e=>setTimeout(e,200))},this.checkPropertyChange=()=>{1===this.isParametersDirty()&&this.eventPool.forEach(e=>{e()})},this.getVoicemeeterType=()=>{const e=[0];if(0!==r.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=()=>{const e=[0];if(0!==r.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=(e,t,r)=>this.getOption(`${e}[${t}].${r}`),this.setParameter=(e,t,r,i)=>{if(!this.isConnected)throw new Error("Not connected ");return this.setOption(`${e}[${t}].${r}=${i};`)},this.getLevel=(e,t)=>{const i=[0];return r.VBVMR_GetLevel(e,t,i),i[0]}}static async init(){const n=await(async()=>{const e=new t({hive:t.HKLM,key:"\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\VB:Voicemeeter {17359A74-1236-5467}"});return new Promise(t=>{e.values((e,r)=>{if(e)throw new Error(e);const i=r.find(e=>"UninstallString"===e.name).value,o=i.lastIndexOf("\\");t(i.slice(0,o))})})})();return new Promise(t=>{i||(i=new o);const s=e.load(`${n}/VoicemeeterRemote64.dll`);r={VBVMR_Login:s.func("long __stdcall VBVMR_Login(void)"),VBVMR_Logout:s.func("long __stdcall VBVMR_Logout(void)"),VBVMR_RunVoicemeeter:s.func("long __stdcall VBVMR_RunVoicemeeter(long mode)"),VBVMR_IsParametersDirty:s.func("long __stdcall VBVMR_IsParametersDirty(void)"),VBVMR_GetLevel:s.func("long __stdcall VBVMR_GetLevel(long type, long channel, _Out_ float* value)"),VBVMR_GetParameterFloat:s.func("long __stdcall VBVMR_GetParameterFloat(const char* param, _Out_ float* value)"),VBVMR_GetParameterStringA:s.func("long __stdcall VBVMR_GetParameterStringA(const char* param, _Out_ char* value)"),VBVMR_SetParameters:s.func("long __stdcall VBVMR_SetParameters(const char* param)"),VBVMR_Output_GetDeviceNumber:s.func("long __stdcall VBVMR_Output_GetDeviceNumber(void)"),VBVMR_Output_GetDeviceDescA:s.func("long __stdcall VBVMR_Output_GetDeviceDescA(long index, _Out_ long* type, _Out_ char* name, _Out_ char* hardwareId)"),VBVMR_Input_GetDeviceNumber:s.func("long __stdcall VBVMR_Input_GetDeviceNumber(void)"),VBVMR_Input_GetDeviceDescA:s.func("long __stdcall VBVMR_Input_GetDeviceDescA(long index, long* type, char* name, char* hardwareId)"),VBVMR_GetVoicemeeterType:s.func("long __stdcall VBVMR_GetVoicemeeterType(_Out_ long* type)"),VBVMR_GetVoicemeeterVersion:s.func("long __stdcall VBVMR_GetVoicemeeterVersion(_Out_ long* version)")},i.isInitialised=!0,t(i)})}get $outputDevices(){return this.outputDevices}get $inputDevices(){return this.inputDevices}get $version(){return this.version}get $type(){return this.type}}var n,s;!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"}(n||(n={})),function(e){e.Mono="Mono",e.Mute="Mute",e.EQ="EQ.on",e.Gain="Gain",e.NormalMode="mode.normal",e.AmixMode="mode.Amix",e.BmixMode="mode.Bmix",e.RepeatMode="mode.Repeat",e.CompositeMode="mode.Composite",e.FadeTo="FadeTo",e.Label="Label"}(s||(s={}));var a={__proto__:null,InterfaceTypes:{strip:0,bus:1},get StripProperties(){return n},get BusProperties(){return s}},c={__proto__:null};const{BusProperties:l,InterfaceTypes:u,StripProperties:_}=a;export{l as BusProperties,u as InterfaceTypes,_ as StripProperties,o as Voicemeeter,c as types}; //# sourceMappingURL=index.modern.js.map