wavesurfer.js
Interactive Audio Showcase

音を、波形魅せる。

wavesurfer.js は、Web Audio API の上にCanvas波形描画とプラグイン群を載せたオープンソースのオーディオUIライブラリ。 このページの波形はすべて本物 — クリック・ドラッグ・録音まで、実際に触って確かめられます。

Lo-Fi Loop を読み込み中
Lo-Fi Loop
82 BPM / Cmaj7 progression
波形をデコード中…
0:00.0 / 0:00
SPEED
VOL

波形をフォーカスして Space 再生 · ←→ シーク · ↑↓ 音量

0依存ライブラリ
Web Audio API ネイティブ
8公式プラグイン
リージョン/録音/周波数 ほか
60fpsCanvas描画
数千ピーク点でも軽量
Capabilities

プラグインで広がる表現

コアは軽量な波形描画。必要な機能だけをプラグインとして追加できるのが wavesurfer.js の強みです。

Canvas波形描画

core

数千のピーク点をCanvasで軽量描画。バー/連続線/分割チャンネルなど自由自在。

リージョン

regions

区間の作成・ドラッグ・リサイズ・ループ再生。文字起こしやマーカーUIに。

スペクトログラム

spectrogram

FFTによる周波数ヒートマップ。Mel/Log/Linearスケールに対応。

タイムライン

timeline

目盛り付きの時間軸を波形上下に表示。間隔やラベルも調整可能。

ミニマップ

minimap

全体を俯瞰する縮小波形。ズーム時のナビゲーションに最適。

ホバーカーソル

hover

マウス位置の時間をツールチップ表示。シーク前のプレビューに。

ズーム

zoom

ホイール/ピンチ/スライダーで滑らかに拡大縮小。サンプル単位まで。

録音

record

MediaRecorderでマイク録音。ライブ波形をリアルタイム描画。

エンベロープ

envelope

音量オートメーション曲線をドラッグで編集。フェードやダッキングに。

01Regions

区間を切り出してループ再生

波形上をドラッグすると区間(リージョン)を作成できます。区間はドラッグで移動・リサイズでき、クリックで頭出し再生。ループをONにすると区間を繰り返します。曲のフレーズ確認や文字起こしUIの基盤になります。

wavesurfer.js/dist/plugins/regions.esm.js — enableDragSelection() / region.play()
02Timed Comments

波形にタイムコメント

マーカー(幅0のリージョン)を使えば、SoundCloud のような時間付きコメントUIが作れます。再生位置を選んでコメントを追加すると波形上にピンが立ち、一覧やピンのクリックでその瞬間へ頭出しできます。

regions.esm.js — addRegion({ start, content }) / on('region-clicked')
03Spectrogram

音を周波数で可視化

FFT解析による周波数スペクトログラム。時間(横)×周波数(縦)×強度(色)で音色を可視化します。Mel/Log/Linearのスケール切り替えに対応。打楽器系トラックでは縦のアタック、パッド系では倍音の帯がはっきり見えます。

spectrogram.esm.js — scale: 'mel' | 'logarithmic' | 'linear'
04Web Audio EQ

フィルタでリアルタイムに音作り

wavesurfer は Web Audio API の上に載るので、再生中の音声を BiquadFilterNode の5バンドEQに通せます。スライダーを動かすと音色と右のスペクトラムが即座に変化。「波形ライブラリ」を超えてオーディオ処理基盤になることを示す一例です。

ws.getMediaElement() + AudioContext.createBiquadFilter() / AnalyserNode
05Envelope

音量をカーブで自動化

エンベロープ・プラグインで音量オートメーションを波形に重ねて描画。ポイントをドラッグしてフェードやダッキングのカーブを作れます。再生すると音量がカーブに追従し、左の VOL メーターが動きます。BGMのダッキングやフェード処理に。

envelope.esm.js — setPoints([{ time, volume }]) / on('points-change')
06Zoom + Minimap

サンプル単位までズーム

マウスホイール・ピンチ・スライダーで滑らかにズーム。拡大中も下のミニマップで全体を俯瞰でき、クリックで瞬時に移動できます。波形編集ツールのような操作感を数行で実現します。

zoom.esm.js + minimap.esm.js — ws.zoom(pxPerSec)
07Rendering Styles

同じ音源、違う表情

色・バー幅・整列・分割チャンネルなどのオプションだけで、まったく異なる見た目に。すべて同一の音源を異なるスタイルで描画しています。クリックで再生できます。

08Record

マイクからライブ録音

MediaRecorder と連携し、マイク入力をリアルタイムに波形描画。録音停止後はそのまま再生・ダウンロードできます。ボイスメモやオーディオ投稿UIにそのまま使えます。

record.esm.js — startRecording() / on('record-end', blob => ...)