Python interface for the VBAN RT Packet Service (Sendtext)
Project description
VBAN CMD
This python interface allows you to get and set Voicemeeter parameter values over a network.
It may be used standalone or to extend the Voicemeeter Remote Python API
There is no support for audio transfer in this package, only parameters.
For an outline of past/future changes refer to: CHANGELOG
Tested against
- Basic 1.0.8.4
- Banana 2.0.6.4
- Potato 3.0.2.4
Requirements
- Voicemeeter
- Python 3.10 or greater
Installation
Pip
Install vban-cmd package from your console
pip install vban-cmd
Use
Simplest use case, use a context manager to request a VbanCmd class of a kind.
Login and logout are handled for you in this scenario.
__main__.py
import vban_cmd
class ManyThings:
def __init__(self, vban):
self.vban = vban
def things(self):
self.vban.strip[0].label = "podmic"
self.vban.strip[0].mute = True
print(
f"strip 0 ({self.vban.strip[0].label}) mute has been set to {self.vban.strip[0].mute}"
)
def other_things(self):
info = (
f"bus 3 gain has been set to {self.vban.bus[3].gain}",
f"bus 4 eq has been set to {self.vban.bus[4].eq}",
)
self.vban.bus[3].gain = -6.3
self.vban.bus[4].eq = True
print("\n".join(info))
def main():
with vban_cmd.api(kind_id, **opts) as vban:
do = ManyThings(vban)
do.things()
do.other_things()
# set many parameters at once
vban.apply(
{
"strip-2": {"A1": True, "B1": True, "gain": -6.0},
"bus-2": {"mute": True},
}
)
if __name__ == "__main__":
kind_id = "banana"
opts = {
"ip": "<ip address>",
"streamname": "Command1",
"port": 6980,
}
main()
Otherwise you must remember to call vban.login()
, vban.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
Strip
The following properties are available.
mono
: booleansolo
: booleanmute
: booleanlabel
: stringgain
: float, -60 to 12A1 - A5
,B1 - B3
: booleancomp
: float, from 0.0 to 10.0gate
: float, from 0.0 to 10.0limit
: int, from -40 to 12
example:
vban.strip[3].gain = 3.7
print(strip[0].label)
Gainlayers
gain
: float, from -60.0 to 12.0
example:
vban.strip[3].gainlayer[3].gain = 3.7
Gainlayers are defined for potato version only.
Levels
The following properties are available.
prefader
example:
print(vban.strip[3].levels.prefader)
Level properties will return -200.0 if no audio detected.
Bus
The following properties are available.
mono
: booleaneq
: booleaneq_ab
: booleanmute
: booleanlabel
: stringgain
: float, -60 to 12
example:
vban.bus[4].eq = true
print(vban.bus[0].label)
Modes
The following properties are available.
normal
: booleanamix
: booleanbmix
: booleancomposite
: booleantvmix
: booleanupmix21
: booleanupmix41
: booleanupmix61
: booleancenteronly
: booleanlfeonly
: booleanrearonly
: boolean
The following methods are available.
get()
: Returns the current bus mode
example:
vban.bus[4].mode.amix = True
print(vban.bus[2].mode.get())
Levels
The following properties are available.
all
example:
print(vban.bus[0].levels.all)
levels.all
will return -200.0 if no audio detected.
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 frontshutdown()
: Shuts down the GUIrestart()
: Restart the audio enginereset()
: Applies thereset
config. (phys strip B1, virt strip A1, gains, comp, gate 0.0, mute, mono, solo, eq false)
The following properties are write only and accept boolean values.
showvbanchat
: booleanlock
: boolean
example:
vban.command.restart()
vban.command.showvbanchat = true
Multiple parameters
apply
Set many strip/bus parameters at once, for example:
vban.apply(
{
"strip-2": {"A1": True, "B1": True, "gain": -6.0},
"bus-2": {"mute": True},
}
)
Or for each class you may do:
vban.strip[0].apply(mute: true, gain: 3.2, A1: true)
vban.vban.outstream[0].apply(on: true, name: 'streamname', bit: 24)
Config Files
vban.apply_config(<configname>)
You may load config files in TOML format. Three example configs have been included with the package. Remember to save current settings before loading a user config. To set one you may do:
import vban_cmd
with vban_cmd.api('banana') as vban:
vban.apply_config('example')
will load a config file at configs/banana/example.toml for Voicemeeter Banana.
Events
Level updates are considered high volume, by default they are NOT listened for. Use subs
keyword arg to initialize event updates.
example:
import vban_cmd
# Listen for level updates
opts = {
"ip": "<ip address>",
"streamname": "Command1",
"port": 6980,
"subs": {"ldirty": True},
}
with vban_cmd.api('banana', **opts) as vban:
...
vban.subject
Use the Subject class to register an app as event observer.
The following methods are available:
add
: registers an app as an event observerremove
: deregisters an app as an event observer
example:
# register the app self as an event observer
self.vban.subject.add(self)
vban.event
You may also add/remove event subscriptions as necessary with the Event class.
example:
vban.event.add("ldirty")
vban.event.remove("pdirty")
# get a list of currently subscribed
print(vban.event.get())
VbanCmd class
vban_cmd.api(kind_id: str, **opts: dict)
You may pass the following optional keyword arguments:
ip
: str, ip or hostname of remote machinestreamname
: str, name of the stream to connect to.port
: int=6980, vban udp port of remote machine.subs
: dict={"pdirty": True, "ldirty": False}, controls which updates to listen for.pdirty
: parameter updatesldirty
: level updates
vban.pdirty
True iff a parameter has been changed.
vban.ldirty
True iff a level value has been changed.
vban.sendtext(script)
Sends a script block as a string request, for example:
vban.sendtext("Strip[0].Mute=1;Bus[0].Mono=1")
vban.public_packet
Returns a Voicemeeter rt data packet object. Designed to be used internally by the interface but available for parsing through this read only property object. States not guaranteed to be current (requires use of dirty parameters to confirm).
Errors
errors.VBANCMDError
: Base VMCMD error class.
Tests
First make sure you installed the development dependencies
Then from tests directory:
pytest -v
Resources
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.