audioif
CircuitPython's audio system for MicroPython and CPython — audiocore,
audiomixer, synthio (including MidiTrack), the effects modules
(audiofilters, audiodelays, audiofreeverb, audiospeed), audiomp3,
and CircuitPython play()/stop()/pause()/resume() output semantics.
Import names stay audiocore/synthio/etc., matching CircuitPython for
source compatibility.
Five things here are not CircuitPython's. audiodynamics (compression,
limiting, expansion, gating, transient shaping) and audioroute (fan one
stream out to parallel branches) come from micropython-vst3's audio engine,
which had them and CircuitPython does not; audiomath (multiply one stream by
another — ring and amplitude modulation), audioecho (a delay with a
filter, a soft-clip and a cross-feed inside its feedback loop) and
audioconvolve (apply a measured or synthesized impulse response, by
partitioned FFT) have no ancestor anywhere and are audioif's own.
apply_cp_patches.sh adds all five to a CircuitPython tree too. And lib/audioinstruments/ is a pure-Python library of
53 classic synthesizers, keyboards and drum machines built entirely out of
synthio — no samples — with a MIDI-shaped API:
import audioinstruments
inst = audioinstruments.create("tr808", 48000)
inst.note_on(36) # bass drum, full velocity
inst.set_macro(2, 96) # BD Tune, on the 0-127 scale
audio_out.play(inst.output)
Two more pure-Python tiers sit on top of it. lib/audioeffects/ is 43 effect
classes — compressors, delays, reverbs, EQ, modulation, pitch — each taking a
source and exposing its chain tail as .output. lib/audiorender/ renders a
whole composition offline: tracks, tempo map, notes and automation in, a mixed
stereo master and a level report out. Each has its own README.
audiorender is the one part of this repository written for a desktop rather
than a board — numpy throughout, a whole song in memory — so it ships in the
wheel and is never frozen into firmware.
MicroPython consumes this repository as USER_C_MODULES. CPython 3.10+
installs the separately versioned native distribution from TestPyPI:
python -m pip install --index-url https://test.pypi.org/simple/ pydevices-audioif
The CPython distribution contains audiocore, synthio, audiomixer,
audiofilters, audiodelays, audiofreeverb, audiospeed, audiodynamics,
audioroute, audiomath, audioecho, audioconvolve, and the
audioinstruments,
audioeffects and audiorender packages. audiomp3 remains
firmware-only. The distribution has no runtime dependencies and does not
publish an audioif import; its version is the VERSION file, which is also
what _audioif.__version__ reports.
MicroPython status: all module tiers ported and oracle-diffed byte-for-byte against
bin/circuitpython on unix; DSP parity re-verified on windows and wasm;
built and measured on two real mcu targets, ESP32-P4 (hardware-confirmed
by ear) and RP2040 (build-only). See
docs/porting-plan.md for the full phased history
and docs/upstream-diff.md for every deliberate
deviation from upstream CircuitPython.
CPython status: the public surface and wheel plumbing are present, and the committed synthesis, mixer, MIDI, streaming, and effects fixtures match CircuitPython 10.2.1 PCM byte-for-byte. Import/API smoke success is not used as a substitute for those oracle comparisons.
ulab and cmods/mp3 (the vendored Adafruit_MP3/Helix decoder audiomp3
depends on, RPSL/RCSL-licensed — not MIT, carried unmodified per upstream's
own terms) are consumed as cloned sibling dependencies, same pattern as
pygraphics/displayif, not vendored into this repo.
The playback-facing pull protocol (audiocore.get_buffer/reset_buffer)
is consumed by pydevices' lib/audiodev package
(AudioOut in sample_out.py), which pumps any audiosample into any of
audiodev's existing push-PCM transports (sdl2/win/wasm/i2s/emulated) —
see that package's own docs for the playback-side contract this repo's
protocol implementation is built to satisfy.
Acceptance target: todbot's
synthtools running
unmodified, with rendered PCM diffed against bin/circuitpython's own
unix coverage build (which already contains the entire DSP stack — the
parity oracle for this whole port).
See docs/porting-plan.md for the architecture, module tiers, phased plan, and testing strategy.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pydevices_audioif-0.0.4-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 247.1 kB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65bd5ff908438883f67dbb03b190a07d2ac548d0740bdff51dc2096353102650
|
|
| MD5 |
93bddfd3a9ca4f3a96f4fec9102c40d2
|
|
| BLAKE2b-256 |
47c3c1883e100e7449d5d2e47d3af08af133a7498c9f4954bd09c580e5585b8f
|
File details
Details for the file pydevices_audioif-0.0.4-cp314-cp314-pyemscripten_2026_0_wasm32.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp314-cp314-pyemscripten_2026_0_wasm32.whl
- Upload date:
- Size: 226.9 kB
- Tags: CPython 3.14, PyEmscripten 2026.0 wasm32
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d121bc05abf5033ac7e5d9d610c7d170c13bf2d2f7b0268014a4fdabaa8f06f8
|
|
| MD5 |
582be190b04cb1ff8ada6b912c86e96a
|
|
| BLAKE2b-256 |
5b66011479f118fdee78ef30925d76b82c83b0a48aa332c5d3cb11d4cf31bb2e
|
File details
Details for the file pydevices_audioif-0.0.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
- Upload date:
- Size: 334.1 kB
- Tags: CPython 3.14, manylinux: glibc 2.28+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5cc816346442b60bcaaab4eb3f26e472b3cf8f7d482772427db75a1d44cbd12e
|
|
| MD5 |
8a85d3178391609943eb38209776c157
|
|
| BLAKE2b-256 |
5d84003926184fcc403265084b94c6b84e045dafa2bbae9079e191b7cdff522b
|
File details
Details for the file pydevices_audioif-0.0.4-cp314-cp314-android_21_x86_64.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp314-cp314-android_21_x86_64.whl
- Upload date:
- Size: 251.2 kB
- Tags: Android API level 21+ x86-64, CPython 3.14
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
537799d38cf6ec957e4af46425315ad7c47a7966e5206160d8670ff698601825
|
|
| MD5 |
61a0d5c39af5f0934b53f4ab00e5824c
|
|
| BLAKE2b-256 |
738ab39d264e157b6c8239ecd1f14207caddfd44ee658b54e729e2bdfb7caffa
|
File details
Details for the file pydevices_audioif-0.0.4-cp314-cp314-android_21_arm64_v8a.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp314-cp314-android_21_arm64_v8a.whl
- Upload date:
- Size: 248.3 kB
- Tags: Android API level 21+ ARM64 v8a, CPython 3.14
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f899f1bfb4d9969b29ba9aa2ed684be52d0e59c5e2480dfb2cece80641e724c
|
|
| MD5 |
e77e4b5552d54d9c5019427109d391f5
|
|
| BLAKE2b-256 |
98cecfb9a58f752b60706bc19f5c4595326935be13da18b51aab656115a01c82
|
File details
Details for the file pydevices_audioif-0.0.4-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 245.8 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2828ed296434cc49e488bbfbd0a9f6be4c34b29f32e51594ad41629d71f8b60
|
|
| MD5 |
31a0a1f60798ce5039bd966ed9457418
|
|
| BLAKE2b-256 |
5af61f1affe05efafd7a4fbc690056591a1a91ddf70e7d61d047c402f3efa5f7
|
File details
Details for the file pydevices_audioif-0.0.4-cp313-cp313-pyemscripten_2025_0_wasm32.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp313-cp313-pyemscripten_2025_0_wasm32.whl
- Upload date:
- Size: 226.9 kB
- Tags: CPython 3.13, PyEmscripten 2025.0 wasm32
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c3a62e7337e895d9afd22eed7262b4c5ebe4ee60d569178701b7eaeba213110
|
|
| MD5 |
b769207388e53374c0a44970d941505d
|
|
| BLAKE2b-256 |
468ab793467051f989c20b00999452afc056307f62d0155854ab487525159008
|
File details
Details for the file pydevices_audioif-0.0.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
- Upload date:
- Size: 334.2 kB
- Tags: CPython 3.13, manylinux: glibc 2.28+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
064af409f8f7e4d51db1fdb609b59b33375e654afa017a9228d9c49608ade785
|
|
| MD5 |
61bce9ef7fbb55bf8b5c2f29bacec048
|
|
| BLAKE2b-256 |
78cedf3b60a5beebb049e72004b2caea5117096e8ad909b23b9533da3592134e
|
File details
Details for the file pydevices_audioif-0.0.4-cp313-cp313-android_21_x86_64.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp313-cp313-android_21_x86_64.whl
- Upload date:
- Size: 251.2 kB
- Tags: Android API level 21+ x86-64, CPython 3.13
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9bb362fe43ae8c6ab497adf64197cd9b81f3869ff5ff1f04e5f6f56c7216aca3
|
|
| MD5 |
e8d7e29d03e6f8fee5c79dcac8ee6d6e
|
|
| BLAKE2b-256 |
b2fe0d5e4b5a335ce1be3d4ecd426e1d3c14d9a10f9bd702a6058e21b2ed0dd8
|
File details
Details for the file pydevices_audioif-0.0.4-cp313-cp313-android_21_arm64_v8a.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp313-cp313-android_21_arm64_v8a.whl
- Upload date:
- Size: 248.3 kB
- Tags: Android API level 21+ ARM64 v8a, CPython 3.13
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cbff8c8e40833a26a2706dc4cc11fc8ba5e2354cb44871c3833add36dc73ebf5
|
|
| MD5 |
352561655423691f71509848c404bfb5
|
|
| BLAKE2b-256 |
0366a84cc9bfcea403adb0ca22f17f9a9383f2a36651b33314af02a1982f9c05
|
File details
Details for the file pydevices_audioif-0.0.4-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 245.8 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35318db82a65bac4e2fe47f190bdba02a328fc3dc3674f925478c5f9470600a5
|
|
| MD5 |
6ba92a709e2dc8fca87ee0e7ec7bf013
|
|
| BLAKE2b-256 |
2f85b8494ef800e7b35549b96d2caa3f97231fecf700328172f43a47fcc6bf70
|
File details
Details for the file pydevices_audioif-0.0.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
- Upload date:
- Size: 334.2 kB
- Tags: CPython 3.12, manylinux: glibc 2.28+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
916c9ddd8de5df678c6c3865aeaa54e2937dbd72a9b1584fab2a998ec7953233
|
|
| MD5 |
f23acd4f8e8ea829fe214e2182afc69e
|
|
| BLAKE2b-256 |
dfe11b9cd1ed385af1f9e38f6371ae21d89a54839fc8f5828b736f9fe0d1b7b4
|
File details
Details for the file pydevices_audioif-0.0.4-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 245.8 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9676e1ede0f1b6af9352e5a9f3723ded93aaf3c8312662debadfcf783da5768a
|
|
| MD5 |
ab251d4882580a8703b3c1358f8bd516
|
|
| BLAKE2b-256 |
6c801c7034fd1d9a768f46b530071007b74a7924c79e4569caa096d27c16b301
|
File details
Details for the file pydevices_audioif-0.0.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
- Upload date:
- Size: 334.2 kB
- Tags: CPython 3.11, manylinux: glibc 2.28+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a87e5f04a5522a7e1e5ad737dfb15332e475115f6fe78bc42cd5029d036230c
|
|
| MD5 |
19ade4a607a76ec85bde0b0a101e4fce
|
|
| BLAKE2b-256 |
28252ea7c0272b05c31cf4a5d3b230151b2cbab3866c26604e615d001b8432c7
|
File details
Details for the file pydevices_audioif-0.0.4-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 245.7 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1bd48f2cedc19b49a4a82431b2e488d3e49a17342622d8a1b52a93f117c8ad0
|
|
| MD5 |
2eb1cfed84a5e49a3043d5490d366a8d
|
|
| BLAKE2b-256 |
c071903722ae8a34c1013341dbdbbe6f5ec3ce0efb364fc56927918e8b0b0ebe
|
File details
Details for the file pydevices_audioif-0.0.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.
File metadata
- Download URL: pydevices_audioif-0.0.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
- Upload date:
- Size: 332.4 kB
- Tags: CPython 3.10, manylinux: glibc 2.28+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f77004fd3baee7baa2665973ec67f669698f90c35b6972f1ee5530877aed879f
|
|
| MD5 |
32ae26e20656eb98af45515cafa702c1
|
|
| BLAKE2b-256 |
3e26d6e1f54d15fce45da3840ede688978b0f5a0670abcd54b213b0ccde2dc4a
|