audiodsp

audiodsp — CircuitPython-compatible audio for MicroPython and CPython.

audiodsp CircuitPython's audio system (audiocore, synthio, audiomixer, effects, audiomp3) ported to MicroPython and CPython, extending CircuitPython along the way: dynamics, routing, convolution, and offline rendering. On PyPI as pydevices-audiodsp; the instrument and effect libraries built on it are audioinstruments and audioeffects.

Live Pure-Python Device

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 CPython
import 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-23

audiodsp 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 repository

Newcomer'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.