Skip to main content

A Python wrapper for the Voiceemeter API

Project description

License: MIT Code style: black Imports: isort Tests Status Tests Status Tests Status

Python Wrapper for Voicemeeter API

This package offers a Python interface for the Voicemeeter Remote C API.

For an outline of past/future changes refer to: CHANGELOG

Tested against

  • Basic 1.0.8.2
  • Banana 2.0.6.2
  • Potato 3.0.2.2

Requirements

Installation

Pip

Install voicemeeter-api package from your console

pip install voicemeeter-api

Use

Simplest use case, use a context manager to request a Remote class of a kind.

Login and logout are handled for you in this scenario.

__main__.py

import voicemeeterlib


class ManyThings:
    def __init__(self, vm):
        self.vm = vm

    def things(self):
        self.vm.strip[0].label = "podmic"
        self.vm.strip[0].mute = True
        print(
            f"strip 0 ({self.vm.strip[0].label}) has been set to {self.vm.strip[0].mute}"
        )

    def other_things(self):
        info = (
            f"bus 3 gain has been set to {self.vm.bus[3].gain}",
            f"bus 4 eq has been set to {self.vm.bus[4].eq}",
        )
        self.vm.bus[3].gain = -6.3
        self.vm.bus[4].eq = True
        print("\n".join(info))


def main():
    with voicemeeterlib.api(kind_id) as vm:
        do = ManyThings(vm)
        do.things()
        do.other_things()

        # set many parameters at once
        vm.apply(
            {
                "strip-2": {"A1": True, "B1": True, "gain": -6.0},
                "bus-2": {"mute": True},
                "button-0": {"state": True},
                "vban-in-0": {"on": True},
                "vban-out-1": {"name": "streamname"},
            }
        )


if __name__ == "__main__":
    kind_id = "banana"

    main()

Otherwise you must remember to call vm.login(), vm.logout() at the start/end of your code.

kind_id

Pass the kind of Voicemeeter as an argument. kind_id may be:

  • basic
  • banana
  • potato

Available commands

Channels (strip/bus)

The following properties exist for audio channels.

  • mono: boolean
  • mute: boolean
  • gain: float, from -60 to 12
  • mc, k: boolean
  • comp, gate: float, from 0 to 10
  • limit: int, from -40 to 12
  • A1 - A5, B1 - B3: boolean
  • eq: boolean
  • label: string
  • device: string
  • sr: int

example:

vm.strip[3].gain = 3.7
print(strip[0].label)

vm.bus[4].mono = true

Macrobuttons

Three modes defined: state, stateonly and trigger.

  • state: boolean
  • stateonly: boolean
  • trigger: boolean

example:

vm.button[37].state = true
vm.button[55].trigger = false

Recorder

The following methods are Available

  • play()
  • stop()
  • pause()
  • record()
  • ff()
  • rew() The following properties accept boolean values.
  • loop: boolean
  • A1 - A5: boolean
  • B1 - A3: boolean Load accepts a string:
  • load: string

example:

vm.recorder.play()
vm.recorder.stop()

# Enable loop play
vm.recorder.loop = True

# Disable recorder out channel B2
vm.recorder.B2 = False

# filepath as raw string
vm.recorder.load(r'C:\music\mytune.mp3')

VBAN

  • vm.vban.enable() vm.vban.disable() Turn VBAN on or off

For each vban in/out stream the following properties are defined:

  • on: boolean
  • name: string
  • ip: string
  • port: int, range from 1024 to 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:

# turn VBAN on
vm.vban.enable()

# turn on vban instream 0
vm.vban.instream[0].on = True

# set bit property for outstream 3 to 24
vm.vban.outstream[3].bit = 24

Command

Certain 'special' commands are defined by the API as performing actions rather than setting values. The following methods are available:

  • show() : Bring Voiceemeter GUI to the front
  • shutdown() : Shuts down the GUI
  • restart() : Restart the audio engine

The following properties are write only and accept boolean values.

  • showvbanchat: boolean
  • lock: boolean

example:

vm.command.restart()
vm.command.showvbanchat = true

Multiple parameters

  • apply Set many strip/bus/macrobutton/vban parameters at once, for example:
vm.apply(
    {
        "strip-2": {"A1": True, "B1": True, "gain": -6.0},
        "bus-2": {"mute": True},
        "button-0": {"state": True},
        "vban-in-0": {"on": True},
        "vban-out-1": {"name": "streamname"},
    }
)

Or for each class you may do:

vm.strip[0].apply(mute: true, gain: 3.2, A1: true)
vm.vban.outstream[0].apply(on: true, name: 'streamname', bit: 24)

Base Module

Remote class

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

  • vm.get(param, is_string=false): For getting the value of any parameter. Set string to true if getting a property value expected to return a string.
  • vm.set(param, value): For setting the value of any parameter.

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

  • vm.pdirty(): Returns true if a parameter has been updated.
  • vm.mdirty(): Returns true if a macrobutton has been updated.
  • vm.ldirty(): Returns true if a level has been updated.

example:

vm.get('Strip[2].Mute')
vm.set('Strip[4].Label', 'stripname')
vm.set('Strip[0].Gain', -3.6)

Config Files

vm.apply_config('config')

You may load config files in TOML format. Three example profiles have been included with the package. Remember to save current settings before loading a profile. To set one you may do:

import voicemeeterlib
with voicemeeterlib.api('banana') as vm:
    vm.apply_profile('config')

will load a config file at configs/banana/config.toml for Voicemeeter Banana.

Run tests

To run all tests:

pytest -v

Official Documentation

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

voicemeeter-api-0.1.1.tar.gz (21.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

voicemeeter_api-0.1.1-py3-none-any.whl (24.2 kB view details)

Uploaded Python 3

File details

Details for the file voicemeeter-api-0.1.1.tar.gz.

File metadata

  • Download URL: voicemeeter-api-0.1.1.tar.gz
  • Upload date:
  • Size: 21.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.11.0b3 Windows/10

File hashes

Hashes for voicemeeter-api-0.1.1.tar.gz
Algorithm Hash digest
SHA256 92614691afa479f7794aec3ddb9a8b62c5876b95f1226b98a98232b77b789a01
MD5 2fee018fcb1d2e3a4c6030860218d969
BLAKE2b-256 4262a0840c44d9c58b914d50b6a64de4961bff7b14ff614d519da505c0f00107

See more details on using hashes here.

File details

Details for the file voicemeeter_api-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: voicemeeter_api-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 24.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.11.0b3 Windows/10

File hashes

Hashes for voicemeeter_api-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6096daf801180a06f5f781bd977d8da588300e96f11a6e15fa7b8fc5ec662b3b
MD5 cd0d4e138c0aabbcd0c704f9e74242c2
BLAKE2b-256 968754fa72777b0e9fff405ccf914b04af949384d63aa6f3db38737b7568a149

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page