サイトで音源を扱うとき、自分で1から機能実装するのは非常に大変です。
しかし無料のライブラリ「wavesurfer.js」を使えば問題はありません!
- サイトに音源を埋め込んで、波形を自動で表示して欲しい
- 再生・停止などのボタンを追加したい
- 波形の色を自由に調整したい
などの要望を簡単に満たせるライブラリなので、ぜひ音源を扱うサイトにおすすめしたいです。
例えば、下記のような波形表示がとても簡単に生成できます。
この記事では基本的な使い方から高度なカスタマイズまで網羅しているので、wavesurfer.jsを使ってみたい人には最後まで読んで欲しいです。
音源の波形表示・再生コントロールに便利なライブラリ wavesurfer.js とは
wavesurfer.jsとは、WEBサイトに音源を埋め込んで波形を自動で生成し、再生・停止・ボリューム調整などのコントロールを簡単に実装できるJavaScriptベースのライブラリです。
wavesurfer.jsの公式サイトはこちら↓
無料で利用できるうえに、かなり高機能なので音源を扱うサイトではかなり活躍するライブラリと言えるでしょう。
実際に下記の音源販売サイトでも使用されています。
実装もかなり簡単です。
wavesurfer.js の導入方法・基本的な使い方
まずは基本的な使い方をご紹介します。
HTMLファイルにて下記タグを埋め込んでください。
<script src="https://unpkg.com/wavesurfer.js"></script>
波形などを表示したい場所にIDを付与しておきます。
今回は#wave
としました。
<div id="wave"></div>
その上で、波形を表示するには以下のJavaScriptでOKです。
var wavesurfer = WaveSurfer.create({
container: '#wave',
});
wavesurfer.load('http://sample.com/file.mp3');
container
でコンテンツを描画する場所を指定し、load()
にて読み込む音源ファイルのURLを指定しています。
読み込む音源ファイルは絶対パス・相対パスともにOKで、mp3
・wav
が指定可能です。
音源の再生・停止ボタンは以下で追加できます。
<button onclick="wavesurfer.playPause()">再生・停止</button>
onclick
でボタンが押されたときに、先程JavaScriptにて指定したwavesurfer
の再生・停止機能を呼び出します。
ここまでを一度まとめると以下の通りです。
<div id="wave"></div>
<button onclick="wavesurfer.playPause()">再生・停止</button>
<script src="https://unpkg.com/wavesurfer.js"></script>
<script>
var wavesurfer = WaveSurfer.create({
container: '#wave',
});
wavesurfer.load('http://sample.com/file.mp3');
</script>
非常に簡単に実装できますよね。
wavesurfer.jsのカスタマイズまとめ
wavesurfer.jsでは多様なカスタマイズができます。
- 表示する波形のカスタマイズ
- 再生・停止・ミュートなどの音源の操作
- ロード中など、特定の処理がされているときの操作
それぞれカスタマイズ方法をまとめますね。
表示する波形をカスタマイズするオプションまとめ
wavesurfer.jsでは表示する波形をカスタマイズできるオプションが数多く用意されています。
指定するには下記のキー
・指定したい値
のようにしてください。
var wavesurfer = WaveSurfer.create({
container: '#wave',
キー : 指定したい値,
キー : 指定したい値,
});
よく使うものをまとめます。
キー | 型 | デフォルト | 説明 |
---|---|---|---|
backgroundColor | string | なし | 波形の背景色 |
barGap | number | なし | 波形と波形の隙間 |
barHeight | number | 1 | 波形の高さ |
barRadius | number | 0 | 波形の丸さ |
barWidth | number | なし | 波形の太さ |
cursorColor | string | #333 | シークバーの色 |
cursorWidth | integer | 1 | シークバーの太さ |
hideScrollbar | boolean | false | 水平スクロールバーを隠すか |
hideCursor | boolean | false | シークバーを隠すか |
progressColor | string | #555 | 再生された部分の波形の色 |
splitChannels | boolean | false | チャンネルごとの波形を生成するか |
waveColor | string | #999 | 波形の色 |
これらのオプションを組み合わせると、以下のようにすることも可能です。
var waveCustom = WaveSurfer.create({
container: '#wave_custom',
barWidth: 10,
backgroundColor: '#fffaf0',
barGap: 10,
barRadius: 3,
cursorColor: '#8b4513',
waveColor: '#d2b48c',
progressColor: '#ff8c00',
splitChannels: true,
});
実は紹介した以外にもオプションがたくさんあります。
オプションの全一覧は↓
再生・停止・ミュートなどの音源の操作
最初の基本サンプルにて読み込む音源を指定したり再生・停止ボタンを実装したりしたように、波形を表示するだけではなく音源の操作も簡単にできます。
<script>
wavesurfer.load('http://sample.com/file.mp3');
</script>
<button onclick="wavesurfer.playPause()">再生・停止</button>
サンプルと同様、WaveSurfer.create
で生成されたオブジェクトの関数として実行します。
よく使うものはこちら。
関数名 | 処理内容 |
---|---|
load(url) | 読み込む音源の指定 |
playPause() | 音源の再生であれば停止し、停止中であれば再生 |
play() | 音源の再生 |
pause() | 再生中の音源の停止 |
stop() | 音源の再生を停止し、シークバーを最初に戻す |
seekTo(progress) | シークバーを移動させる 0〜1の数値で指定し、0が開始位置、1が終了位置となります |
setMute() | ミュートにする |
toggleMute() | ミュート中であれば解除し、音がなる状態であればミュートにします |
setVolume(newVolume) | ボリュームを指定する 0〜1の数値で指定し、0が無音、1が最大値となります |
isPlaying() | 音源が再生中であればtrue 、再生中でなければfalse を返します |
getDuration() | 音源の何秒目を再生中かを取得します |
上記を組み合わせると以下のようなことも可能です。
<div id="wave_methods"></div>
<button id="waveMethodsPlay">再生する</button><br>
ボリューム:<input type="range" id="volume" value="50">
<!-- wavesurfer.jsの読み込み -->
<script src="https://unpkg.com/wavesurfer.js"></script>
<!-- jQueryの読み込み -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(function(){
//波形の描画
var waveMethods = WaveSurfer.create({
container: '#wave_methods',
});
//音源ファイルの読み込み
waveMethods.load('http://sample.com/file.mp3');
//再生・停止の切り替え
$('#waveMethodsPlay').on('click', function(){
if(waveMethods.isPlaying() === false) {
$('#waveMethodsPlay').text('停止する');
waveMethods.play();
} else {
$('#waveMethodsPlay').text('再生する');
waveMethods.pause();
}
});
//音量の調整
$('#volume').on('change', function(){
let volume = $(this).val() / 100; //0〜1の間の値になるように調整
waveMethods.setVolume(volume);
});
});
</script>
なお、この他にも操作できるものはあります。
詳しくは公式ドキュメントを参照してください。
特定の処理がされているときの操作
wavesurfer.jsでは「再生中に○○○○したい」「音源の読み込み中に○○○○したい」など細かく状況に応じた操作も可能です。
よく使うものは以下の通り。
イベント | 関数 |
---|---|
loading | 音源の読込中 読み込まれた割合を0〜100の数値で引数に持ちます |
ready | 音源の読み込みが完了したとき |
play | 音源の再生中 |
pause | 音源の停止中 |
mute | 音源のミュート中 |
volume | 音源のボリュームが変更されたとき |
seek | シークバーが動かされたとき 動いたあとの位置を0〜1の数値で引数に持ちます |
finish | 音源が最後まで再生されたとき |
このイベントを使えば以下のようなことができます。
<div class="wrapper">
<div id="wave_events" class="hide"></div>
<div id="loading">
<div class="bar"><p></p></div>
<span>0%</span>
</div>
</div>
<!-- wavesurfer.jsの読み込み -->
<script src="https://unpkg.com/wavesurfer.js"></script>
<!-- jQueryの読み込み -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
var waveEvents = WaveSurfer.create({
container: '#wave_events',
});
waveEvents.load('http://sample.com/file.mp3');
//ロード中の処理
waveEvents.on('loading', function(percent){
//読み込みが完了した割合を表示
$('#loading span').text(percent+'%');
//読み込み割合に応じてバーの長さを調整
$('#loading p').css('width', percent + '%');
});
//読み込み完了時
waveEvents.on('ready', function() {
//ロード表示を消す
$('#loading').remove();
//波形の非表示を解除
$('#wave_events').removeClass('hide');
});
</script>
.wrapper {
position: relative;
}
/* 最初は波形部分を隠しておく */
#wave_events.hide {
opacity: 0;
}
/* ロード表示を波形部分の上に置く */
#loading {
position: absolute;
top: 20px;
right: 30px;
}
/* ロード表示のバーのベース部分 */
#loading .bar {
display: inline-block;
position: relative;
width: 100px;
height: 10px;
background-color: #dfdfdf;
}
/* ロード表示のバーの読み込んだ部分 */
#loading .bar p {
position: absolute;
top: 0;
left: 0;
width: 0%; /* JS側で長さを調整するので最初は0%でOK */
height: 10px;
background-color: #333333;
}
/* %表示をするところ */
#loading span {
width: 100px;
text-align: right;
}
※CSSは最低限のため、各要素のサイズ・位置・色は状況に合わせて適宜調整してください
ここで紹介した以外のイベントについては、公式ドキュメントを参照するとよいと思います。
wavesurfer.jsの使い方まとめ
簡単に導入でき、カスタマイズも簡単にできるのがwavesurfer.jsの強みです。
音源を扱うサイトを作るのであれば、ぜひ利用をしてみてください。
簡単にイメージ通りの操作ができると思います。
当ページにてサンプルで再生される音源は、下記サイトよりお借りしました。
ありがとうございました。
コメント