Skip to main content

Reusable Python audio engine with crossfade and beat-aware transition planning.

Reason this release was yanked:

Superseded by 0.3.1 with cleaned public documentation.

Project description

Veloura

Veloura is a reusable Python audio transition engine for smooth queue playback. It provides FFmpeg-backed PCM decoding, equal-power crossfades, transition analysis, beat-aware planning, and a small CLI for local inspection.

Veloura is framework-agnostic. Use it in streamer tools, radio pipelines, desktop music apps, Discord/Twitch bots, or backend automation without tying your project to one bot implementation.

Features

  • Equal-power crossfade mixing for signed 16-bit PCM audio
  • Queue/session helpers for buffering, skip, and current-track snapshots
  • Smart transition planning based on track duration, silence trim, and loudness
  • Beat/BPM analysis with beat-aware transition plans
  • Project-local or user-cache transition analysis storage
  • Optional yt-dlp stream resolution for URLs and search queries
  • Optional Discord audio source compatibility
  • Pure-Python PCM fallback for Python builds without audioop

Requirements

  • Python 3.12 or newer
  • FFmpeg for decoding, playback, silence analysis, loudness analysis, and beat analysis
  • yt-dlp only when resolving online stream/search inputs
  • discord.py and PyNaCl only when using the Discord audio source directly

Installation

Install the core package:

pip install veloura-audio

Install stream resolution support:

pip install "veloura-audio[stream]"

Install Discord voice support:

pip install "veloura-audio[discord]"

Install every optional integration:

pip install "veloura-audio[all]"

Quick Start

from veloura.audio import AudioTrack, CrossfadeSession, transition_preset

config = transition_preset("streamer")

track = AudioTrack.from_source(
    "/music/current-song.flac",
    title="Artist - Current Song",
    duration=184,
)

session = CrossfadeSession(volume=0.65, crossfade_seconds=config.base_crossfade_seconds)
session.source.enqueue(track)

For online sources, install veloura-audio[stream] and resolve a playable stream:

import asyncio

from veloura.audio import resolve_stream_track, transition_preset


async def main():
    track = await resolve_stream_track(
        "artist song official audio",
        transition_config=transition_preset("streamer"),
    )
    print(track.title, track.stream_url)


asyncio.run(main())

CLI

Veloura exposes the same core tools through python -m veloura or the veloura console script:

python -m veloura presets
python -m veloura prepare ./song.mp3 --preset streamer
python -m veloura analyze ./song.mp3
python -m veloura plan ./current.mp3 ./next.mp3 --preset broadcast

For YouTube/search inputs, install veloura-audio[stream] and add --resolve:

python -m veloura plan "current song" "next song" --preset streamer --resolve

Transition analysis is cached under ~/.cache/veloura by default, or under the directory set in VELOURA_CACHE_DIR. Use --cache-dir for a project-local cache, or --no-cache when comparing fresh analysis.

Presets

  • streamer: balanced transitions for livestream/background music
  • broadcast: longer, smoother radio-style blends
  • low-latency: shorter analysis windows for weaker machines or fast queues

Aliases such as streamer-safe, broadcast-smooth, and fast are also available.

Standalone Example

The example player resolves local files or stream queries, prepares transition analysis, mixes the queue, and pipes PCM into ffplay:

python examples/streamer_player.py ./song-a.mp3 ./song-b.mp3 --preset streamer
python examples/streamer_player.py ./song-a.mp3 ./song-b.mp3 --cache-dir ./veloura-cache

Public API

Prefer these names for new projects:

  • AudioTrack
  • CrossfadeSession
  • FileAnalysisCache
  • transition_preset
  • prepare_smart_transition
  • plan_beat_transition
  • resolve_stream_track

Compatibility names:

  • MixerTrack
  • CrossfadeAudioSource

Development Checks

python3 -m unittest discover -s tests
python3 -m py_compile veloura/*.py veloura/audio/*.py examples/*.py

Before publishing publicly, confirm the package name on PyPI, add project URLs, choose the license/copyright owner, build the distribution, and publish to TestPyPI first.

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

veloura_audio-0.3.0.tar.gz (29.0 kB view details)

Uploaded Source

Built Distribution

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

veloura_audio-0.3.0-py3-none-any.whl (24.8 kB view details)

Uploaded Python 3

File details

Details for the file veloura_audio-0.3.0.tar.gz.

File metadata

  • Download URL: veloura_audio-0.3.0.tar.gz
  • Upload date:
  • Size: 29.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for veloura_audio-0.3.0.tar.gz
Algorithm Hash digest
SHA256 218c17761d5ef6f86f10a499b8efcb9a98d61ed1890f02f201a294a368eb5fc0
MD5 ff090324976f89c9e87b2e850fdbbe40
BLAKE2b-256 585b4974caecbefed0e4616e68b7e4b456ddde004f03ac06177a35234ed61154

See more details on using hashes here.

Provenance

The following attestation bundles were made for veloura_audio-0.3.0.tar.gz:

Publisher: release.yml on VelouraAudio/veloura-audio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file veloura_audio-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: veloura_audio-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 24.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for veloura_audio-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 10363fb7fb53a0d4790d1b5cf7a42177caabe0a165242a4d947129e73dc08aa8
MD5 713e7a17fb3c7abac2323f3fb5b911ee
BLAKE2b-256 cab6de46377869e4a9b825ad22011402f29060aed84687e6a0cae6dc951789e1

See more details on using hashes here.

Provenance

The following attestation bundles were made for veloura_audio-0.3.0-py3-none-any.whl:

Publisher: release.yml on VelouraAudio/veloura-audio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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