Skip to main content

An asyncio VBAN implementation

Reason this release was yanked:

Broken TUI

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.2.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.2-py3-none-any.whl (34.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: aiovban-1.0.2.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.2.tar.gz
Algorithm Hash digest
SHA256 0d38f812355cf6fff8f78796437dd4024d9e44fb8eba42c2f6b128ea219cb774
MD5 4a7774a45882496db5ad222350799a9f
BLAKE2b-256 f6aec42c2dff216ff5954bc9d2d8a6ed4df671a6c0b85962fd42024dd15a6bac

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aiovban-1.0.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8b6ca5609e6267d0526be356e936cf0449681f6f76782d89630499b4b053e919
MD5 d89d71981fb772a0aebc932f5d4affd2
BLAKE2b-256 0f8d7409598d59ce5a742ceab03cf53def161b81a4eb43cd7d6db2a83e76b656

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