返回更新列表
新发布Sep 3, 2026

libpo32 v0.3.0

用于PO-32声学传输和鼓合成的C99库。

分享

libpo32

Tests Codecov FOSSA Status

一个用于 Teenage Engineering PO-32 声学数据传输和鼓合成的小型 C99 库。

libpo32 重新实现了 PO-32 Tonic 传输协议栈以及兼容的鼓声部模型。它不是完整的 PO-32 固件或 UI 模拟器;它涵盖了构建、发送、接收和预览 PO-32 传输所需的包格式、声学调制解调器、帧解码器和本地鼓合成。

目录

概述

领域libpo32 提供的内容
传输协议构建和解析 PO-32 音色、模式和状态包
声学调制解调器将传输帧渲染为 DPSK 音频,用于回放到设备
解码器从传输音频中恢复归一化帧和包
鼓合成本地渲染 PO-32 的 21 参数鼓声部,用于预览和测试

核心是 freestanding C99:无 libc 运行时、无外部 DSP 库、无平台音频 API、无文件 I/O。仅使用 freestanding 头文件 <stddef.h><stdint.h>。适用于嵌入式目标和裸机环境。

与 PO-32 配合使用

当您传输音色或模式时,PO-32 接收的不是成品鼓音频。它接收的是结构化数据:

数据含义
音色包每个乐器的两个音色端点(LeftRight),目标乐器槽位编码在包中
模式包哪些乐器在哪些步骤上触发,目标模式槽位编码为 pattern_number
状态包速度、摇摆、变形默认值以及传输的模式列表

然后设备使用其内部合成引擎将这些参数转换为声音。

在高层面上,使用真实硬件的流程是:

步骤您要做的
1在软件中根据音色、模式和状态数据构建传输
2将该传输渲染为 WAV 或实时音频流
3将 PO-32 置于其正常的接收/导入流程
4将渲染的传输音频播放到设备中
5PO-32 解码这些包,并将它们写入这些包中指定的音色或模式槽位

快速开始

从仓库根目录开始,配置、构建、运行测试,然后运行演示程序:

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 钩子,该钩子在每次提交前对暂存的 .c.h 文件运行 clang-format,并根据 Conventional Commits 验证提交主题。仓库管理的 pre-push 钩子在推送前运行静态分析脚本。

pre-commit 钩子需要 clang-format 18,并且如果使用任何其他主版本会失败;安装选项请参阅 CONTRIBUTING.md

演示程序会构建一个传输帧,将其渲染为音频,再解码回来(验证无损往返),合成一次鼓击,并写入两个 WAV 文件:demo_modem.wavdemo_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最小往返:编码、渲染、解码和验证
./build/po32_demo端到端演示:传输帧构建/渲染/解码以及本地鼓合成
./build/po32_pattern_editor交互式 PO-32 模式编辑和 WAV 导出
./build/po32_decode_capture <input.wav> <out-dir>从传输 WAV 中导出包和模式转储

基于 libpo32 构建的项目

项目功能
Libpo32 for Schwung适用于 Ableton Move 上 Schwung 的 16 声部鼓合成器模块,由 libpo32 驱动

公共 API

头文件职责
core/include/po32.h传输构建器、包辅助函数、渲染器和解码器
core/include/po32_synth.h鼓合成器

文档

文档用途
架构编解码器的工作原理
协议线格式详情
C APIC 函数参考
合成合成器信号路径
音色参数21 个参数
绑定如何编写新的语言绑定
示例支持的示例程序
模糊测试模糊测试工具和差分属性
贡献本地设置、检查和提交约定

项目结构

路径用途
core/src核心 C 实现
core/include公共 C 头文件
core/examples支持的 C 示例
core/tests核心测试覆盖
core/fuzz针对每个不可信输入面的 libFuzzer 工具
core/docs架构、协议和 API 说明
bindings/goGo 绑定(cgo,封装完整公共 API)

贡献

请参阅 CONTRIBUTING.md 了解本地设置、验证命令以及用于 SemVer 友好历史的 Conventional Commits 策略。

许可证

版权所有 (c) 2026 Eric Lewis。根据 MIT 许可证授权。请参阅 LICENSE

分类