Unity:複数のオーディオクリップを順番に再生して再生時間をバーで表示

今回は複数のオーディオクリップを順番に再生する手順を試してみました。

アセットストアから Seamless Loop and Short Music をダウンロード

まずはアセットストアから無料のオーディオアセット Seamless Loop and Short Music をダウンロード。

収録内容は、短いシームレスなループのオーディオクリップが19ファイル(OGG形式)と…

繰り返しで構成されたオーディオクリップが24ファイル(OGGとMP3形式混在)あります。

デモシーンとしてプレイヤーのシーンが含まれていて、オーディオクリップの再生制御の勉強にもなります。

シーンを開いて[Inspector]ウィンドウでスクリプトコンポーネントを確認すると、このように配列に収録ファイルが入っています。

シーンの作成

まずはシーンを作成します。今回は2Dシーンなのでライトオブジェクトは削除して Main Camera コンポーネントの Projection > Orthographic に変更しました。

必要なUIオブジェクトを配置。[Game]ビューはこんな感じになりました。

オーディオクリップを順番に再生するスクリプト

次にスクリプトを作成します。主な処理はこのような感じです。

  • オーディオクリップを配列に格納
  • 配列に格納されたオーディオクリップの長さを取得してコルーチンで再生時間を制御
  • 再生が終わると次のオーディオクリップを再生
  • オーディオクリップの長さと再生時間を UI Image コンポーネントの幅の値に変換して表示
  • オーディオクリップのファイル名を取得して UI Text コンポーネントで表示

スクリプト AudioPlayer コンポーネントの設定

[Hierarchy]ウィンドウ > [Create]ボタン > Create Empty を選択。オブジェクト名を Audio Player に変更。作成したスクリプト Audio Player をアタッチ。自動的に AudioSource コンポーネントがアタッチされます。 [Inspector]ウィンドウで確認するとこのようになっています。

変数フィールドにそれぞれ必要なオブジェクトをドラッグ&ドロップで割り当てます。配列 Audio Clip には無料のオーディオアセット Seamless Loop and Short Music からショートループのファイル19ファイルを登録しました。

今回の処理の問題点

再生中に一時停止をした場合、コルーチンの WaitForSeconds でオーディオクリップの再生時間を制御しており一時停止中の時間を考慮していません。なので再生を再開すると、再生途中で次の曲に切り替わってしまいます。

再生時間の制御をオーディオクリップの長さと再生時間を比較する条件で行えば大丈夫そうな気がしますが…今後の課題として保留したいと思います。

WebGL

今回の内容をWebGLでビルドしてみました。画像クリックでファイルがダウンロード、再生されます。スタート時はオーディオミュートにしています。画面右下のボタンでミュート解除できます。(ダウンロードサイズ:約17MB)

参考:Unity スクリプトリファレンス

AudioSource.clip – Unity スクリプトリファレンス