A Powershell wrapper for the Voiceemeter API
Go to file
onyx-and-iris 02428a2261 Update CHANGELOG.md
add version 2.3 section to changelog
2022-03-08 23:04:15 +00:00
_profiles/banana add load profiles, examples, update readme 2022-01-24 20:01:12 +00:00
examples Update goto_nextbus.ps1 2022-01-09 14:23:20 +00:00
lib Update command.ps1 2022-03-08 23:03:35 +00:00
tests add recorder tests 2022-03-08 23:01:41 +00:00
.gitignore add load profiles, examples, update readme 2022-01-24 20:01:12 +00:00
CHANGELOG.md Update CHANGELOG.md 2022-03-08 23:04:15 +00:00
example.ps1 add strip/bus commands to readme, update examples 2021-05-05 19:02:20 +01:00
FROM_SOURCE.md update readme, runall and gitignore 2021-05-01 22:20:21 +01:00
LICENSE Initial commit 2021-04-28 17:16:09 +01:00
README.md Update README.md 2022-03-08 23:04:01 +00:00

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

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.

Strip

The following strip commands are available:

  • mute: bool
  • mono: bool
  • mc: bool
  • k: int, from 0 to 4
  • solo: bool
  • A1-A5: bool
  • B1-B3: bool
  • limit: int, from -40 to 12
  • gain: float, from -60 to 12
  • comp: float, from 0 to 10
  • gate: float, from 0 to 10
  • gainlayer0-gainlayer7: float for example:
$vmr.strip[5].gainlayer1 = -8.3

A,B commands depend on Voicemeeter type. gainlayers defined for Potato version only. mc, k for virtual strips only.

Bus

The following strip commands are available:

  • mute: bool

  • mono: bool

  • eq: bool

  • limit: int, from -40 to 12

  • gain: float, from -60 to 12

  • mode_: bool, any of the following: @('normal', 'amix', 'bmix', 'repeat', 'composite', 'tvmix', 'upmix21', 'upmix41', 'upmix61', 'centeronly', 'lfeonly', 'rearonly')

      for example:
      ```
      $vmr.button[3].mode_repeat = $true
      ```
    

A,B commands depend on Voicemeeter type. gainlayers defined for Potato version only.

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

Command

Certain 'special' commands are defined by the API as performing actions rather than setting values.

The following methods are available:

  • show
  • hide
  • restart
  • shutdown

The following properties are write only and accept boolean values:

  • showvbanchat
  • lock

example:

$vmr.command.show

$vmr.command.lock = $true

Multiple parameters

Set many strip/bus/macrobutton/vban 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() }

Remote class

Access to lower level Getters and Setters are provided with these functions:

  • $vmr.Getter(param): For getting the value of a parameter expected to return a value other than string.
  • $vmr.Getter_String(param): For getting the value of any parameter expected to return a string.
  • $vmr.Setter(param, value): For setting the value of any parameter.

Access to lower level polling functions are provided with these functions:

  • $vmr.PDirty: Returns true if a parameter has been updated.
  • $vmr.MDirty: Returns true if a macrobutton has been updated.

example:

$vmr.Getter('Strip[2].Mute')
$vmr.Getter_String('Bus[1].Label')
$vmr.Setter('Strip[4].Label', 'stripname')
$vmr.Setter('Strip[0].Gain', -3.6)

Config Files

$vmr.Set_Profile('config')

You may load config files in psd1 format. An example profile has been included with the package. Remember to save current settings before loading a profile. To test simply rename _profiles directory to profiles. It will be loaded into memory but not set. To set one you may do:

Import-Module Voicemeeter
try {
    $vmr = Get-RemoteBanana
    $vmr.Set_Profile("config")
}
finally { $vmr.Logout() }

will load a config file at profiles/banana/config.psd1 for Voicemeeter Banana.

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.

Official Documentation