A modern Node.js (TypeScript) connector for the official VoicemeeterRemoteAPI, supporting Voicemeeter, Voicemeeter Banana, and Voicemeeter Potato. Control and automate your Voicemeeter audio mixer from JavaScript or TypeScript with ease.
Voicemeeter Connector provides a simple, type-safe, and high-level API to interact with Voicemeeter's powerful audio routing and mixing features. It enables you to automate audio controls, monitor levels, and integrate Voicemeeter into your Node.js applications or scripts.
This connector supports all major editions of Voicemeeter:
npm install voicemeeter-connectorRequirements:
- Node.js >= 18
- Windows with Voicemeeter installed (API uses native DLL)
import { Voicemeeter, StripProperties } from "voicemeeter-connector";
const vm = await Voicemeeter.init();
vm.connect();
await vm.setStripParameter(0, StripProperties.Gain, -10);
console.log(vm.getStripParameter(0, StripProperties.Gain));
vm.disconnect();- TypeScript:
examples/typescript/example.ts - ESM JavaScript:
examples/javascript-module/example.js - CommonJS JavaScript:
examples/javascript-commonjs/example.js
Each example demonstrates connecting, setting parameters, reading values, and disconnecting.
Initializes the Voicemeeter API and returns a Voicemeeter instance.
import { Voicemeeter } from "voicemeeter-connector";
const vm = await Voicemeeter.init();Establishes a connection to the Voicemeeter client.
vm.connect();Set or get a parameter (e.g., gain, mute) for a specific strip (input channel).
import { StripProperties } from "voicemeeter-connector";
await vm.setStripParameter(0, StripProperties.Gain, -10);
const gain = vm.getStripParameter(0, StripProperties.Gain);StripProperties enum values:
MonoMuteSoloMCGainPan_xPan_yColor_xColor_yfx_xfx_yAudibilityCompGateEqGain1EqGain2EqGain3LabelA1A2A3A4A5B1B2B3FadeTo
Set or get a parameter (e.g., gain, mute) for a specific bus (output channel).
import { BusProperties } from "voicemeeter-connector";
await vm.setBusParameter(0, BusProperties.Gain, -5);
const busGain = vm.getBusParameter(0, BusProperties.Gain);BusProperties enum values:
MonoMuteEQGainNormalModeAmixModeBmixModeRepeatModeCompositeModeFadeToLabel
Set or get global Voicemeeter options (e.g., enable/disable VBAN).
await vm.setOption("vban.Enable=0;");
const vbanEnabled = vm.getOption("vban.Enable");Get the current audio level for a given type and channel (e.g., input/output levels).
const leftLevel = vm.getLevel(0, 0); // type 0: pre-fader input, channel 0: left
const rightLevel = vm.getLevel(0, 1); // type 0: pre-fader input, channel 1: rightgetLevel type values:
0: pre-fader input levels1: post-fader input levels2: post-mute input levels3: output levels
Get or set the status of a macro button (for automation and scripting in Voicemeeter).
import { MacroButtonModes } from "voicemeeter-connector";
vm.setMacroButtonStatus(0, 1, MacroButtonModes.DEFAULT);
const status = vm.getMacroButtonStatus(0, MacroButtonModes.DEFAULT);MacroButtonModes enum values:
DEFAULT(0x00000000): Default modeSTATEONLY(0x00000002): State onlyTRIGGER(0x00000003): TriggerCOLOR(0x00000004): Color
Attach a callback to be notified when any Voicemeeter parameter changes.
vm.attachChangeEvent(() => {
console.log("Voicemeeter state changed!");
});Get the list of available input and output devices, Voicemeeter version, and type.
const inputs = vm.$inputDevices;
const outputs = vm.$outputDevices;
const version = vm.$version;
const type = vm.$type;Check if parameters or macro buttons have unsaved changes.
const paramsDirty = vm.isParametersDirty();
const macroDirty = vm.isMacroButtonDirty();Refresh the list of available input and output devices.
vm.updateDeviceList();Gracefully disconnects from the Voicemeeter client.
vm.disconnect();Contributions are welcome! Please open issues or pull requests for bug fixes, features, or documentation improvements.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a pull request
This project is licensed under the MIT License. See the LICENSE file for details.