libpo32

Небольшая библиотека на C99 для акустической передачи данных и синтеза ударных для Teenage Engineering PO-32.
libpo32 перереализует стек передачи PO-32 Tonic и совместимую модель голоса ударных. Это не полный эмулятор прошивки или интерфейса PO-32; она охватывает формат пакетов, акустический модем, декодер кадров и локальный синтез ударных, необходимые для создания, отправки, приёма и предпросмотра передач PO-32.
Содержание
Обзор
| Область | Что предоставляет libpo32 |
|---|
| Протокол передачи | Создание и разбор пакетов патчей, паттернов и состояния PO-32 |
| Акустический модем | Рендеринг кадров передачи в DPSK-аудио для воспроизведения в устройство |
Ядро — автономный C99: без рантайма libc, без внешних DSP-библиотек, без платформенных аудио-API, без файлового ввода-вывода. Используются только автономные заголовки <stddef.h> и <stdint.h>. Подходит для встраиваемых и bare-metal сред.
Использование с PO-32
PO-32 не получает готовое аудио ударных при передаче звука или паттерна. Он получает структурированные данные:
| Данные | Значение |
|---|
| Пакеты патчей | Две конечные точки патча на инструмент (Left и Right), с закодированным в пакете слотом назначения инструмента |
Затем устройство использует собственный внутренний синтезаторный движок для преобразования этих параметров в звук.
На высоком уровне рабочий процесс с реальным оборудованием выглядит так:
| Шаг | Что вы делаете |
|---|
| 1 | Создаёте передачу в программном обеспечении из данных патчей, паттернов и состояния |
Начало работы
Из корня репозитория настройте, соберите, запустите тесты, затем демо:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j4
ctest --test-dir build --output-on-failure
./build/po32_demo
Опционально, но рекомендуется для локальной разработки:
./scripts/install-git-hooks.sh
Это включает управляемый репозиторием pre-commit хук, который запускает clang-format на подготовленных .c и .h файлах перед каждым коммитом и проверяет темы коммитов на соответствие Conventional Commits. Управляемый репозиторием pre-push хук запускает скрипт статического анализа перед push.
Pre-commit хук требует clang-format 18 и завершается ошибкой при любой другой основной версии; см. CONTRIBUTING.md для вариантов установки.
Демо создаёт кадр передачи, рендерит его в аудио, декодирует обратно (проверяя без потерь roundtrip), синтезирует удар барабана и записывает два WAV-файла: demo_modem.wav и demo_kick.wav.
Установка и использование
cmake --install поставляет статическую библиотеку, заголовки, CMake-пакет и pkg-config файл, поэтому оба пути потребления работают из коробки:
find_package(LibPO32 0.2 REQUIRED)
target_link_libraries(app PRIVATE LibPO32::po32)
cc app.c $(pkg-config --cflags --libs po32) -lm
Примеры
| Команда | Назначение |
|---|
./build/po32_example |
Проекты, созданные с помощью libpo32
| Проект | Что он делает |
|---|
| Libpo32 for Schwung | Модуль синтезатора ударных на 16 голосов для Schwung на Ableton Move, работающий на libpo32 |
Публичный API
Документация
Структура проекта
Участие в разработке
См. CONTRIBUTING.md для локальной настройки, команд проверки и политики Conventional Commits, используемой для SemVer-совместимой истории.
Лицензия
Copyright (c) 2026 Eric Lewis. Лицензировано по MIT License. См. LICENSE.