Added VMRemoteErrors. Other error classes now subclass VMRemoteErrors. rework Function Param_Set_Multi added throw LoginError object on multiple login attempts (still crashing the powershell window during testing if in same powershell fork) update readme to include vban_instream, vban_outstream example in set parameters by hash. macrobutton in hash can now use key button or mb.
4.6 KiB
Powershell Wrapper for Voicemeeter API
This wrapper was written in response to a request in the VB-AUDIO discord for a way to invoke commands using Powershell. It is designed to be simple to use but not every feature is added.
For past/future changes to this project refer to: CHANGELOG
Tested against
- Basic 1.0.8.1
- Banana 2.0.6.1
- Potato 3.0.2.1
You may have success with many commands in earlier versions but some commands (example Macrobuttons) were only added to the API in later releases.
Requirements
- Voicemeeter: https://voicemeeter.com/
- Powershell 5.1
Installation
PowerShellGet:
In Powershell as admin:
Install-Module Voicemeeter
In Powershell as current user:
Install-Module -Name Voicemeeter -Scope CurrentUser
You may be asked to install NuGet provider required by PowerShellGet if you don't have it already.
When prompted you will need to accept PSGallery as a trusted repository.
More Info:
Direct download:
git clone https://github.com/onyx-and-iris/voicemeeter-api-powershell.git
All examples in this readme assume you've installed as a module. If you decide to direct download see alternative instructions.
Use
When you instantiate Remote class you will automatically be logged in. Use a try finally block to ensure you logout at the end of your code.
Import-Module Voicemeeter
try {
# Run the factory function for required Voicemeeter type
$vmr = Get-RemoteBanana
# Set strip and bus params
$vmr.strip[0].mono = $true
$vmr.strip[0].mono '=> $true'
$vmr.bus[1].mute = $false
$vmr.bus[1].mute '=> $false'
# Set macrobutton with id 4, mode state to 1
$vmr.button[4].state = $true
$vmr.button[4].state '=> $true'
}
finally { $vmr.Logout() }
Voicemeeter factory function can be:
- Get-RemoteBasic
- Get-RemoteBanana
- Get-RemotePotato
There is no bounds checking in this wrapper, meaning if you attempt to set a parameter that does not exist for that version of Voicemeeter the wrapper will throw an error. So make sure what you are settings actually exists.
Multiple parameters
Set many strip/bus/macrobutton parameters at once, for Example
Import-Module Voicemeeter
try {
$vmr = Get-RemoteBanana
$hash = @{
strip_0 = @{mute = $true; mono = $true};
strip_2 = @{mute = $true; mono = $true};
bus_1 = @{mute = $true; mono = $true};
button_34 = @{state = $true};
button_12 = @{trigger = $false};
vban_instream_3 = @{name = 'streamname'};
vban_outstream_0 = @{on = $false};
}
$vmr.Set_Multi($hash)
}
finally { $vmr.Logout() }
Strip|Bus
The following strip/bus commands are available:
- mute
- mono
- solo
- A1-A5
- B1-B3
- limit
- gain
- comp
- gate
A,B commands depend on Voicemeeter type.
Macrobuttons
Three modes defined: state, stateonly and trigger.
- State runs associated scripts
- Stateonly does not run associated scripts
- Index range (0, 69)
$vmr.button[3].state = $true
$vmr.button[4].stateonly = $false
$vmr.button[5].trigger = $true
VBAN
- vmr.vban.enable: Toggle VBAN on or off. Accepts a boolean value.
For each vban in/out stream the following parameters are defined:
- on: boolean
- name: string
- ip: string
- port: int from 1024 - 65535
- sr: int (11025, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000)
- channel: int from 1 to 8
- bit: int 16 or 24
- quality: int from 0 to 4
- route: int from 0 to 8
SR, channel and bit are defined as readonly for instreams. Attempting to write to those parameters will throw an error. They are read and write for outstreams.
example:
$vmr.vban.enable = $true
$vmr.vban.instream[0].on = $true
$vmr.vban.instream[2].port = 6990
$vmr.vban.outstream[3].bit = 16
Special
Certain 'special' commands are defined by the API as performing actions rather than setting values.
The following methods are available:
- show
- restart
- shutdown
The following properties are write only and accept boolean values:
- showvbanchat
- lock
example:
$vmr.command.show
$vmr.command.lock = $true
Run tests
Run tests using .\runall.ps1 which accepts two parameters:
- tag Run tests of this type
- num Run this number of tests
Current test types are 'higher' and 'lower'
Example:
.\runall.ps1 -tag 'higher' -num 3
Results will be logged and summary file written.