Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

pysunvox-0.1.1-cp314-cp314-macosx_15_0_arm64.whl (652.5 kB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

pysunvox-0.1.1-cp313-cp313-macosx_15_0_arm64.whl (651.6 kB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

pysunvox-0.1.1-cp312-cp312-macosx_15_0_arm64.whl (652.1 kB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

pysunvox-0.1.1-cp311-cp311-macosx_15_0_arm64.whl (650.6 kB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

pysunvox-0.1.1-cp310-cp310-macosx_15_0_arm64.whl (651.0 kB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

File details

Details for the file pysunvox-0.1.1-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pysunvox-0.1.1-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 85cddb2e9ead68d60b6c37fda9069cb6616bdef5a8dce397a1fca311cd860496
MD5 9bb6b437e2d15ad60f5afa29396f7a0b
BLAKE2b-256 bcfc994f043c654b71fb6fbfb8fd5b8b97b1287f02a8788b4c1dc9c6d2ba207d

See more details on using hashes here.

File details

Details for the file pysunvox-0.1.1-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pysunvox-0.1.1-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 56a57051745efa48e99ab1af29625c0d5a78cf826b473747569b3e6af3b29d6d
MD5 216e4613989fa2ffe80a905b42a9ffea
BLAKE2b-256 9a7a9e186b1067d1f4493e285f937fc1cfdf45f86bdf6ce414263921fbccbefb

See more details on using hashes here.

File details

Details for the file pysunvox-0.1.1-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pysunvox-0.1.1-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 567fee833c0ff7c901cc9c3c0dd951df7eee389c4373f49d3e49db965dd236e2
MD5 ba1909b5e3321f7783b9a71a9c7e72ab
BLAKE2b-256 31b05bad515ce347e3a73299a221227770e8e89397ededf24ada0b898b058cf4

See more details on using hashes here.

File details

Details for the file pysunvox-0.1.1-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pysunvox-0.1.1-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 2095e2248fc6b7c74194b51c7c1f645009cfe67d8869d4ba36a6571630e2fc1d
MD5 ea4c3a7f48b3985c5a5395e5915fd313
BLAKE2b-256 26195e4071616b27d6c3e3c52901aae94a48eb4b8af8207008a1530674187231

See more details on using hashes here.

File details

Details for the file pysunvox-0.1.1-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pysunvox-0.1.1-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 177fd426061fa809d75ff2745d8bbc008c114a35e338cd3f8265fdfb6258cf2f
MD5 c1b8dbc4b44295325f39e0f313e66719
BLAKE2b-256 ecf08a73fc202ee608583d59bea61799946b5c5480f63bbaf2e0e3d2a93bb174

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