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 PO-32 Tonic e un modello di voce per batteria compatibile. Non è un firmware PO-32 completo o un emulatore di interfaccia utente; copre il formato dei pacchetti, il modem acustico, il decodificatore di frame e la sintesi di batteria locale necessari per creare, inviare, ricevere e visualizzare in anteprima i trasferimenti PO-32.
Contenuti
Panoramica
| Area | Cosa fornisce libpo32 |
|---|
| Protocollo di trasferimento | Costruisce e analizza i pacchetti di patch, pattern e stato del PO-32 |
| Modem acustico |
Il nucleo è C99 autonomo: nessun runtime libc, nessuna libreria DSP esterna, nessuna API audio di piattaforma, nessun I/O su file. Vengono utilizzati solo gli header autonomi <stddef.h> e <stdint.h>. Adatto per destinazioni embedded e ambienti bare-metal.
Utilizzo con un PO-32
Il PO-32 non sta ricevendo audio di batteria finito quando si trasferisce un suono o un pattern. Riceve dati strutturati:
| Dato | 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 questi parametri in suono.
Ad alto livello, il flusso di lavoro con hardware reale è:
Per iniziare
Dalla radice del repository, configura, compila, esegui i test, 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 raccomandato per lo sviluppo locale:
./scripts/install-git-hooks.sh
Ciò abilita l'hook pre-commit gestito dal repository, che esegue clang-format sui file .c e .h messi in stage prima di ogni commit e convalida gli oggetti del commit secondo Conventional Commits. L'hook pre-push gestito dal repository esegue lo script di analisi statica prima del push.
La demo costruisce un frame di trasferimento, lo renderizza in audio, lo decodifica di nuovo (verificando un roundtrip senza perdita), sintetizza un colpo di batteria e scrive due file WAV: demo_modem.wav e demo_kick.wav.
Esempi
API pubblica
Documentazione
Struttura del progetto
Contribuire
Vedi CONTRIBUTING.md per la configurazione locale, i comandi di verifica e la politica Conventional Commits utilizzata per una cronologia amichevole con SemVer.
Licenza
Copyright (c) 2026 Eric Lewis. Concesso in licenza con Licenza MIT. Vedi LICENSE.