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.3.0.tar.gz (13.6 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.3.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.3.0-py3-none-manylinux_2_38_aarch64.whl (2.5 MB view details)

Uploaded Python 3manylinux: glibc 2.38+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

rockbox_ffi-0.3.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.3.0.tar.gz.

File metadata

  • Download URL: rockbox_ffi-0.3.0.tar.gz
  • Upload date:
  • Size: 13.6 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.3.0.tar.gz
Algorithm Hash digest
SHA256 7644ebee71c893faee330fb136e0208326a60d79a4a4823cdaa9d6be54f91f9c
MD5 9b36a2f3e23a0e4755deb24b56f31765
BLAKE2b-256 c51b51eb4a2c3d378b4bcec2c5f57c5477c5c11c54cc8273ece18688fc840167

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rockbox_ffi-0.3.0-py3-none-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 cf444bcbe258d14a05872cddc13828f874245f1e322836798f3737e697722396
MD5 4384c9848749bf939abd2c61761a952c
BLAKE2b-256 847fc0137b002670d649e6755548f4b6915a6a6285102e37fe44bace0b25003d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rockbox_ffi-0.3.0-py3-none-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 1c401da7402d77408b823bc46c1f5cb989bc97c19d3ff8b807ef863c5ccd9628
MD5 26bc80b662289aef4e6caa83604bf9a4
BLAKE2b-256 efe9ce05c9f7e7a6163824fb733af8e38fa0674c740ddb0db62f1517c7ec9710

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rockbox_ffi-0.3.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c4f92f55801fa3e8b1cfa025b99a552728242f8cc8ea04931017242fb3e2d511
MD5 4f506111134e277cc8a78d0a3ae893f9
BLAKE2b-256 c853d9acac83eb6f6c4d943176d427a9a5548cfdbbb7416463898f278c2e36ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rockbox_ffi-0.3.0-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 797e011e355beedbf294f9f1f6bd41ecaf5205c930445ca966153dd8ccd6bae9
MD5 fe6ee43a19414c914980f78a0aa29235
BLAKE2b-256 e4839fbfa655778b1befef1e9adaa6adc30661988b96919e7e5344bc0031d0b0

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

0.4.0

5 files

This release

0.3.0 This release

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