Python bindings for the SunVox modular synthesizer library
Project description
pysunvox
Python bindings for the SunVox modular synthesizer library.
Features
- High-level Pythonic API with context managers, properties, and type hints
- Low-level 1:1 wrappers of the C
sv_*functions - Full access to modules, controllers, patterns, and playback
- Thread-safe slot locking
Installation
pip install pysunvox
Quick Start
import time
from pysunvox import SunVox
with SunVox(sample_rate=44100) as sv:
with sv.open_slot(0) as slot:
slot.load("song.sunvox")
print(f"Song: {slot.name}, BPM: {slot.bpm}")
slot.volume = 256
slot.play_from_beginning()
time.sleep(10)
slot.stop()
Command-Line Interface
pysunvox provides a CLI for common operations:
# Show help
pysunvox --help
# Display project information
pysunvox info song.sunvox
# List all modules in a project
pysunvox info song.sunvox --modules
# Show detailed module info (including controllers)
pysunvox info song.sunvox --module 1
# List all patterns
pysunvox info song.sunvox --patterns
# Scan and analyze all songs in a directory
pysunvox songs /path/to/songs
# Scan recursively
pysunvox songs /path/to/songs -r
# Play a project
pysunvox play song.sunvox
# Play with options
pysunvox play song.sunvox --duration 30 --volume 200 --line 0
# Show version information
pysunvox info --version
CLI Commands
| Command | Description |
|---|---|
info <file> |
Show project metadata (name, BPM, TPL, duration, counts) |
info <file> -m/--modules |
List all modules with type, name, and flags |
info <file> -M/--module <id> |
Show detailed module info including controllers |
info <file> -p/--patterns |
List all patterns with tracks, lines, and position |
info --version |
Show pysunvox and SunVox library versions |
songs <dir> [-r] |
Scan and analyze all songs in a directory |
play <file> |
Play a project (-d duration, -v volume, -l start line) |
API Overview
High-Level API
The high-level API provides Pythonic classes with context managers:
from pysunvox import SunVox, Slot, Module, Pattern
# Initialize engine and open a slot
with SunVox(sample_rate=44100) as sv:
with sv.open_slot(0) as slot:
# Load and play a project
slot.load("project.sunvox")
slot.play()
# Access song properties
print(f"BPM: {slot.bpm}, TPL: {slot.tpl}")
print(f"Length: {slot.length_lines} lines")
# Work with modules
for i in range(slot.num_modules):
module = slot.get_module(i)
if module.exists:
print(f"Module {i}: {module.name} ({module.type})")
# Create modules (requires lock)
with slot.lock():
synth = slot.new_module("Generator", "MySynth", x=256, y=256)
synth.connect_to(0) # Connect to Output
# Access module controllers
ctl = synth.get_controller(0)
print(f"{ctl.name}: {ctl.value} (range: {ctl.min_value}-{ctl.max_value})")
ctl.value = 128
# Work with patterns
with slot.lock():
pattern = slot.new_pattern("MyPattern", tracks=4, lines=32)
pattern.set_event(track=0, line=0, note=60, vel=128, module=synth.num + 1)
# Save the project
slot.save("modified.sunvox")
Low-Level API
Direct access to sv_* functions via the _core module:
from pysunvox import _core
# Initialize
_core.init(None, 44100, 2, 0)
_core.open_slot(0)
# Load and play
_core.load(0, "song.sunvox")
_core.play_from_beginning(0)
# Query state
print(f"BPM: {_core.get_song_bpm(0)}")
print(f"Current line: {_core.get_current_line(0)}")
# Cleanup
_core.stop(0)
_core.close_slot(0)
_core.deinit()
Constants
from pysunvox import (
# Note commands
NOTECMD_NOTE_OFF,
NOTECMD_ALL_NOTES_OFF,
NOTECMD_PLAY,
NOTECMD_STOP,
# Init flags
SV_INIT_FLAG_NO_DEBUG_OUTPUT,
SV_INIT_FLAG_OFFLINE,
SV_INIT_FLAG_AUDIO_FLOAT32,
# Module flags
SV_MODULE_FLAG_EXISTS,
SV_MODULE_FLAG_GENERATOR,
SV_MODULE_FLAG_EFFECT,
)
Supported Platforms
Pre-built wheels are available for:
- macOS: x86_64, arm64
- Linux: x86_64, aarch64 (glibc only, no musl/Alpine)
- Windows: AMD64
Python versions: 3.10, 3.11, 3.12, 3.13
Building from Source
Requires the SunVox library for developers.
# Install dependencies and build
make sync
make build
# Run tests
make test
# Build wheel with bundled library
make wheel
# Clean build artifacts
make clean
License / Credits
All rights for SunVox and its developer library reserved to its author, Alexander Zolotov.
See: https://warmplace.ru
Powered by SunVox (modular synth & tracker) Copyright (c) 2008 - 2024, Alexander Zolotov nightradio@gmail.com, WarmPlace.ru
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 Distributions
Built Distributions
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 pysunvox-0.1.1-cp314-cp314-macosx_15_0_arm64.whl.
File metadata
- Download URL: pysunvox-0.1.1-cp314-cp314-macosx_15_0_arm64.whl
- Upload date:
- Size: 652.5 kB
- Tags: CPython 3.14, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85cddb2e9ead68d60b6c37fda9069cb6616bdef5a8dce397a1fca311cd860496
|
|
| MD5 |
9bb6b437e2d15ad60f5afa29396f7a0b
|
|
| BLAKE2b-256 |
bcfc994f043c654b71fb6fbfb8fd5b8b97b1287f02a8788b4c1dc9c6d2ba207d
|
File details
Details for the file pysunvox-0.1.1-cp313-cp313-macosx_15_0_arm64.whl.
File metadata
- Download URL: pysunvox-0.1.1-cp313-cp313-macosx_15_0_arm64.whl
- Upload date:
- Size: 651.6 kB
- Tags: CPython 3.13, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56a57051745efa48e99ab1af29625c0d5a78cf826b473747569b3e6af3b29d6d
|
|
| MD5 |
216e4613989fa2ffe80a905b42a9ffea
|
|
| BLAKE2b-256 |
9a7a9e186b1067d1f4493e285f937fc1cfdf45f86bdf6ce414263921fbccbefb
|
File details
Details for the file pysunvox-0.1.1-cp312-cp312-macosx_15_0_arm64.whl.
File metadata
- Download URL: pysunvox-0.1.1-cp312-cp312-macosx_15_0_arm64.whl
- Upload date:
- Size: 652.1 kB
- Tags: CPython 3.12, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
567fee833c0ff7c901cc9c3c0dd951df7eee389c4373f49d3e49db965dd236e2
|
|
| MD5 |
ba1909b5e3321f7783b9a71a9c7e72ab
|
|
| BLAKE2b-256 |
31b05bad515ce347e3a73299a221227770e8e89397ededf24ada0b898b058cf4
|
File details
Details for the file pysunvox-0.1.1-cp311-cp311-macosx_15_0_arm64.whl.
File metadata
- Download URL: pysunvox-0.1.1-cp311-cp311-macosx_15_0_arm64.whl
- Upload date:
- Size: 650.6 kB
- Tags: CPython 3.11, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2095e2248fc6b7c74194b51c7c1f645009cfe67d8869d4ba36a6571630e2fc1d
|
|
| MD5 |
ea4c3a7f48b3985c5a5395e5915fd313
|
|
| BLAKE2b-256 |
26195e4071616b27d6c3e3c52901aae94a48eb4b8af8207008a1530674187231
|
File details
Details for the file pysunvox-0.1.1-cp310-cp310-macosx_15_0_arm64.whl.
File metadata
- Download URL: pysunvox-0.1.1-cp310-cp310-macosx_15_0_arm64.whl
- Upload date:
- Size: 651.0 kB
- Tags: CPython 3.10, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
177fd426061fa809d75ff2745d8bbc008c114a35e338cd3f8265fdfb6258cf2f
|
|
| MD5 |
c1b8dbc4b44295325f39e0f313e66719
|
|
| BLAKE2b-256 |
ecf08a73fc202ee608583d59bea61799946b5c5480f63bbaf2e0e3d2a93bb174
|