libpo32

Una pequeña biblioteca en C99 para transferencias de datos acústicos y síntesis de batería del Teenage Engineering PO-32.
libpo32 reimplementa la pila de transferencia del PO-32 Tonic y un modelo de voz de batería compatible. No es un firmware completo del PO-32 ni un emulador de interfaz; cubre el formato de paquetes, el módem acústico, el decodificador de tramas y la síntesis de batería local necesarios para construir, enviar, recibir y previsualizar transferencias del PO-32.
Contenido
Descripción general
| Área | Qué proporciona libpo32 |
|---|
| Protocolo de transferencia | Construye y analiza paquetes de patch, patrón y estado del PO-32 |
| Módem acústico |
El núcleo es C99 independiente: sin runtime de libc, sin bibliotecas DSP externas, sin APIs de audio de plataforma, sin E/S de archivos. Solo se utilizan los encabezados independientes <stddef.h> y <stdint.h>. Adecuado para objetivos embebidos y entornos bare-metal.
Uso con un PO-32
El PO-32 no recibe audio de batería terminado cuando transfieres un sonido o un patrón. Recibe datos estructurados:
| Datos | Significado |
|---|
| Paquetes de patch | Los dos endpoints de patch por instrumento (Left y Right), con la ranura de instrumento de destino codificada en el paquete |
El dispositivo utiliza entonces su propio motor de síntesis interno para convertir esos parámetros en sonido.
A alto nivel, el flujo de trabajo con hardware real es:
Primeros pasos
Desde la raíz del repositorio, configura, compila, ejecuta las pruebas y luego la demo:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j4
ctest --test-dir build --output-on-failure
./build/po32_demo
Opcional, pero recomendado para el desarrollo local:
./scripts/install-git-hooks.sh
Eso habilita el hook de pre-commit gestionado por el repositorio, que ejecuta clang-format en los archivos .c y .h preparados antes de cada commit y valida los asuntos de los commits según Conventional Commits. El hook de pre-push gestionado por el repositorio ejecuta el script de análisis estático antes del push.
El hook de pre-commit requiere clang-format 18 y falla con cualquier otra versión principal; consulta CONTRIBUTING.md para opciones de instalación.
La demo construye una trama de transferencia, la renderiza a audio, la decodifica de vuelta (verificando un roundtrip sin pérdidas), sintetiza un golpe de batería y escribe dos archivos WAV: demo_modem.wav y demo_kick.wav.
Instalación y consumo
cmake --install distribuye la biblioteca estática, los encabezados, un paquete CMake y un archivo pkg-config, por lo que ambas rutas de consumo funcionan de inmediato:
find_package(LibPO32 0.2 REQUIRED)
target_link_libraries(app PRIVATE LibPO32::po32)
cc app.c $(pkg-config --cflags --libs po32) -lm
Ejemplos
Proyectos construidos con libpo32
| Proyecto | Qué hace |
|---|
| Libpo32 for Schwung | Un módulo sintetizador de batería de 16 voces para Schwung en Ableton Move, impulsado por libpo32 |
API pública
Documentación
Estructura del proyecto
Contribuciones
Consulta CONTRIBUTING.md para la configuración local, los comandos de verificación y la política de Conventional Commits utilizada para un historial compatible con SemVer.
Licencia
Copyright (c) 2026 Eric Lewis. Licenciado bajo la Licencia MIT. Consulta LICENSE.