Control your Biamp Tesira DSPs directly from Python!
Project description
PyTesira
Control your Biamp Tesira DSPs directly from Python!
work in progress! stuff might break, please don't rely on this for anything critical... yet
Obligatory disclaimer: this is an unofficial project which is not in any way affiliated with, or endorsed by, Biamp Systems
Architecture
PyTesira adopts a modular design where the DSP class (src/pytesira/dsp.py) acts as the hub for everything.
A Transport channel (such as SSH) is used for connection to the Tesira DSP device (using the Tesira Text Protocol).
Currently, SSH is the only supported transport (other transports are planned - feel free to submit a pull request also!).
Upon connection, PyTesira tries to create a block map of available DSP blocks. For each supported block type, it also attempts to query that block's attributes (e.g., number of channels and their labels). This can be exported and re-imported to shorten startup time (querying is slow - especially on a complex setup with many nodes).
A Block represents a type of DSP block available (e.g., LevelControl or SourceSelector). It handles everything that
has to do with that specific DSP block - setting up subscriptions, updating state, handling update requests, and more.
Supported blocks and features
LevelControl: read/write mute status, read/write levelsMuteControl: read/write mute statusSourceSelector: read/write mute status (output), set source and output levels, read levels, read and select active sourceDanteInput: read/write mute status, read/write levels, read/write invert setting, read/write fault-on-inactive settingDanteOutput: read/write mute status, read/write levels, read/write invert setting, read/write fault-on-inactive settingGraphicEqualizer: read/write global bypass, read/write band bypass, read/write band gainDucker: read/write most attributes (except logic configuration)
Supported device-level features
- Start/stop system audio (
dsp.start_system_audio()anddsp.stop_system_audio()) - Reboot device (
dsp.reboot()) - Execute arbitrary commands (
dsp.device_command(command : str))
Tested on
- TesiraFORTÉ DAN (software version
4.11.1.2)
How to use
Install latest version from the PyPI release
pip3 install pytesira
Simple usage example:
from pytesira.dsp import DSP
from pytesira.transport.ssh import SSH
device = DSP()
device.connect(backend = SSH(
hostname = "tesira.device.lan",
username = "admin",
password = "forgetme",
host_key_check = False # Bad option! Bad! Change this in production!
))
# Note: at this point, we need to wait for the DSP to be fully connected/ready.
# To do so, we can simply check for the boolean flag `device.ready`
while not device.ready:
pass
# Save block map, which can then be loaded by specifying `block_map`
# next time when we load the class like so: DSP(block_map = "dsp_test.bmap")
device.save_block_map(output = "dsp_test.bmap")
# Get system info
print(device.hostname)
print(device.serial_number)
print(device.software_version)
# Get faults and network status
print(device.faults)
print(device.network)
# Assuming a 2-channel level control block named `LevelTest`,
# we first look at its channel status
print(device.blocks["LevelTest"].channels)
# Change level and mute states of a LevelControl block
device.blocks["LevelTest"].set_level(channel = 1, value = -20.0)
device.blocks["LevelTest"].set_mute(channel = 2, value = True)
# Get information on a source selector block named `SourceTest`
# (this includes all channels and their levels, as well as currently selected source)
print(device.blocks["SourceTest"].sources)
# Set source on a selector
device.blocks["SourceTest"].select_source(source = 1)
# Set source level on a selector
device.blocks["SourceTest"].set_source_level(source = 1, value = 0.0)
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.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pytesira-0.3.0.tar.gz.
File metadata
- Download URL: pytesira-0.3.0.tar.gz
- Upload date:
- Size: 49.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3194fb204e24f6dc654a1f7aa2db32758b6e1a500638c255313a16827a4b00b7
|
|
| MD5 |
7d09263e788189a374c2b7bd8afc418e
|
|
| BLAKE2b-256 |
fd32ef92616f9ef1ca6062a7dbe27c0e05594dce0a1b8ca72d035d0bfe73a91c
|
Provenance
The following attestation bundles were made for pytesira-0.3.0.tar.gz:
Publisher:
publish.yml on enp6s0/pytesira
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pytesira-0.3.0.tar.gz -
Subject digest:
3194fb204e24f6dc654a1f7aa2db32758b6e1a500638c255313a16827a4b00b7 - Sigstore transparency entry: 171647126
- Sigstore integration time:
-
Permalink:
enp6s0/pytesira@9c2b201beb4645da97bb71fb38e0c526d3caa31f -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/enp6s0
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9c2b201beb4645da97bb71fb38e0c526d3caa31f -
Trigger Event:
release
-
Statement type:
File details
Details for the file pytesira-0.3.0-py3-none-any.whl.
File metadata
- Download URL: pytesira-0.3.0-py3-none-any.whl
- Upload date:
- Size: 34.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0749e665d06e51ee6f5116d6657f8b06634383f1dd1198761bfbe96317bac46d
|
|
| MD5 |
60d1c275af07df693a07fb7e20dc1a20
|
|
| BLAKE2b-256 |
add68dfac5dcdba437d0c97abacba76b623d7c82112184d8760628524c9688ae
|
Provenance
The following attestation bundles were made for pytesira-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on enp6s0/pytesira
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pytesira-0.3.0-py3-none-any.whl -
Subject digest:
0749e665d06e51ee6f5116d6657f8b06634383f1dd1198761bfbe96317bac46d - Sigstore transparency entry: 171647127
- Sigstore integration time:
-
Permalink:
enp6s0/pytesira@9c2b201beb4645da97bb71fb38e0c526d3caa31f -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/enp6s0
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9c2b201beb4645da97bb71fb38e0c526d3caa31f -
Trigger Event:
release
-
Statement type: