Skip to main content

An asyncio VBAN implementation

Project description

aiovban

An ergonomic, asyncio-first Python wrapper around the VBAN protocol.

PyPI version License: MIT

Overview

aiovban provides a modern interface for interacting with the VBAN protocol, commonly used with VoiceMeeter. It leverages Python's asyncio for high-performance, non-blocking I/O and dataclasses for clean, typed data structures.

Features

  • Full Protocol Support: VBAN Audio, Text (Command), Service (Ping/RT), and Serial.
  • Asyncio Native: Built from the ground up for asynchronous applications.
  • VoiceMeeter Abstraction: High-level VoicemeeterRemote API for intuitive control of strips, buses, and engine commands.
  • Interactive TUI: Includes aiovban-tui, a full-featured terminal mixer for remote VoiceMeeter control.
  • Type Safety: Extensively typed using Python dataclasses and enums.

Installation

pip install aiovban

Usage

High-Level VoiceMeeter Control (Recommended)

The VoicemeeterRemote class provides the easiest way to control a remote VoiceMeeter instance.

import asyncio
from aiovban.asyncio import AsyncVBANClient, VoicemeeterRemote

async def main():
    client = AsyncVBANClient()
    await client.listen("0.0.0.0", 6980)

    # Register a remote VoiceMeeter device
    device = await client.register_device("192.168.1.50")
    
    # Initialize the high-level remote
    vm = VoicemeeterRemote(device)

    # Toggle mute on the first strip
    await vm.strips[0].set_mute(True)
    
    # Set gain on the first bus
    await vm.buses[0].set_gain(-10.5)
    
    # Restart the audio engine
    await vm.restart()

asyncio.run(main())

Low-Level Protocol Usage

For applications requiring direct stream access, you can interact with the client and streams directly.

Sending Commands via Text Streams

# Create a text stream for outgoing commands
command_stream = await device.text_stream('Command1')
await command_stream.send_text('Strip[0].Mute = 1;')

Receiving RT Packets (Real-time State)

from aiovban.asyncio.util import BackPressureStrategy

# Subscribe to RT updates (30 times per second)
rt_stream = await device.rt_stream(30, back_pressure_strategy=BackPressureStrategy.DRAIN_OLDEST)

# Get the next incoming packet
packet = await rt_stream.get_packet()
print(f"Master Gain: {packet.body.buses[0].gain}")

Manual Packet Construction

from aiovban.packet import VBANPacket
from aiovban.packet.headers.audio import VBANAudioHeader
from aiovban.enums import VBANSampleRate

# Construct a custom VBAN audio header
header = VBANAudioHeader(
    sample_rate=VBANSampleRate.RATE_44100, 
    channels=2, 
    samples_per_frame=256,
    streamname="Stream1"
)

# Wrap in a packet
packet = VBANPacket(header=header, body=b'\x00' * 1024)
packed_bytes = packet.pack()

Interactive TUI

aiovban comes with a powerful terminal-based mixer. You can launch it directly from your terminal:

aiovban-tui --register 192.168.1.50

Note: Click on strip titles to rename them.

License

This project is licensed under the MIT License. See the LICENSE file for more details.

Contributing

Contributions are welcome! Please see our Contributing Guide for details on our development workflow and coding standards.

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

aiovban-1.0.3.tar.gz (23.8 kB view details)

Uploaded Source

Built Distribution

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

aiovban-1.0.3-py3-none-any.whl (34.1 kB view details)

Uploaded Python 3

File details

Details for the file aiovban-1.0.3.tar.gz.

File metadata

  • Download URL: aiovban-1.0.3.tar.gz
  • Upload date:
  • Size: 23.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for aiovban-1.0.3.tar.gz
Algorithm Hash digest
SHA256 4410bd6171ac966fb861d5f93ec9724277397634c5aa5f13381701fcf7ad664e
MD5 61485e6000e9c4c442718ee0b4d68ba9
BLAKE2b-256 adac937a6ceec67c71ae72f183267b6ad2e0da5716697be9fa0d4def95a566d9

See more details on using hashes here.

File details

Details for the file aiovban-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: aiovban-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 34.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for aiovban-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 eb58214b0271c4546d40273fd79e35498416f3788bf91b2cce4d0b76c1c16663
MD5 43b932190b0b2de3dbfc93f95b695b71
BLAKE2b-256 661de9742a4211ca927cd9791443879578ca08b39e2ae5de2b8fad9e6a7d53ef

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