Skip to main content

rockbox-ffi (Python)

PyPI Python FFI uv License

Python bindings for the Rockbox DSP, metadata, and playback engine, via cffi (ABI mode) over the prebuilt librockbox_ffi shared library.

📖 Sound settings reference — the equalizer, tone, crossfeed, compressor and other DSP controls mirror Rockbox's own. See the official Rockbox manual — Sound Settings.

Setup

Build the shared library once (from the repo root):

cargo build --release -p rockbox-ffi

Then install the Python package with uv:

cd bindings/python
uv venv
uv pip install -e .
uv run python examples/smoke.py

The library is located automatically by walking up to target/release/librockbox_ffi.{dylib,so}. Override with the ROCKBOX_FFI_LIB environment variable.

Interactive console

uv pip install -e '.[dev]'      # installs IPython
uv run python console.py

Drops into IPython with rb, metadata, Dsp, Player, the enums, and a FIXTURE sample track preloaded (falls back to the plain REPL without IPython):

metadata.read(str(FIXTURE))["title"]        # 'Speak'
p = Player(volume=0.6)
p.set_queue([str(FIXTURE)]); p.play()
p.status()["state"]                          # 'playing'

Usage

import rockbox_ffi as rb
from rockbox_ffi import Dsp, Player, metadata
from rockbox_ffi.enums import DspReplayGainMode, ReplayGainMode, CrossfadeMode

# --- metadata ---------------------------------------------------------
meta = metadata.read("song.flac")
print(meta["artist"], "—", meta["title"], meta["duration_ms"], "ms")
print(metadata.probe("track.opus"))          # -> "Opus"

# --- DSP (interleaved stereo int16) -----------------------------------
with Dsp(44100) as dsp:
    dsp.eq_enable(True)
    dsp.set_eq_band(0, cutoff_hz=60, q=0.7, gain_db=3.0)
    dsp.set_replaygain(DspReplayGainMode.TRACK, noclip=True, preamp_db=0.0)
    dsp.set_replaygain_gains(track_gain_db=-6.02)   # halves amplitude
    processed = dsp.process(samples)                # array('h')

# --- playback (needs an output device) --------------------------------
with Player(volume=0.8) as player:
    player.set_replaygain(ReplayGainMode.TRACK, preamp_db=0.0, prevent_clipping=True)
    player.set_crossfade(CrossfadeMode.ALWAYS)
    player.set_queue(["a.flac", "b.mp3", "c.opus"])
    player.play()
    print(player.status())     # {'state': 'playing', 'index': 0, ...}

API

Module Contents
rockbox_ffi.metadata read(path) -> dict, probe(filename) -> str | None
rockbox_ffi.Dsp EQ / tone / surround / compressor / ReplayGain, process(samples)
rockbox_ffi.Player queue + transport + crossfade + ReplayGain, status() -> dict
rockbox_ffi.enums DspReplayGainMode, ReplayGainMode, CrossfadeMode, MixMode, …

Two ReplayGain encodings

The DSP and player use different mode integers (a quirk of the C ABI):

  • Dsp.set_replaygainDspReplayGainMode (TRACK=0, ALBUM=1, SHUFFLE=2, OFF=3)
  • Player.set_replaygainReplayGainMode (OFF=0, TRACK=1, ALBUM=2)

Use the named enums and you won't have to remember which is which.

Memory

All heap allocations crossing the FFI boundary (JSON strings, sample buffers) are freed inside the wrappers — you never call a *_free yourself.

Download files

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

Source Distribution

rockbox_ffi-0.4.0.tar.gz (14.5 kB view details)

Uploaded Source

Built Distributions

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

rockbox_ffi-0.4.0-py3-none-manylinux_2_38_x86_64.whl (2.4 MB view details)

Uploaded Python 3manylinux: glibc 2.38+ x86-64

rockbox_ffi-0.4.0-py3-none-manylinux_2_38_aarch64.whl (2.5 MB view details)

Uploaded Python 3manylinux: glibc 2.38+ ARM64

rockbox_ffi-0.4.0-py3-none-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

rockbox_ffi-0.4.0-py3-none-macosx_10_12_x86_64.whl (2.2 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file rockbox_ffi-0.4.0.tar.gz.

File metadata

  • Download URL: rockbox_ffi-0.4.0.tar.gz
  • Upload date:
  • Size: 14.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for rockbox_ffi-0.4.0.tar.gz
Algorithm Hash digest
SHA256 8ea4cefdcf20d7d9e82e5c5cceef84eef1c21885f2ee9c64152a7289883dca29
MD5 128eacd9b06a87c66a506e732b2e096d
BLAKE2b-256 742ad5b1ba0c06f151c3df5bb961633021b7b45c67b892fc85b65468cb631222

See more details on using hashes here.

File details

Details for the file rockbox_ffi-0.4.0-py3-none-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for rockbox_ffi-0.4.0-py3-none-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 5df34482a541b1db99cee6c2dd14daa18d3d232ab668315f1a7b04cec14ae205
MD5 f3cca02c7b44fdf79225f0147069f5bf
BLAKE2b-256 758ad99e66b72a2f04d4163ba63c0f563a5221dbc59fc6aab6ac87b5b6ce3456

See more details on using hashes here.

File details

Details for the file rockbox_ffi-0.4.0-py3-none-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for rockbox_ffi-0.4.0-py3-none-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 a62c2565d84d8a8ed6c03ab8426cae0ba513cfbd8304c1ffd788f287164970ec
MD5 f432f9bd2422247c72fd41581b15c49c
BLAKE2b-256 a70cd097eaa7901dfb88fd5342ca75b6f8a1b598c7eba77ce0bc138db31f7a86

See more details on using hashes here.

File details

Details for the file rockbox_ffi-0.4.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rockbox_ffi-0.4.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ffb542fa1a4df300ca5cb94bffdd7fa6f230be164b81e267117737f4f5212055
MD5 9ad222efef922b83e3436a2a42afbb7d
BLAKE2b-256 a6d8f4095648d40c4caabc32e700ab86bd06c77d2fe684186a1bdb480d66f3a7

See more details on using hashes here.

File details

Details for the file rockbox_ffi-0.4.0-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rockbox_ffi-0.4.0-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f53ad390dd7f611ed7725d188b8b557237a16a536a7206aabc97b946957b5cc6
MD5 354e2ec718c7da575345238e1d9c296f
BLAKE2b-256 fd15b6ce178e0af4c17f5c8fd86037c04163a5f0469cb83f7b1ede6391cf8ffc

See more details on using hashes here.

Release history Release notifications | RSS feed

0.6.0

5 files

0.5.1

5 files

0.5.0

5 files

This release

0.4.0 This release

5 files

0.3.0

5 files

0.2.0

5 files

0.1.2

5 files

0.1.0

6 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page