Skip to content
Tech News
← Back to articles

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

read original get Teenage Engineering PO-32 Synth Kit → more articles
Why This Matters

The libpo32 library enables developers and enthusiasts to emulate and test PO-32 acoustic data transfers and drum synthesis outside the device, facilitating easier integration, customization, and development of new features. This advancement is significant for the tech industry as it opens up possibilities for DIY modifications, educational exploration, and enhanced interoperability with the PO-32 synthesizer, ultimately empowering users and fostering innovation.

Key Takeaways

libpo32

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

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 <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:

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

... continue reading