vban-cmd-python/README.md
onyx-and-iris ad7cd367cb fix gain setter, add public_packet methods, update readme
fix gain setter for strips.

add accessor methods for public_packet.

update readme
2022-03-02 21:06:39 +00:00

156 lines
4.3 KiB
Markdown

# VBAN CMD
This package offers a Python interface for the [Voicemeeter RT Packet Service](https://vb-audio.com/Voicemeeter/VBANProtocol_Specifications.pdf). It allows a client to connect to a Voicemeeter installation on a remote machine
so long as a valid connection can be established between both systems, and VBAN is configured correctly.
In similar fashion to the Remote API you can set and get parameters for strips/buses.
Tested against
- Basic 1.0.8.1
- Banana 2.0.6.1
- Potato 3.0.2.1
## Prerequisites
- Voicemeeter 1 (Basic), 2 (Banana) or 3 (Potato)
- Python 3.9+
## Installation
```
git clone https://github.com/onyx-and-iris/vban-cmd-python
cd vban-cmd-python
```
Just the wrapper:
```
pip install .
```
With development dependencies:
```
pip install -e .['development']
```
#### Connection:
For sending a text request (remote set) several configuration options are available:
- `ip`: remote address
- `streamname`: default 'Command1'
- `port`: default 6990
- `bps`: bitrate of stream, default 0 should be safe for most cases.
pass these values as arguments to vban_cmd.connect() as show in the example below.
Regarding fetching data (remote get), the code registers itself to the RT Packet Service every 10 seconds,
with a timeout of 15 seconds (same as streamer view app).
#### Use with a context manager:
Unlike the Remote API the VBAN RT Packet service has no login limitations since receiving data requires
a client to simply register to the service. It is therefore advised to use this code only with a context manager.
Parameter coverage is not as extensive for the RT Packet Service as with the Remote API so defined below are the
classes/methods available through this package.
### Example 1
```python
import vban_cmd
class ManyThings:
def __init__(self, vban):
self.vban = vban
def things(self):
# Set the mapping of the second input strip
self.vban.strip[1].A3 = True
print(f'Output A3 of Strip {self.vban.strip[1].label}: {self.vban.strip[1].A3}')
def other_things(self):
# Toggle mute for the leftmost output bus
self.vban.bus[0].mute = not self.vban.bus[0].mute
def main():
with vban_cmd.connect(kind_id, ip=ip) as vban:
do = ManyThings(vban)
do.things()
do.other_things()
if __name__ == '__main__':
kind_id = 'potato'
ip = '<ip address>'
main()
```
## API
### Kinds
A *kind* specifies a major Voicemeeter version. Currently this encompasses
- `basic`
- `banana`
- `potato`
#### `vban_cmd.connect(kind_id, ip=ip) -> '(VbanCmd)'`
Factory function for remotes.
- `ip`: remote pc you wish to send requests to.
### `VbanCmd` (higher level)
#### `vban.type`
The kind of the Voicemeeter instance.
#### `vban.version`
A tuple of the form `(v1, v2, v3, v4)`.
#### `vban.strip`
An `InputStrip` tuple, containing both physical and virtual.
#### `vban.bus`
An `OutputBus` tuple, containing both physical and virtual.
#### `vban.show()`
Shows Voicemeeter if it's hide. No effect otherwise.
#### `vban.hide()`
Hides Voicemeeter if it's shown. No effect otherwise.
#### `vban.shutdown()`
Closes Voicemeeter.
#### `vban.restart()`
Restarts Voicemeeter's audio engine.
### `Strip`
The following properties are gettable and settable:
- `mono`: boolean
- `solo`: boolean
- `mute`: boolean
- `label`: string
- `gainlayer`: float, -60 to 12
- `gain`: float, -60 to 12
- Output mapping (e.g. `A1`, `B3`, etc.): boolean, depends on the Voicemeeter kind
The following properties are settable:
- `comp`: float, from 0.0 to 10.0
- `gate`: float, from 0.0 to 10.0
- `limit`: int, from -40 to 12
### `Bus`
The following properties are gettable and settable:
- `mute`: boolean
- `mono`: boolean
- `eq`: boolean
- `eq_ab`: boolean
- `label`: string
- `gain`: float, -60 to 12
### `VbanCmd` (lower level)
#### `vban.set_rt(id_, param, val)`
Sends a string request RT Packet where the command would take the form:
```python
f'{id_}.{param}={val}'
```
### `Errors`
- `errors.VMCMDErrors`: Base VMCMD error class.
### `Tests`
First make sure you installed the [development dependencies](https://github.com/onyx-and-iris/vban-cmd-python#installation)
To run the tests from tests directory:
`nosetests --r test -v`
## Resources
- [Voicemeeter RT Packet Service](https://vb-audio.com/Voicemeeter/VBANProtocol_Specifications.pdf)