[WEB App] FluidSynth Web Player v1.0 — SoundFont / MIDI プレイヤー & Piano Roll ビジュアライザー
FluidSynth Web Player v1.0
WebAssembly(WASM)環境で動作する SoundFont レンダラー FluidSynth 2.4.6 とブラウザ標準の Web Audio API を組み合わせ、外部サーバーを一切介さずに .sf2 / .sf3 音源と MIDI (.mid) ファイルを完全レンダリング再生する Web アプリケーション。
自作の軽量 Standard MIDI File (SMF) パーサーによるノート解析をはじめ、Synthesia 風の Canvas2D ピアノロールビジュアライザー、AudioContext と同期するスムーズな Smooth Tick 補間描画、大容量 SoundFont の IndexedDB ローカルキャッシュ、および Reverb / Chorus などの DSP パラメータリアルタイム制御機能を統合しています。
FluidSynth Web Player v1.0
WebAssembly 版 FluidSynth と Web Audio API で動作する SoundFont / MIDI プレイヤー。Synthesia 風 Canvas2D ピアノロール、IndexedDB キャッシュ、Reverb/Chorus 制御対応。
lain-lab.comスクリーンショット
メイン UI & ピアノロール
動画(GIF)
CREDIT
音源には S. Christian Collins 氏が制作・配布している SoundFont「GeneralUser GS」を使用しています。
S. Christian Collins - Pianist, Composer, Virtual Instrument Designer
Home of free SoundFonts, sheet music and more.
www.schristiancollins.com特徴
- ブラウザ完結型の WASM FluidSynth 音源エンジン:
FluidSynth 2.4.6 を WebAssembly にコンパイルし、外部サーバーを使わずに.sf2/.sf3SoundFont と MIDI ファイルを高速レンダリング。 - Synthesia 風 60fps Canvas2D ピアノロール:
MIDI チャンネルごとに色分けされた落下ノートアニメーションと、発音時の鍵盤アクティブ発光エフェクト。 - 高精度 Smooth Tick 補間アルゴリズム:
AudioContext.currentTimeと BPM 換算を組み合わせ、カクつきのないスムーズなノートスクロールを実現。 - IndexedDB による大容量 SoundFont キャッシュ:
数十MB級の General User SF2 等をブラウザに自動永続化し、2回目以降のアクセスで瞬時にロード。 - リアルタイム Synth パラメータ制御:
Master Gain、Polyphony、Interpolation(補間モード)、Reverb (Room Size, Damping, Level)、Chorus (Voices, Level, Speed) の即時調整。 - 16ch 独立ミキサー & アクティブ音量表示:
16 チャンネル各々のインストゥルメント名表示と、リアルタイムのレベルメーター。
モジュール構成
| モジュール名 | 主要機能・パラメータ |
|---|---|
| SOUNDFONT / MIDI DROP | .sf2 / .sf3 SoundFont および .mid ファイルのドラッグ&ドロップ読み込み、クリア機能 |
| MIDI CHANNELS (1-16) | 全16チャンネルの楽器名表示、リアルタイム音量(レベル)メーター |
| PIANO ROLL VISUALIZER | Synthesia 風 2D ピアノロール、チャンネル別カラー、ノート落下 & 鍵盤アクティブ点灯 |
| SYNTH PARAMS (MASTER) | Gain (0.0 |
| SYNTH PARAMS (REVERB) | Enable トグル, Room Size, Damping, Level コントロール |
| SYNTH PARAMS (CHORUS) | Enable トグル, Voices, Level, Speed (Hz) コントロール |
| PLAYBACK & TIMELINE | Play / Stop ボタン、シークバー、再生時間 / 全体時間 / 総 Tick 数表示 |
使い方
1. SoundFont (.sf2 / .sf3) のロード
左上のドロップエリアに SoundFont ファイルをドラッグ&ドロップするか、クリックしてファイルを選択します。一度読み込んだ SoundFont は IndexedDB に自動キャッシュされるため、次回から即時に使用可能です。
2. MIDI (.mid) ファイルの再生
同様にドロップエリアに MIDI ファイルを投入します。自動的に SMF 解析が行われ、中央のピアノロールにノートバーが展開されます。下部の Play ボタンまたはシークバー操作で演奏を開始できます。
3. 音響効果・シンセパラメータの調整
右側のパネル(SYNTH PARAMS)で、リバーブの広がり(Room Size)やコーラスの深さ、最大同時発音数(Polyphony)などを曲に合わせて調整します。
4. チャンネルモニター
左下の MIDI CHANNELS パネルで、現在再生中の各トラックの割り当て楽器名とレベルメーターをモニタリングできます。
技術スタック
- WebAssembly (FluidSynth 2.4.6) — SoundFont リアルタイムレンダリングエンジン
- Web Audio API (AudioContext / AudioWorklet) — PCM オーディオストリーム出力 & 時間同期
- Canvas2D API — 60fps Synthesia 風ピアノロール描画
- IndexedDB — 大容量 SoundFont バイナリのローカル永続化キャッシュ
- JavaScript (ES6+) — 自作 SMF パーサー・Smooth Tick 補間ロジック
- Astro — Webアプリケーション基盤
技術記事
[Astro] #143 FluidSynth WASM と Web Audio API で構築する SoundFont / MIDI プレイヤー — Piano Roll ビジュアライザー実装記録
WebAssembly 版 FluidSynth 2.4.6 と AudioWorklet を活用し、ブラウザ上で SoundFont (.sf2/.sf3) を使って MIDI ファイルを完全レンダリング・再生する Web プレイヤーの実装記録。
lain-lab.com更新履歴
- [2026-09-12]: v1.0 初回公開。
- WASM 版 FluidSynth 2.4.6 と AudioWorklet 接続による Web MIDI プレイヤーエンジン構築
- 自作 SMF パーサーと Synthesia 風 Canvas2D ピアノロールビジュアライザー搭載
- AudioContext 同期による Smooth Tick 補間スクロール実装
- IndexedDB による SoundFont ファイルの永続化ローカルキャッシュ
- 16ch インストゥルメントモニターおよび Reverb / Chorus 等のリアルタイム Synth パラメータ制御機能