Zurück zu den Updates
New releaseSep 3, 2026

libpo32 v0.3.0

C99-Bibliothek für PO-32 akustische Übertragungen und Schlagzeug-Synthese.

Teilen

libpo32

Tests Codecov FOSSA Status

Eine kleine C99-Bibliothek für akustische Datenübertragungen und Schlagzeug-Synthese des Teenage Engineering PO-32.

libpo32 implementiert den PO-32-Tonic-Übertragungsstack und ein kompatibles Drum-Voice-Modell neu. Es ist keine vollständige PO-32-Firmware oder UI-Emulation; es deckt das Paketformat, das akustische Modem, den Frame-Decoder und die lokale Schlagzeug-Synthese ab, die zum Erstellen, Senden, Empfangen und Vorschauen von PO-32-Übertragungen benötigt werden.

Inhalt

Überblick

BereichWas libpo32 bietet
ÜbertragungsprotokollErstellen und Parsen von PO-32-Patch-, Pattern- und State-Paketen
Akustisches ModemRendern von Übertragungsframes zu DPSK-Audio zur Wiedergabe in das Gerät
DecoderWiederherstellen normalisierter Frames und Pakete aus Übertragungsaudio
Schlagzeug-SyntheseLokales Rendern der 21-Parameter-Drum-Voice des PO-32 für Vorschau und Tests

Der Kern ist freistehendes C99: keine libc-Laufzeit, keine externen DSP-Bibliotheken, keine Plattform-Audio-APIs, keine Datei-I/O. Es werden nur die freistehenden Header <stddef.h> und <stdint.h> verwendet. Geeignet für eingebettete Zielsysteme und Bare-Metal-Umgebungen.

Verwendung mit einem PO-32

Der PO-32 empfängt beim Übertragen eines Sounds oder Patterns kein fertiges Schlagzeug-Audio. Er empfängt strukturierte Daten:

DatenBedeutung
Patch-PaketeDie beiden Patch-Endpunkte pro Instrument (Left und Right), wobei der Ziel-Instrumentenslot im Paket kodiert ist
Pattern-PaketeWelche Instrumente auf welchen Schritten ausgelöst werden, wobei der Ziel-Patternslot als pattern_number kodiert ist
State-PaketTempo, Swing, Morph-Standardwerte und die übertragene Pattern-Liste

Das Gerät verwendet dann seine eigene interne Synthese-Engine, um diese Parameter in Klang umzuwandeln.

Auf hoher Ebene sieht der Arbeitsablauf mit echter Hardware wie folgt aus:

SchrittWas Sie tun
1Erstellen einer Übertragung in Software aus Patch-, Pattern- und State-Daten
2Rendern dieser Übertragung in einen WAV- oder Live-Audiostream
3Den PO-32 in seinen normalen Empfangs-/Importablauf versetzen
4Das gerenderte Übertragungsaudio in das Gerät abspielen
5Der PO-32 dekodiert die Pakete und schreibt sie in die Sound- oder Patternslots, die in diesen Paketen benannt sind

Erste Schritte

Vom Repository-Stammverzeichnis aus konfigurieren, bauen, Tests ausführen und dann die Demo:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j4
ctest --test-dir build --output-on-failure
./build/po32_demo

Optional, aber für die lokale Entwicklung empfohlen:

./scripts/install-git-hooks.sh

Das aktiviert den vom Repository verwalteten Pre-Commit-Hook, der vor jedem Commit clang-format auf die gestagten .c- und .h-Dateien ausführt und Commit-Betreffe gegen Conventional Commits validiert. Der vom Repository verwaltete pre-push-Hook führt vor dem Push das Skript zur statischen Analyse aus.

Der Pre-Commit-Hook erfordert clang-format 18 und schlägt bei jeder anderen Hauptversion fehl; siehe CONTRIBUTING.md für Installationsoptionen.

Die Demo erstellt einen Übertragungsframe, rendert ihn zu Audio, dekodiert ihn zurück (wobei ein verlustfreier Roundtrip verifiziert wird), synthetisiert einen Drum-Hit und schreibt zwei WAV-Dateien: demo_modem.wav und demo_kick.wav.

Installieren und Verwenden

cmake --install liefert die statische Bibliothek, Header, ein CMake-Paket und eine pkg-config-Datei, sodass beide Konsumationspfade sofort funktionieren:

find_package(LibPO32 0.2 REQUIRED)
target_link_libraries(app PRIVATE LibPO32::po32)
cc app.c $(pkg-config --cflags --libs po32) -lm

Beispiele

BefehlZweck
./build/po32_exampleMinimaler Roundtrip: kodieren, rendern, dekodieren und verifizieren
./build/po32_demoEnd-to-End-Demo: Übertragungsframe-Erstellung/-Rendering/-Dekodierung plus lokale Schlagzeug-Synthese
./build/po32_pattern_editorInteraktive PO-32-Pattern-Bearbeitung und WAV-Export
./build/po32_decode_capture <input.wav> <out-dir>Paket- und Pattern-Dumps aus einem Übertragungs-WAV

Projekte, die mit libpo32 erstellt wurden

ProjektWas es tut
Libpo32 for SchwungEin 16-stimmiges Schlagzeug-Synthesizer-Modul für Schwung auf Ableton Move, angetrieben von libpo32

Öffentliche API

HeaderVerantwortung
core/include/po32.hÜbertragungs-Builder, Paket-Helfer, Renderer und Decoder
core/include/po32_synth.hSchlagzeug-Synthesizer

Dokumentation

DokumentZweck
ArchitekturWie der Codec funktioniert
ProtokollDetails zum Wire-Format
C-APIC-Funktionsreferenz
SynthSignalpfad des Synthesizers
Patch-ParameterDie 21 Parameter
BindingsWie man ein neues Sprach-Binding schreibt
BeispieleUnterstützte Beispielprogramme
FuzzingFuzz-Harnesses und differentielle Eigenschaften
MitwirkenLokale Einrichtung, Prüfungen und Commit-Konventionen

Projektstruktur

PfadZweck
core/srcKern-C-Implementierung
core/includeÖffentliche C-Header
core/examplesUnterstützte C-Beispiele
core/testsKern-Testabdeckung
core/fuzzlibFuzzer-Harnesses für jede Oberfläche mit nicht vertrauenswürdigen Eingaben
core/docsArchitektur-, Protokoll- und API-Notizen
bindings/goGo-Bindings (cgo, umfasst die vollständige öffentliche API)

Mitwirken

Siehe CONTRIBUTING.md für die lokale Einrichtung, Verifizierungsbefehle und die Conventional-Commits-Richtlinie, die für eine SemVer-freundliche Historie verwendet wird.

Lizenz

Copyright (c) 2026 Eric Lewis. Lizenziert unter der MIT-Lizenz. Siehe LICENSE.

Kategorien