アップデート一覧に戻る
New releaseSep 3, 2026

libpo32 v0.3.0

C99ライブラリ - PO-32音響転送およびドラム合成のための

共有

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はサウンドやパターンを転送する際に完成したドラムオーディオを受信しているわけではありません。構造化されたデータを受信します:

データ意味
パッチパケット各インストゥルメントの2つのパッチエンドポイント(LeftRight)。宛先インストゥルメントスロットはパケット内にエンコードされます
パターンパケットどのインストゥルメントがどのステップでトリガーされるか。宛先パターンスロットはpattern_numberとしてエンコードされます
ステートパケットテンポ、スウィング、モーフのデフォルト値、および転送されたパターンリスト

デバイスはその後、独自の内部シンセエンジンを使用してこれらのパラメータをサウンドに変換します。

高レベルでは、実機でのワークフローは次のとおりです:

ステップ操作内容
1パッチ、パターン、ステートデータからソフトウェアで転送を構築
2その転送をWAVまたはライブオーディオストリームにレンダリング
3PO-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を参照してください。

デモは転送フレームを構築し、オーディオにレンダリングし、それをデコードして(ロスレスのラウンドトリップを検証)、ドラムヒットを合成し、demo_modem.wavdemo_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 Schwunglibpo32を搭載したAbleton Move用Schwungの16ボイスドラムシンセサイザーモジュール

公開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をラップ)

貢献

ローカルセットアップ、検証コマンド、およびSemVer対応の履歴に使用されるConventional CommitsポリシーについてはCONTRIBUTING.mdを参照してください。

ライセンス

Copyright (c) 2026 Eric Lewis. MITライセンスの下でライセンスされています。LICENSEを参照してください。

カテゴリ