Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
libpo32 — C99 library for PO-32 acoustic transfers and drum synthesis. | Kitploit
Tools/GitHubGitHub/ericlewis/libpo32
Embedded Systems SecurityReverse EngineeringHardware Security
GitHubericlewis/libpo32

libpo32

C99 library for PO-32 acoustic transfers and drum synthesis.

View Repository
20091 month agoReviewed by Kitploit

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

libpo32

Tests Codecov FOSSA Status

A small C99 library for Teenage Engineering PO-32 acoustic data transfers and drum synthesis.

libpo32 reimplements the PO-32 Tonic transfer stack and a compatible drum voice model. It is not a full PO-32 firmware or UI emulator; it covers the packet format, acoustic modem, frame decoder, and local drum synthesis needed to build, send, receive, and preview PO-32 transfers.

Contents

  • Overview
  • Using It With a PO-32
  • Getting Started
  • Examples
  • Public API
  • Documentation
  • Project Layout
  • Contributing
  • License

Overview

AreaWhat libpo32 provides
Transfer protocolBuild and parse PO-32 patch, pattern, and state packets
Acoustic modemRender transfer frames to DPSK audio for playback into the device

The core is freestanding C99: no libc runtime, no external DSP libraries, no platform audio APIs, no file I/O. Only the freestanding headers <stddef.h> and <stdint.h> are used. Suitable for embedded targets and bare-metal environments.

Using It With a PO-32

The PO-32 is not receiving finished drum audio when you transfer a sound or a pattern. It receives structured data:

DataMeaning
Patch packetsThe two patch endpoints per instrument (Left and Right), with the destination instrument slot encoded in the packet

The device then uses its own internal synth engine to turn those parameters into sound.

At a high level, the workflow with real hardware is:

StepWhat you do
1Build a transfer in software from patch, pattern, and state data

Getting Started

From the repository root, configure, build, run tests, then the demo:

root@kitploit:~
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j4
ctest --test-dir build --output-on-failure
./build/po32_demo

Optional, but recommended for local development:

root@kitploit:~
./scripts/install-git-hooks.sh

That enables the repo-managed pre-commit hook, which runs clang-format on staged .c and .h files before each commit and validates commit subjects against Conventional Commits. The repo-managed pre-push hook runs the static analysis script before push.

The demo builds a transfer frame, renders it to audio, decodes it back (verifying a lossless roundtrip), synthesizes a drum hit, and writes two WAV files: demo_modem.wav and demo_kick.wav.

Examples

CommandPurpose
./build/po32_example

Public API

HeaderResponsibility
core/include/po32.hTransfer builder, packet helpers, renderer, and decoder
core/include/po32_synth.hDrum synthesizer

Documentation

Project Layout

Contributing

See CONTRIBUTING.md for local setup, verification commands, and the Conventional Commits policy used for SemVer-friendly history.

License

Copyright (c) 2026 Eric Lewis. Licensed under the MIT License. See LICENSE.

Download Tool
DecoderRecover normalized frames and packets from transfer audio
Drum synthesisRender the PO-32's 21-parameter drum voice locally for preview and testing
Pattern packets
Which instruments trigger on which steps, with the destination pattern slot encoded as pattern_number
State packetTempo, swing, morph defaults, and the transferred pattern list
2Render that transfer to a WAV or live audio stream
3Put the PO-32 into its normal receive/import flow
4Play the rendered transfer audio into the device
5The PO-32 decodes the packets and writes them to the sound or pattern slots named inside those packets
Minimal roundtrip: encode, render, decode, and verify
./build/po32_demoEnd-to-end demo: transfer frame build/render/decode plus local drum synthesis
./build/po32_pattern_editorInteractive PO-32 pattern editing and WAV export
./build/po32_decode_capture <input.wav> <out-dir>Packet and pattern dumps from a transfer WAV
DocumentPurpose
ArchitectureHow the codec works
ProtocolWire format details
C APIC function reference
SynthSynthesizer signal path
Patch ParametersThe 21 parameters
BindingsHow to write a new language binding
ExamplesSupported example programs
ContributingLocal setup, checks, and commit conventions
PathPurpose
core/srcCore C implementation
core/includePublic C headers
core/examplesSupported C examples
core/testsCore test coverage
core/docsArchitecture, protocol, and API notes
bindings/goGo bindings (cgo, wraps full public API)