Skip to main content

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

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pydevices_audioif-0.0.4-cp314-cp314-win_amd64.whl (247.1 kB view details)

Uploaded CPython 3.14Windows x86-64

pydevices_audioif-0.0.4-cp314-cp314-pyemscripten_2026_0_wasm32.whl (226.9 kB view details)

Uploaded CPython 3.14PyEmscripten 2026.0 wasm32

pydevices_audioif-0.0.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (334.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

pydevices_audioif-0.0.4-cp314-cp314-android_21_x86_64.whl (251.2 kB view details)

Uploaded Android API level 21+ x86-64CPython 3.14

pydevices_audioif-0.0.4-cp314-cp314-android_21_arm64_v8a.whl (248.3 kB view details)

Uploaded Android API level 21+ ARM64 v8aCPython 3.14

pydevices_audioif-0.0.4-cp313-cp313-win_amd64.whl (245.8 kB view details)

Uploaded CPython 3.13Windows x86-64

pydevices_audioif-0.0.4-cp313-cp313-pyemscripten_2025_0_wasm32.whl (226.9 kB view details)

Uploaded CPython 3.13PyEmscripten 2025.0 wasm32

pydevices_audioif-0.0.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (334.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

pydevices_audioif-0.0.4-cp313-cp313-android_21_x86_64.whl (251.2 kB view details)

Uploaded Android API level 21+ x86-64CPython 3.13

pydevices_audioif-0.0.4-cp313-cp313-android_21_arm64_v8a.whl (248.3 kB view details)

Uploaded Android API level 21+ ARM64 v8aCPython 3.13

pydevices_audioif-0.0.4-cp312-cp312-win_amd64.whl (245.8 kB view details)

Uploaded CPython 3.12Windows x86-64

pydevices_audioif-0.0.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (334.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

pydevices_audioif-0.0.4-cp311-cp311-win_amd64.whl (245.8 kB view details)

Uploaded CPython 3.11Windows x86-64

pydevices_audioif-0.0.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (334.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

pydevices_audioif-0.0.4-cp310-cp310-win_amd64.whl (245.7 kB view details)

Uploaded CPython 3.10Windows x86-64

pydevices_audioif-0.0.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (332.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

File details

Details for the file pydevices_audioif-0.0.4-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for pydevices_audioif-0.0.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 65bd5ff908438883f67dbb03b190a07d2ac548d0740bdff51dc2096353102650
MD5 93bddfd3a9ca4f3a96f4fec9102c40d2
BLAKE2b-256 47c3c1883e100e7449d5d2e47d3af08af133a7498c9f4954bd09c580e5585b8f

See more details on using hashes here.

File details

Details for the file pydevices_audioif-0.0.4-cp314-cp314-pyemscripten_2026_0_wasm32.whl.

File metadata

File hashes

Hashes for pydevices_audioif-0.0.4-cp314-cp314-pyemscripten_2026_0_wasm32.whl
Algorithm Hash digest
SHA256 d121bc05abf5033ac7e5d9d610c7d170c13bf2d2f7b0268014a4fdabaa8f06f8
MD5 582be190b04cb1ff8ada6b912c86e96a
BLAKE2b-256 5b66011479f118fdee78ef30925d76b82c83b0a48aa332c5d3cb11d4cf31bb2e

See more details on using hashes here.

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

File hashes

Hashes for pydevices_audioif-0.0.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 5cc816346442b60bcaaab4eb3f26e472b3cf8f7d482772427db75a1d44cbd12e
MD5 8a85d3178391609943eb38209776c157
BLAKE2b-256 5d84003926184fcc403265084b94c6b84e045dafa2bbae9079e191b7cdff522b

See more details on using hashes here.

File details

Details for the file pydevices_audioif-0.0.4-cp314-cp314-android_21_x86_64.whl.

File metadata

File hashes

Hashes for pydevices_audioif-0.0.4-cp314-cp314-android_21_x86_64.whl
Algorithm Hash digest
SHA256 537799d38cf6ec957e4af46425315ad7c47a7966e5206160d8670ff698601825
MD5 61a0d5c39af5f0934b53f4ab00e5824c
BLAKE2b-256 738ab39d264e157b6c8239ecd1f14207caddfd44ee658b54e729e2bdfb7caffa

See more details on using hashes here.

File details

Details for the file pydevices_audioif-0.0.4-cp314-cp314-android_21_arm64_v8a.whl.

File metadata

File hashes

Hashes for pydevices_audioif-0.0.4-cp314-cp314-android_21_arm64_v8a.whl
Algorithm Hash digest
SHA256 5f899f1bfb4d9969b29ba9aa2ed684be52d0e59c5e2480dfb2cece80641e724c
MD5 e77e4b5552d54d9c5019427109d391f5
BLAKE2b-256 98cecfb9a58f752b60706bc19f5c4595326935be13da18b51aab656115a01c82

See more details on using hashes here.

File details

Details for the file pydevices_audioif-0.0.4-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for pydevices_audioif-0.0.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f2828ed296434cc49e488bbfbd0a9f6be4c34b29f32e51594ad41629d71f8b60
MD5 31a0a1f60798ce5039bd966ed9457418
BLAKE2b-256 5af61f1affe05efafd7a4fbc690056591a1a91ddf70e7d61d047c402f3efa5f7

See more details on using hashes here.

File details

Details for the file pydevices_audioif-0.0.4-cp313-cp313-pyemscripten_2025_0_wasm32.whl.

File metadata

File hashes

Hashes for pydevices_audioif-0.0.4-cp313-cp313-pyemscripten_2025_0_wasm32.whl
Algorithm Hash digest
SHA256 9c3a62e7337e895d9afd22eed7262b4c5ebe4ee60d569178701b7eaeba213110
MD5 b769207388e53374c0a44970d941505d
BLAKE2b-256 468ab793467051f989c20b00999452afc056307f62d0155854ab487525159008

See more details on using hashes here.

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

File hashes

Hashes for pydevices_audioif-0.0.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 064af409f8f7e4d51db1fdb609b59b33375e654afa017a9228d9c49608ade785
MD5 61bce9ef7fbb55bf8b5c2f29bacec048
BLAKE2b-256 78cedf3b60a5beebb049e72004b2caea5117096e8ad909b23b9533da3592134e

See more details on using hashes here.

File details

Details for the file pydevices_audioif-0.0.4-cp313-cp313-android_21_x86_64.whl.

File metadata

File hashes

Hashes for pydevices_audioif-0.0.4-cp313-cp313-android_21_x86_64.whl
Algorithm Hash digest
SHA256 9bb362fe43ae8c6ab497adf64197cd9b81f3869ff5ff1f04e5f6f56c7216aca3
MD5 e8d7e29d03e6f8fee5c79dcac8ee6d6e
BLAKE2b-256 b2fe0d5e4b5a335ce1be3d4ecd426e1d3c14d9a10f9bd702a6058e21b2ed0dd8

See more details on using hashes here.

File details

Details for the file pydevices_audioif-0.0.4-cp313-cp313-android_21_arm64_v8a.whl.

File metadata

File hashes

Hashes for pydevices_audioif-0.0.4-cp313-cp313-android_21_arm64_v8a.whl
Algorithm Hash digest
SHA256 cbff8c8e40833a26a2706dc4cc11fc8ba5e2354cb44871c3833add36dc73ebf5
MD5 352561655423691f71509848c404bfb5
BLAKE2b-256 0366a84cc9bfcea403adb0ca22f17f9a9383f2a36651b33314af02a1982f9c05

See more details on using hashes here.

File details

Details for the file pydevices_audioif-0.0.4-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for pydevices_audioif-0.0.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 35318db82a65bac4e2fe47f190bdba02a328fc3dc3674f925478c5f9470600a5
MD5 6ba92a709e2dc8fca87ee0e7ec7bf013
BLAKE2b-256 2f85b8494ef800e7b35549b96d2caa3f97231fecf700328172f43a47fcc6bf70

See more details on using hashes here.

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

File hashes

Hashes for pydevices_audioif-0.0.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 916c9ddd8de5df678c6c3865aeaa54e2937dbd72a9b1584fab2a998ec7953233
MD5 f23acd4f8e8ea829fe214e2182afc69e
BLAKE2b-256 dfe11b9cd1ed385af1f9e38f6371ae21d89a54839fc8f5828b736f9fe0d1b7b4

See more details on using hashes here.

File details

Details for the file pydevices_audioif-0.0.4-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for pydevices_audioif-0.0.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9676e1ede0f1b6af9352e5a9f3723ded93aaf3c8312662debadfcf783da5768a
MD5 ab251d4882580a8703b3c1358f8bd516
BLAKE2b-256 6c801c7034fd1d9a768f46b530071007b74a7924c79e4569caa096d27c16b301

See more details on using hashes here.

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

File hashes

Hashes for pydevices_audioif-0.0.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 1a87e5f04a5522a7e1e5ad737dfb15332e475115f6fe78bc42cd5029d036230c
MD5 19ade4a607a76ec85bde0b0a101e4fce
BLAKE2b-256 28252ea7c0272b05c31cf4a5d3b230151b2cbab3866c26604e615d001b8432c7

See more details on using hashes here.

File details

Details for the file pydevices_audioif-0.0.4-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for pydevices_audioif-0.0.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e1bd48f2cedc19b49a4a82431b2e488d3e49a17342622d8a1b52a93f117c8ad0
MD5 2eb1cfed84a5e49a3043d5490d366a8d
BLAKE2b-256 c071903722ae8a34c1013341dbdbbe6f5ec3ce0efb364fc56927918e8b0b0ebe

See more details on using hashes here.

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

File hashes

Hashes for pydevices_audioif-0.0.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 f77004fd3baee7baa2665973ec67f669698f90c35b6972f1ee5530877aed879f
MD5 32ae26e20656eb98af45515cafa702c1
BLAKE2b-256 3e26d6e1f54d15fce45da3840ede688978b0f5a0670abcd54b213b0ccde2dc4a

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.0.4 This release

16 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