Live
Black Hat USADark ReadingBlack Hat AsiaAI BusinessIntel repurchasing 49pc stake in Leixlip chip factory for $14.2bnSilicon RepublicBell Called Watson; Today, We Call AIeetimes.comThe AI-Powered Agency: A Developer Playbook for Selling AI Services in 2026Dev.to AIYour AI Chatbot Isn't Stupid. It Just Has No Memory. Here's How We Fixed That.Dev.to AIInternational RegLab Project reports on AI use in nuclear power plant operations - Nuclear Energy Agency (NEA)Google News: AIAI Agent Tools for Small Business Owners: A Practical GuideDev.to AINavigating the Quiet Rhythms of the Siuntio FortDev.to AIArtificial Intelligence in the Battle against Coronavirus (COVID-19): A Surveyand Future Research DirectionsDev.to AISoftware Testing Training in Kalyan Nagar – Learnmore TechnologiesDev.to AII'm 단아, Leader 36 of Lawmadi OS — Your AI Cultural Heritage & Religion Expert for Korean LawDev.to AIHow to Access All AI Models with a Single API Key in 2026Dev.to AIPRH Germany sues OpenAI for ‘copyright infringement’ of children’s series - The BooksellerGoogle News: OpenAIBlack Hat USADark ReadingBlack Hat AsiaAI BusinessIntel repurchasing 49pc stake in Leixlip chip factory for $14.2bnSilicon RepublicBell Called Watson; Today, We Call AIeetimes.comThe AI-Powered Agency: A Developer Playbook for Selling AI Services in 2026Dev.to AIYour AI Chatbot Isn't Stupid. It Just Has No Memory. Here's How We Fixed That.Dev.to AIInternational RegLab Project reports on AI use in nuclear power plant operations - Nuclear Energy Agency (NEA)Google News: AIAI Agent Tools for Small Business Owners: A Practical GuideDev.to AINavigating the Quiet Rhythms of the Siuntio FortDev.to AIArtificial Intelligence in the Battle against Coronavirus (COVID-19): A Surveyand Future Research DirectionsDev.to AISoftware Testing Training in Kalyan Nagar – Learnmore TechnologiesDev.to AII'm 단아, Leader 36 of Lawmadi OS — Your AI Cultural Heritage & Religion Expert for Korean LawDev.to AIHow to Access All AI Models with a Single API Key in 2026Dev.to AIPRH Germany sues OpenAI for ‘copyright infringement’ of children’s series - The BooksellerGoogle News: OpenAI
Eigenvector logo
AI NEWS HUBbyEIGENVECTOR

Teenage Engineering's PO-32 acoustic modem and synth implementation

Hacker NewsMarch 28, 20261 min read0 views
Source Quiz

Comments

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

Area What libpo32 provides

Transfer protocol Build and parse PO-32 patch, pattern, and state packets

Acoustic modem Render transfer frames to DPSK audio for playback into the device

Decoder Recover normalized frames and packets from transfer audio

Drum synthesis Render the PO-32's 21-parameter drum voice locally for preview and testing

The core is freestanding C99: no libc runtime, no external DSP libraries, no platform audio APIs, no file I/O. Only the freestanding headers and 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:

Data Meaning

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

Pattern packets Which instruments trigger on which steps, with the destination pattern slot encoded as pattern_number

State packet Tempo, swing, morph defaults, and the transferred pattern list

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:

Step What you do

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

2 Render that transfer to a WAV or live audio stream

3 Put the PO-32 into its normal receive/import flow

4 Play the rendered transfer audio into the device

5 The PO-32 decodes the packets and writes them to the sound or pattern slots named inside those packets

Getting Started

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

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:

./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

Command Purpose

./build/po32_example Minimal roundtrip: encode, render, decode, and verify

./build/po32_demo End-to-end demo: transfer frame build/render/decode plus local drum synthesis

./build/po32_pattern_editor Interactive PO-32 pattern editing and WAV export

./build/po32_decode_capture Packet and pattern dumps from a transfer WAV

Public API

Header Responsibility

core/include/po32.h Transfer builder, packet helpers, renderer, and decoder

core/include/po32_synth.h Drum synthesizer

Documentation

Document Purpose

Architecture How the codec works

Protocol Wire format details

C API C function reference

Synth Synthesizer signal path

Patch Parameters The 21 parameters

Examples Supported example programs

Contributing Local setup, checks, and commit conventions

Project Layout

Path Purpose

core/src Core C implementation

core/include Public C headers

core/examples Supported C examples

core/tests Core test coverage

core/docs Architecture, protocol, and API notes

bindings Language bindings

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.

Was this article helpful?

Sign in to highlight and annotate this article

AI
Ask AI about this article
Powered by Eigenvector · full article context loaded
Ready

Conversation starters

Ask anything about this article…

Daily AI Digest

Get the top 5 AI stories delivered to your inbox every morning.

Knowledge Map

Knowledge Map
TopicsEntitiesSource
Teenage Eng…Hacker News

Connected Articles — Knowledge Graph

This article is connected to other articles through shared AI topics and tags.

Knowledge Graph100 articles · 198 connections
Scroll to zoom · drag to pan · click to open

Discussion

Sign in to join the discussion

No comments yet — be the first to share your thoughts!