libpo32

Uma pequena biblioteca C99 para transferências de dados acústicos e síntese de bateria do Teenage Engineering PO-32.
libpo32 reimplementa a pilha de transferência do PO-32 Tonic e um modelo de voz de bateria compatível. Não é um firmware completo do PO-32 nem um emulador de interface; cobre o formato de pacotes, o modem acústico, o decodificador de quadros e a síntese de bateria local necessários para construir, enviar, receber e pré-visualizar transferências do PO-32.
Conteúdo
Visão Geral
| Área | O que libpo32 fornece |
|---|
| Protocolo de transferência | Construir e analisar pacotes de patch, padrão e estado do PO-32 |
O núcleo é C99 freestanding: sem runtime libc, sem bibliotecas DSP externas, sem APIs de áudio de plataforma, sem E/S de arquivos. Apenas os cabeçalhos freestanding <stddef.h> e <stdint.h> são usados. Adequado para alvos embarcados e ambientes bare-metal.
O PO-32 não recebe áudio de bateria finalizado quando você transfere um som ou um padrão. Ele recebe dados estruturados:
| Dado | Significado |
|---|
| Pacotes de patch | Os dois endpoints de patch por instrumento (Left e Right), com o slot de instrumento de destino codificado no pacote |
O dispositivo então usa seu próprio mecanismo de síntese interno para transformar esses parâmetros em som.
Em alto nível, o fluxo de trabalho com hardware real é:
Começando
A partir da raiz do repositório, configure, compile, execute os testes e depois a demonstração:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j4
ctest --test-dir build --output-on-failure
./build/po32_demo
Opcional, mas recomendado para desenvolvimento local:
./scripts/install-git-hooks.sh
Isso ativa o hook de pre-commit gerenciado pelo repositório, que executa clang-format em arquivos .c e .h preparados antes de cada commit e valida os assuntos dos commits conforme Conventional Commits. O hook de pre-push gerenciado pelo repositório executa o script de análise estática antes do push.
O hook de pre-commit requer clang-format 18 e falha em qualquer outra versão principal; consulte CONTRIBUTING.md para opções de instalação.
A demonstração constrói um quadro de transferência, renderiza-o em áudio, decodifica-o de volta (verificando um roundtrip sem perdas), sintetiza uma batida de bateria e grava dois arquivos WAV: demo_modem.wav e demo_kick.wav.
Instalação e Consumo
cmake --install fornece a biblioteca estática, cabeçalhos, um pacote CMake e um arquivo pkg-config, para que ambos os caminhos de consumo funcionem prontamente:
find_package(LibPO32 0.2 REQUIRED)
target_link_libraries(app PRIVATE LibPO32::po32)
cc app.c $(pkg-config --cflags --libs po32) -lm
Exemplos
| Projeto | O que faz |
|---|
| Libpo32 for Schwung | Um módulo sintetizador de bateria de 16 vozes para Schwung no Ableton Move, alimentado por libpo32 |
API Pública
Documentação
Estrutura do Projeto
Contribuindo
Consulte CONTRIBUTING.md para configuração local, comandos de verificação e a política de Conventional Commits usada para um histórico compatível com SemVer.
Licença
Copyright (c) 2026 Eric Lewis. Licenciado sob a Licença MIT. Consulte LICENSE.