
libpo32
Loud82/100C99 library for PO-32 acoustic transfers and drum synthesis.
libpo32 is custom firmware for the Teenage Engineering PO-32 tonic, by @ericlewis. Open source under MIT, latest release 1.0.0 (November 2026), 212 stars on GitHub.
forTeenage Engineering PO-32 tonic·by@ericlewis
Unclaimed. Is this yours? Sign in with GitHub as @ericlewis to claim it.
No release files yet. Build from source.
MIT· ericlewis/libpo·downloads come from the creator’s GitHub releases
1.0.0Latest0 files
What's Changed
- docs(readme): add downstream projects section by @ericlewis in https://github.com/ericlewis/libpo/pull/19
- docs(changelog): scope 0.3.0 Fixed to user-visible fixes by @ericlewis in https://github.com/ericlewis/libpo/pull/21
- fix(synth): correct parameter maps and stabilize pitch modulation by @ericlewis in https://github.com/ericlewis/libpo/pull/22
- feat: add support for PO-33, PO-35, PO-133, PO-137 by @ericlewis in https://github.com/ericlewis/libpo/pull/23
- feat: expose all libpo model families in one go module by @ericlewis in https://github.com/ericlewis/libpo/pull/24
- docs: cover PO-32, PO-33/133 and PO-35/137 workflows by @ericlewis in https://github.com/ericlewis/libpo/pull/25
Full Changelog: https://github.com/ericlewis/libpo/compare/0.3.0...1.0.0
0.3.00 files
What's Changed
- chore: move core implementation into core/ directory by @ericlewis in https://github.com/ericlewis/libpo32/pull/5
- fix: extreme-exponent handling in strtof import by @ericlewis in https://github.com/ericlewis/libpo32/pull/4
- feat(go): add Go bindings for the full public API by @ericlewis in https://github.com/ericlewis/libpo32/pull/6
- fix(core): improve allocation checks and float limit by @ericlewis in https://github.com/ericlewis/libpo32/pull/9
- feat(core): expose streaming audio APIs by @ericlewis in https://github.com/ericlewis/libpo32/pull/8
- fix(core): decode frames with no trailing silence by @ericlewis in https://github.com/ericlewis/libpo32/pull/13
- fix(synth): guard zero sample rate and invalid durations by @ericlewis in https://github.com/ericlewis/libpo32/pull/16
- fix(dpsk): hold carrier at unit magnitude by @ericlewis in https://github.com/ericlewis/libpo32/pull/15
- ci(format): fail on clang-format version mismatch by @ericlewis in https://github.com/ericlewis/libpo32/pull/14
- fix(go): support large decoded frames and signal early-stop parse by @ericlewis in https://github.com/ericlewis/libpo32/pull/12
- perf(synth): remove per-sample powf, fdiv, and LUT range reduction from the render loop by @ericlewis in https://github.com/ericlewis/libpo32/pull/10
- feat(build): add fuzzing, sanitizer CI, and package config by @ericlewis in https://github.com/ericlewis/libpo32/pull/11
- chore(release): cut 0.3.0 by @ericlewis in https://github.com/ericlewis/libpo32/pull/18
Full Changelog: https://github.com/ericlewis/libpo32/compare/0.2.1...0.3.0
0.2.10 files
Fixed
ARCHITECTURE.mdnow listspo32_patch_import.cas a core module.C_API.mdnow documentsPO32_ERR_PARSE, the streaming modulator API, andpo32_patch_parse_mtdrum_text(...).README.mdnow lists thepo32_examplecommand in the examples table.
Changed
- Expanded test coverage across all
src/andexamples/files, covering error paths, edge cases, and previously untested branches in the import parser, synth renderer, frame builder, and example programs. - Add license scan report and status by @fossabot in https://github.com/ericlewis/libpo32/pull/2
- fix(import): bound exponent parsing and add helper coverage by @ericlewis in https://github.com/ericlewis/libpo32/pull/3
New Contributors
- @fossabot made their first contribution in https://github.com/ericlewis/libpo32/pull/2
Full Changelog: https://github.com/ericlewis/libpo32/compare/0.2.0...0.2.1
0.2.00 files
This release focuses on correctness and usability for real PO-32 pattern transfers.
Fixed
- Corrected pattern packet encode/decode to match the verified on-device wire layout:
16trigger bytes, then16morph pairs, repeated four times. - Fixed pattern trigger handling to follow verified wire semantics: a zero low nibble means an empty step, and active triggers require a non-zero fill-rate nibble.
- Resolved cases where patterns decoded correctly locally but landed on the wrong steps or instruments on real PO-32 hardware.
Added
- High-level pattern builder helpers:
po32_pattern_init(...)po32_pattern_clear(...)po32_pattern_set_trigger(...)po32_pattern_clear_trigger(...)po32_pattern_clear_step(...)po32_pattern_set_accent(...)
po32_pattern_step_tand decodedpo32_pattern_packet_t.steps[]as the primary pattern editing surface.po32_decode_captureexample for decoding transfer WAVs into normalized frame dumps, per-packet payloads, and compact pattern summaries.- Starter presets in
po32_pattern_editorfor quick hardware-safe pattern export.
Changed
po32_pattern_packet_tno longer exposes rawtrigger_lanes[]; pattern data is edited through decoded step entries and builder helpers.- The core is fully freestanding C99, with self-contained replacements for libc-dependent helpers.
- Release docs were revised for clearer protocol, API, and usage documentation.
Verification
./scripts/check-version-sync.sh./scripts/ci-verify.sh core
Tag:
0.2.0- Corrected pattern packet encode/decode to match the verified on-device wire layout: