PicoSynth — 組み込み向け軽量ソフトウェアシンセ
概要
PicoSynthは、組み込みシステムやリソース制約のある環境向けに設計された軽量ソフトウェアシンセサイザです。ライブラリはCで実装され、Q15固定小数点算術を採用することでFPUを持たないマイクロコントローラでも高速に動作します。モジュラーなノードベースアーキテクチャにより、オシレーター/フィルター/エンベロープを組み合わせて音声合成パッチを構築でき、複数ボイスのポリフォニーにも対応します。波形は正弦波・ソー・矩形・三角波・ノイズをサポートし、出力の過大振幅を抑えるソフトクリッパーも備えています。ARM Cortex-Mのような高速乗算器を持つ32ビットMCUをターゲットに、低メモリ・低CPU負荷でのリアルタイム合成を想定しています。
リポジトリの統計情報
- スター数: 4
- フォーク数: 0
- ウォッチャー数: 4
- コミット数: 7
- ファイル数: 12
- メインの言語: C
主な特徴
- Q15固定小数点算術(浮動小数点不要)でFPU無し環境に最適化
- ノードベースのモジュラー構成でオシレーター・フィルタ・エンベロープを接続可能
- 複数ボイスのポリフォニー(マルチボイス混合)をサポート
- ADSRエンベロープ、各種波形(sine, saw, square, triangle, noise)、ローパス/ハイパス、ソフトクリッパーを実装
技術的なポイント
PicoSynthの最大の特徴は、組み込み向けに現実的なトレードオフを選んでいる点です。まず数値表現としてQ15固定小数点(16ビットのうち15ビットを小数部に使う表現)を採用することで、浮動小数点演算を行えないまたは遅い環境でも高速かつ決定論的に演算できます。固定小数点は加減算が単純でオーバーフロー管理が容易、乗算は32ビットの積和を用いて精度を確保する設計が一般的で、本ライブラリもARMなどの32ビット乗算が速いMCUを意識しています。
アーキテクチャは「ノードベース」で、オシレーター、エンベロープ、フィルター、ミキサー等を独立したモジュール(ノード)として扱い、ノード間を接続して音声処理グラフを構築できます。この方式により、機能追加やパッチの組み替えが容易で、例えば複数オシレーターを混ぜてフィルタに送る、エンベロープで音量を制御する、といった一般的な合成構成を柔軟に実現できます。
波形生成は基本的な5種類(sine, saw, square, triangle, noise)をサポートし、波形はルックアップテーブルや位相インクリメント方式で生成する設計が想定されます。フィルタはローパス/ハイパスを備え、組み込み向けには計算負荷と安定性のバランスをとるために1次IIRや簡易的なバイキュアッドの定数近似が用いられることが多いです。出力段にはソフトクリッパーを設けて過大振幅を穏やかに制御し、DACなどへの出力での歪みやクリッピングを軽減します。
ポリフォニー処理では、複数のボイスをCPU時間とメモリで管理するためのボイス割り当て(voice allocation)やミキシング戦略が重要です。PicoSynthはリソース制約を前提としているため、軽量なボイスステートと効率的なミキサー実装(固定小数点での加算/スケーリング)を採ることで低レイテンシ実行を目指しています。
組み込み環境での利用を想定しているため、割り込み駆動でのサンプル生成、DMA経由でのDAC送出、サンプリング周波数の制御、メモリフットプリント抑制(テーブル長やボイス数のパラメータ化)など、実運用に必要な配慮がなされています。拡張点としてはLFOやモジュレーションマトリクス、MIDI入力サポート、より高精度なフィルタ(共振付き)や効率的なベクトル化(DSP命令活用)などが考えられます。
プロジェクトの構成
主要なファイルとディレクトリ:
- .clang-format: file
- .github: dir
- .gitignore: file
- CONTRIBUTING.md: file
- LICENSE: file
…他 7 ファイル
(リポジトリのファイル群は小規模で、ソース/ヘッダ、README、ビルド関連やCI設定が中心です)
まとめ
組み込み向けに実践的に最適化された小型シンセライブラリ。拡張性と効率性のバランスが良好。
リポジトリ情報:
- 名前: picosynth
- 説明: A lightweight software synthesizer designed for resource-constrained environments.
- スター数: 4
- 言語: C
- URL: https://github.com/sysprog21/picosynth
- オーナー: sysprog21
- アバター: https://avatars.githubusercontent.com/u/22310129?v=4
READMEの抜粋:
PicoSynth
A lightweight software synthesizer designed for embedded systems and resource-constrained environments.
Features
- Q15 fixed-point arithmetic (no floating point required)
- Modular node-based architecture
- Multiple voice polyphony
- ADSR envelope generators
- Waveform generators: sine, saw, square, triangle, noise
- Low-pass and high-pass filters
- Soft clipper for output limiting
Target Platform
Designed for 32-bit microcontrollers with fast multiply, such as ARM Cortex-…