libpo32

Teenage Engineering PO-32 の音響データ転送とドラムシンセシス向けの、小規模なC99ライブラリです。
libpo32 は、PO-32 Tonic 転送スタックと互換性のあるドラムボイスモデルを再実装します。完全なPO-32ファームウェアやUIエミュレータではなく、PO-32転送を構築、送信、受信、プレビューするために必要なパケットフォーマット、音響モデム、フレームデコーダ、ローカルドラムシンセシスをカバーしています。
目次
概要
| 領域 | libpo32 が提供するもの |
|---|
| 転送プロトコル | PO-32 パッチ、パターン、ステートパケットの構築と解析 |
| 音響モデム | デバイスへの再生用にDPSKオーディオへ転送フレームをレンダリング |
| デコーダ | 転送オーディオから正規化されたフレームとパケットを復元 |
| ドラムシンセシス | プレビューとテスト用にPO-32の21パラメータドラムボイスをローカルでレンダリング |
コアはフリースタンディングC99です:libcランタイム、外部DSPライブラリ、プラットフォームオーディオAPI、ファイルI/Oは使用しません。フリースタンディングヘッダ <stddef.h> と <stdint.h> のみを使います。組み込みターゲットやベアメタル環境に適しています。
PO-32での使用
PO-32は、サウンドやパターンを転送する際に完成したドラムオーディオを受信しているわけではありません。構造化データを受信します:
| データ | 意味 |
|---|
| パッチパケット | インストゥルメントごとの2つのパッチエンドポイント(Left と Right)。パケットに宛先インストゥルメントスロットがエンコードされています。 |
| パターンパケット | どのインストゥルメントがどのステップでトリガーされるか。パケットに宛先パターンスロットが pattern_number としてエンコードされています。 |
デバイスは独自の内部シンセエンジンを使って、それらのパラメータを音に変換します。
ハードウェアを用いた実際のワークフローの大まかな流れは以下の通りです:
| ステップ | 作業内容 |
|---|
| 1 | パッチ、パターン、ステートデータからソフトウェアで転送を構築する |
| 2 | その転送をWAVまたはライブオーディオストリームにレンダリングする |
| 3 | 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フックは、プッシュ前に静的解析スクリプトを実行します。
デモは、転送フレームを構築し、それをオーディオにレンダリングし、デコードし直し(ロスレスラウンドトリップを確認)、ドラムヒットを合成し、2つのWAVファイル(demo_modem.wav と demo_kick.wav)を書き出します。
例
| コマンド | 目的 |
|---|
./build/po32_example | 最小限のラウンドトリップ:エンコード、レンダリング、デコード、検証 |
./build/po32_demo |
公開API
ドキュメント
プロジェクト構成
コントリビューション
ローカルセットアップ、検証コマンド、SemVer互換の履歴のための Conventional Commits ポリシーについては、CONTRIBUTING.md を参照してください。
ライセンス
Copyright (c) 2026 Eric Lewis. MITライセンスのもとで提供されます。 LICENSE を参照してください。