
libpo32 v0.3.0
C99ライブラリ - PO-32音響転送およびドラム合成のための
libpo32
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はサウンドやパターンを転送する際に完成したドラムオーディオを受信しているわけではありません。構造化されたデータを受信します:
| データ | 意味 |
|---|---|
| パッチパケット | 各インストゥルメントの2つのパッチエンドポイント(LeftとRight)。宛先インストゥルメントスロットはパケット内にエンコードされます |
| パターンパケット | どのインストゥルメントがどのステップでトリガーされるか。宛先パターンスロットはpattern_numberとしてエンコードされます |
| ステートパケット | テンポ、スウィング、モーフのデフォルト値、および転送されたパターンリスト |
デバイスはその後、独自の内部シンセエンジンを使用してこれらのパラメータをサウンドに変換します。
高レベルでは、実機でのワークフローは次のとおりです:
| ステップ | 操作内容 |
|---|---|
| 1 | パッチ、パターン、ステートデータからソフトウェアで転送を構築 |
| 2 | その転送をWAVまたはライブオーディオストリームにレンダリング |
| 3 | PO-32を通常の受信/インポートフローに設定 |
| 4 | レンダリングした転送オーディオをデバイスに再生 |
| 5 | PO-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を参照してください。
デモは転送フレームを構築し、オーディオにレンダリングし、それをデコードして(ロスレスのラウンドトリップを検証)、ドラムヒットを合成し、demo_modem.wavとdemo_kick.wavの2つの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 | libpo32を搭載したAbleton Move用Schwungの16ボイスドラムシンセサイザーモジュール |
公開API
| ヘッダ | 役割 |
|---|---|
core/include/po32.h | 転送ビルダー、パケットヘルパー、レンダラー、デコーダ |
core/include/po32_synth.h | ドラムシンセサイザー |
ドキュメント
| ドキュメント | 目的 |
|---|---|
| アーキテクチャ | コーデックの仕組み |
| プロトコル | ワイヤーフォーマットの詳細 |
| C API | C関数リファレンス |
| シンセ | シンセサイザーのシグナルパス |
| パッチパラメータ | 21のパラメータ |
| バインディング | 新しい言語バインディングの書き方 |
| 例 | サポートされているサンプルプログラム |
| ファジング | ファズハーネスと差分プロパティ |
| 貢献 | ローカルセットアップ、チェック、コミット規約 |
プロジェクト構成
| パス | 目的 |
|---|---|
core/src | コアC実装 |
core/include | 公開Cヘッダ |
core/examples | サポートされているCの例 |
core/tests | コアのテストカバレッジ |
core/fuzz | すべての信頼できない入力面に対するlibFuzzerハーネス |
core/docs | アーキテクチャ、プロトコル、APIのメモ |
bindings/go | Goバインディング(cgo、完全な公開APIをラップ) |
貢献
ローカルセットアップ、検証コマンド、およびSemVer対応の履歴に使用されるConventional CommitsポリシーについてはCONTRIBUTING.mdを参照してください。
ライセンス
Copyright (c) 2026 Eric Lewis. MITライセンスの下でライセンスされています。LICENSEを参照してください。