libpo32

Una piccola libreria C99 per i trasferimenti di dati acustici e la sintesi di batteria del Teenage Engineering PO-32.
libpo32 reimplementa lo stack di trasferimento del PO-32 Tonic e un modello di voce di batteria compatibile. Non è un firmware PO-32 completo né un emulatore di interfaccia; copre il formato dei pacchetti, il modem acustico, il decodificatore di frame e la sintesi di batteria locale necessari per costruire, inviare, ricevere e visualizzare in anteprima i trasferimenti PO-32.
Contenuti
Panoramica
| Area | Cosa fornisce libpo32 |
|---|
| Protocollo di trasferimento | Costruisce e analizza pacchetti di patch, pattern e stato PO-32 |
| Modem acustico |
Il nucleo è C99 freestanding: nessun runtime libc, nessuna libreria DSP esterna, nessuna API audio di piattaforma, nessuna I/O su file. Vengono utilizzati solo gli header freestanding <stddef.h> e <stdint.h>. Adatto per target embedded e ambienti bare-metal.
Utilizzo con un PO-32
Il PO-32 non riceve audio di batteria finito quando si trasferisce un suono o un pattern. Riceve dati strutturati:
| Dati | Significato |
|---|
| Pacchetti di patch | I due endpoint di patch per strumento (Left e Right), con lo slot dello strumento di destinazione codificato nel pacchetto |
Il dispositivo utilizza quindi il proprio motore di sintesi interno per trasformare quei parametri in suono.
A livello generale, il flusso di lavoro con hardware reale è:
Per Iniziare
Dalla radice del repository, configurare, compilare, eseguire i test e poi la demo:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j4
ctest --test-dir build --output-on-failure
./build/po32_demo
Opzionale, ma consigliato per lo sviluppo locale:
./scripts/install-git-hooks.sh
Questo abilita l'hook pre-commit gestito dal repository, che esegue clang-format sui file .c e .h in stage prima di ogni commit e valida i soggetti dei commit rispetto a Conventional Commits. L'hook pre-push gestito dal repository esegue lo script di analisi statica prima del push.
L'hook pre-commit richiede clang-format 18 e fallisce con qualsiasi altra versione principale; vedere CONTRIBUTING.md per le opzioni di installazione.
La demo costruisce un frame di trasferimento, lo renderizza in audio, lo decodifica nuovamente (verificando un roundtrip senza perdite), sintetizza un colpo di batteria e scrive due file WAV: demo_modem.wav e demo_kick.wav.
Installazione e Utilizzo
cmake --install distribuisce la libreria statica, gli header, un pacchetto CMake e un file pkg-config, quindi entrambi i percorsi di utilizzo funzionano immediatamente:
find_package(LibPO32 0.2 REQUIRED)
target_link_libraries(app PRIVATE LibPO32::po32)
cc app.c $(pkg-config --cflags --libs po32) -lm
Esempi
Progetti Realizzati con libpo32
| Progetto | Cosa fa |
|---|
| Libpo32 for Schwung | Un modulo sintetizzatore di batteria a 16 voci per Schwung su Ableton Move, alimentato da libpo32 |
API Pubblica
Documentazione
Struttura del Progetto
Contribuire
Vedere CONTRIBUTING.md per la configurazione locale, i comandi di verifica e la policy Conventional Commits utilizzata per una cronologia compatibile con SemVer.
Licenza
Copyright (c) 2026 Eric Lewis. Concesso in licenza sotto la MIT License. Vedere LICENSE.