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.
Metadata
Release files for pydevices-audioif 0.0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 4.4 MB
Release files / pydevices_audioif-0.0.4-cp314-cp314-win_amd64.whl
| Download URL | pydevices_audioif-0.0.4-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 247.1 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
65bd5ff908438883f67dbb03b190a07d2ac548d0740bdff51dc2096353102650
|
|
BLAKE2b-256 checksum How to use checksums |
47c3c1883e100e7449d5d2e47d3af08af133a7498c9f4954bd09c580e5585b8f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp314-cp314-pyemscripten_2026_0_wasm32.whl
| Download URL | pydevices_audioif-0.0.4-cp314-cp314-pyemscripten_2026_0_wasm32.whl |
|---|---|
| Size | 226.9 kB |
| Tags | CPython 3.14 PyEmscripten 2026.0+ WebAssembly |
|
SHA-256 checksum How to use checksums |
d121bc05abf5033ac7e5d9d610c7d170c13bf2d2f7b0268014a4fdabaa8f06f8
|
|
BLAKE2b-256 checksum How to use checksums |
5b66011479f118fdee78ef30925d76b82c83b0a48aa332c5d3cb11d4cf31bb2e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
| Download URL | pydevices_audioif-0.0.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl |
|---|---|
| Size | 334.1 kB |
| Tags | CPython 3.14 Linux glibc 2.28+ x86-64 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
5cc816346442b60bcaaab4eb3f26e472b3cf8f7d482772427db75a1d44cbd12e
|
|
BLAKE2b-256 checksum How to use checksums |
5d84003926184fcc403265084b94c6b84e045dafa2bbae9079e191b7cdff522b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp314-cp314-android_21_x86_64.whl
| Download URL | pydevices_audioif-0.0.4-cp314-cp314-android_21_x86_64.whl |
|---|---|
| Size | 251.2 kB |
| Tags | Android API level 21+ x86-64 CPython 3.14 |
|
SHA-256 checksum How to use checksums |
537799d38cf6ec957e4af46425315ad7c47a7966e5206160d8670ff698601825
|
|
BLAKE2b-256 checksum How to use checksums |
738ab39d264e157b6c8239ecd1f14207caddfd44ee658b54e729e2bdfb7caffa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp314-cp314-android_21_arm64_v8a.whl
| Download URL | pydevices_audioif-0.0.4-cp314-cp314-android_21_arm64_v8a.whl |
|---|---|
| Size | 248.3 kB |
| Tags | Android API level 21+ ARM64 v8a CPython 3.14 |
|
SHA-256 checksum How to use checksums |
5f899f1bfb4d9969b29ba9aa2ed684be52d0e59c5e2480dfb2cece80641e724c
|
|
BLAKE2b-256 checksum How to use checksums |
98cecfb9a58f752b60706bc19f5c4595326935be13da18b51aab656115a01c82
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp313-cp313-win_amd64.whl
| Download URL | pydevices_audioif-0.0.4-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 245.8 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f2828ed296434cc49e488bbfbd0a9f6be4c34b29f32e51594ad41629d71f8b60
|
|
BLAKE2b-256 checksum How to use checksums |
5af61f1affe05efafd7a4fbc690056591a1a91ddf70e7d61d047c402f3efa5f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp313-cp313-pyemscripten_2025_0_wasm32.whl
| Download URL | pydevices_audioif-0.0.4-cp313-cp313-pyemscripten_2025_0_wasm32.whl |
|---|---|
| Size | 226.9 kB |
| Tags | CPython 3.13 PyEmscripten 2025.0+ WebAssembly |
|
SHA-256 checksum How to use checksums |
9c3a62e7337e895d9afd22eed7262b4c5ebe4ee60d569178701b7eaeba213110
|
|
BLAKE2b-256 checksum How to use checksums |
468ab793467051f989c20b00999452afc056307f62d0155854ab487525159008
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
| Download URL | pydevices_audioif-0.0.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl |
|---|---|
| Size | 334.2 kB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
064af409f8f7e4d51db1fdb609b59b33375e654afa017a9228d9c49608ade785
|
|
BLAKE2b-256 checksum How to use checksums |
78cedf3b60a5beebb049e72004b2caea5117096e8ad909b23b9533da3592134e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp313-cp313-android_21_x86_64.whl
| Download URL | pydevices_audioif-0.0.4-cp313-cp313-android_21_x86_64.whl |
|---|---|
| Size | 251.2 kB |
| Tags | Android API level 21+ x86-64 CPython 3.13 |
|
SHA-256 checksum How to use checksums |
9bb362fe43ae8c6ab497adf64197cd9b81f3869ff5ff1f04e5f6f56c7216aca3
|
|
BLAKE2b-256 checksum How to use checksums |
b2fe0d5e4b5a335ce1be3d4ecd426e1d3c14d9a10f9bd702a6058e21b2ed0dd8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp313-cp313-android_21_arm64_v8a.whl
| Download URL | pydevices_audioif-0.0.4-cp313-cp313-android_21_arm64_v8a.whl |
|---|---|
| Size | 248.3 kB |
| Tags | Android API level 21+ ARM64 v8a CPython 3.13 |
|
SHA-256 checksum How to use checksums |
cbff8c8e40833a26a2706dc4cc11fc8ba5e2354cb44871c3833add36dc73ebf5
|
|
BLAKE2b-256 checksum How to use checksums |
0366a84cc9bfcea403adb0ca22f17f9a9383f2a36651b33314af02a1982f9c05
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp312-cp312-win_amd64.whl
| Download URL | pydevices_audioif-0.0.4-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 245.8 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
35318db82a65bac4e2fe47f190bdba02a328fc3dc3674f925478c5f9470600a5
|
|
BLAKE2b-256 checksum How to use checksums |
2f85b8494ef800e7b35549b96d2caa3f97231fecf700328172f43a47fcc6bf70
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
| Download URL | pydevices_audioif-0.0.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl |
|---|---|
| Size | 334.2 kB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
916c9ddd8de5df678c6c3865aeaa54e2937dbd72a9b1584fab2a998ec7953233
|
|
BLAKE2b-256 checksum How to use checksums |
dfe11b9cd1ed385af1f9e38f6371ae21d89a54839fc8f5828b736f9fe0d1b7b4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp311-cp311-win_amd64.whl
| Download URL | pydevices_audioif-0.0.4-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 245.8 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9676e1ede0f1b6af9352e5a9f3723ded93aaf3c8312662debadfcf783da5768a
|
|
BLAKE2b-256 checksum How to use checksums |
6c801c7034fd1d9a768f46b530071007b74a7924c79e4569caa096d27c16b301
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
| Download URL | pydevices_audioif-0.0.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl |
|---|---|
| Size | 334.2 kB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
1a87e5f04a5522a7e1e5ad737dfb15332e475115f6fe78bc42cd5029d036230c
|
|
BLAKE2b-256 checksum How to use checksums |
28252ea7c0272b05c31cf4a5d3b230151b2cbab3866c26604e615d001b8432c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp310-cp310-win_amd64.whl
| Download URL | pydevices_audioif-0.0.4-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 245.7 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e1bd48f2cedc19b49a4a82431b2e488d3e49a17342622d8a1b52a93f117c8ad0
|
|
BLAKE2b-256 checksum How to use checksums |
c071903722ae8a34c1013341dbdbbe6f5ec3ce0efb364fc56927918e8b0b0ebe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_audioif-0.0.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
| Download URL | pydevices_audioif-0.0.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl |
|---|---|
| Size | 332.4 kB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
f77004fd3baee7baa2665973ec67f669698f90c35b6972f1ee5530877aed879f
|
|
BLAKE2b-256 checksum How to use checksums |
3e26d6e1f54d15fce45da3840ede688978b0f5a0670abcd54b213b0ccde2dc4a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Security for pydevices-audioif 0.0.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.