libpo32

Une petite bibliothèque C99 pour les transferts de données acoustiques et la synthèse de batterie du Teenage Engineering PO-32.
libpo32 réimplémente la pile de transfert du PO-32 Tonic ainsi qu'un modèle de voix de batterie compatible. Ce n'est pas un firmware PO-32 complet ni un émulateur d'interface ; elle couvre le format de paquets, le modem acoustique, le décodeur de trames et la synthèse de batterie locale nécessaires pour construire, envoyer, recevoir et prévisualiser les transferts PO-32.
Sommaire
Vue d'ensemble
| Domaine | Ce que fournit libpo32 |
|---|
| Protocole de transfert | Construire et analyser les paquets de patch, de motif et d'état PO-32 |
| Modem acoustique |
Le cœur est en C99 autonome : pas d'exécution libc, pas de bibliothèques DSP externes, pas d'API audio de plateforme, pas d'E/S de fichiers. Seuls les en-têtes autonomes <stddef.h> et <stdint.h> sont utilisés. Convient aux cibles embarquées et aux environnements bare-metal.
Utilisation avec un PO-32
Le PO-32 ne reçoit pas d'audio de batterie finalisé lorsque vous transférez un son ou un motif. Il reçoit des données structurées :
| Données | Signification |
|---|
| Paquets de patch | Les deux points de terminaison de patch par instrument (Left et Right), avec l'emplacement d'instrument de destination encodé dans le paquet |
L'appareil utilise ensuite son propre moteur de synthèse interne pour transformer ces paramètres en son.
À un niveau élevé, le flux de travail avec du matériel réel est :
Pour commencer
Depuis la racine du dépôt, configurez, compilez, exécutez les tests, puis la démo :
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j4
ctest --test-dir build --output-on-failure
./build/po32_demo
Facultatif, mais recommandé pour le développement local :
./scripts/install-git-hooks.sh
Cela active le hook pre-commit géré par le dépôt, qui exécute clang-format sur les fichiers .c et .h indexés avant chaque commit et valide les sujets de commit par rapport aux Conventional Commits. Le hook pre-push géré par le dépôt exécute le script d'analyse statique avant le push.
Le hook pre-commit nécessite clang-format 18 et échoue sur toute autre version majeure ; voir CONTRIBUTING.md pour les options d'installation.
La démo construit une trame de transfert, la rend en audio, la décode (en vérifiant un aller-retour sans perte), synthétise un coup de batterie et écrit deux fichiers WAV : demo_modem.wav et demo_kick.wav.
Installation et consommation
cmake --install fournit la bibliothèque statique, les en-têtes, un paquet CMake et un fichier pkg-config, de sorte que les deux chemins de consommation fonctionnent immédiatement :
find_package(LibPO32 0.2 REQUIRED)
target_link_libraries(app PRIVATE LibPO32::po32)
cc app.c $(pkg-config --cflags --libs po32) -lm
Exemples
Projets construits avec libpo32
| Projet | Ce qu'il fait |
|---|
| Libpo32 for Schwung | Un module de synthétiseur de batterie à 16 voix pour Schwung sur Ableton Move, propulsé par libpo32 |
API publique
Documentation
Structure du projet
Contribuer
Voir CONTRIBUTING.md pour la configuration locale, les commandes de vérification et la politique Conventional Commits utilisée pour un historique compatible SemVer.
Licence
Copyright (c) 2026 Eric Lewis. Sous licence MIT. Voir LICENSE.