wavesurfer.js【保存版】音源の波形表示&プレイヤー機能を簡単に実装するライブラリのまとめ

サイトで音源を扱うとき、自分で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で、mp3wavが指定可能です。

音源の再生・停止ボタンは以下で追加できます。

<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',
  キー : 指定したい値,
  キー : 指定したい値,
});

よく使うものをまとめます。

キーデフォルト説明
backgroundColorstringなし波形の背景色
barGapnumberなし波形と波形の隙間
barHeightnumber1波形の高さ
barRadiusnumber0波形の丸さ
barWidthnumberなし波形の太さ
cursorColorstring#333シークバーの色
cursorWidthinteger1シークバーの太さ
hideScrollbarbooleanfalse水平スクロールバーを隠すか
hideCursorbooleanfalseシークバーを隠すか
progressColorstring#555再生された部分の波形の色
splitChannelsbooleanfalseチャンネルごとの波形を生成するか
waveColorstring#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の強みです。

音源を扱うサイトを作るのであれば、ぜひ利用をしてみてください。
簡単にイメージ通りの操作ができると思います。

当ページにてサンプルで再生される音源は、下記サイトよりお借りしました。
ありがとうございました。

この記事が気に入ったら
いいね または フォローしてね!

SHARE
  • URLをコピーしました!

コメント

コメントする

目次