Install
PyPI for CPython, one manifest line for firmware# CPython 3.11+ on Linux, Windows, macOS (Apple silicon) and Android
pip install pydevices-audiodsp
# MicroPython 1.29 firmware: clone it, fetch its two pinned dependencies...
git clone https://github.com/PyDevices/audiodsp
audiodsp/scripts/fetch_deps.sh
# ...then add one line to the manifest your build already uses
include("/path/to/audiodsp/manifest.py")
The include brings in the C modules and ulab, so a firmware with audiodsp has ulab.numpy too. audiomp3 is firmware-only. Your own FROZEN_MANIFEST and builds older than 1.29 are covered in the README.
Try this first
One block from a CircuitPython synthesizer, in plain CPythonimport audiocore
import synthio
synth = synthio.Synthesizer(sample_rate=8_000)
synth.press(69) # A above middle C
status, block = audiocore.get_buffer(synth)
The module names are CircuitPython's, so CircuitPython audio code imports unchanged. block is one rendered buffer; on a board, a mixer, the audio pump or audiodev pulls the same graph continuously. For instruments you can play, add audioinstruments and audioeffects on top.
New in 0.6.0
2026-09-23audiodsp is on production PyPI now, so pip install needs no index flags. A firmware build names ulab through audiodsp's own manifest, so one include line brings both. Everything else is in the changelog.
Read more
Depth lives in the repositoryNewcomer's guide
The runtime map: which module lives where, and what runs on a board versus a desktop.
Architecture
Module tiers, the shared C core, and how it is tested against CircuitPython.
Correctness standard
Why a setting written in Python goes through float32, and what the gates measure.
Audio in pydevices
How audiodev plays an audiodsp graph on a board.