前提
この記事は、Unity アセット冬のアドベントカレンダー 2019 のために書かれた記事です。
Unityアセット冬のアドベントカレンダー 2019 Winter! – Unity公式 Asset Portal
この記事では、簡単にイントロ付きループBGMが作れるアセットIntroLoopをご紹介したいと思います。
IntroLoopとは?
UnityのデフォルトのAudio Sourceでは、BGMのループはBGMの最初と最後をループすることしかできません。
しかしBGMによっては、まずイントロ部分を流しその後のループ部分をループしたいという、イントロ付きループをしたい場合があります。
IntroLoopでは、下図のようにIntro BoundaryとLooping Boundaryを設定することで自由にループ部分を指定することできます。
このアセットを使う利点を細かく挙げると、
- イントロ付きループをするために、オーディオファイルをカットしたりする必要はない
- イントロ付きループをするためのプログラムを書く必要はない。(再生処理などのコントロールはプログラムで実行します)
- ループ地点の数値指定なので、ループの設定がとても楽
- オーディオファイルのメモリリリースを適切に行なってくれるのでモバイルでも安心
- ポーズ、リジューム、フェードイン、フェードアウト、クロスフェードなど多様なコントロールができる
- オーディオごとにボリューム、ピッチの設定、ループ形式(イントロループ、ループ、ループなし)の設定が可能
- AudioMixerGroupとの連携も普通にできる
- フルソースコード、Package Manager対応、コーディングも良い
などがあります。
使い方
使い方はとても簡単です。大体4つの工程に分かれます。
- オーディオファイルを用意する
- オーディオファイルのループポイントを調べる
- IntroloopAudioアセットファイルを作成する
- IntroloopPlayerシングルトンを使ってIntroloopAudioを再生する
1. オーディオファイルを用意する
イントロ付きループを行うオーディオファイルを用意します(wav/ogg/mp3など)。
用意したオーディオファイルをUnityにインポートして、AudioClipアセットファイルとしておきます。
2. オーディオファイルのループポイントを調べる
イントロ付きループの2つのループポイント(Intro BoundaryとLooping Boundary)の位置をミリ秒単位で調べます。
ループポイントのを調べるためには、Audacityなどのオーディオ編集ソフトを利用します。(私はAdobeのAuditionを使っています。こちらも便利です。)今回はIntroLoopの紹介で、オーディオ編集ソフトを用いたループポイントの調べ方は記事の範囲を逸脱しますので省略します。
Audacity ® | Free, open source, cross-platform audio software for multi-track recording and editing.
なお、オーディオ編集ソフトでループポイントを調べるのがベストな方法ですが、
Unity内でループポイントを微調整していくだけでもループポイントを設定できると思います(時間がかかるかもしれません)。
3. IntroloopAudioアセットファイルを作成する
1.で用意したAudioClipアセットファイルを右クリックして出てくるメニューから、Create > Introloop > IntroloopAudioでIntroloopAudioアセットファイルを作成します(下図の1.)。
作成したIntroloopAudioアセットファイルを選択して、設定を行います(下図の2.)。
Audio Clipには対象のオーディオファイルのAudioClipアセットファイルを指定します。
Volume、Pictchを設定します。オーディオファイルの音が大きすぎたり、小さすぎたりする場合にここで調整できます。
LoopモードはIntroloop/Loop/Non Loopingから選べます。イントロ付きループをしたい場合はIntroLoopを選びます。Loopの場合はオーディオファイルの最初と最後をループします。Non Loopingの場合はループしません。IntroLoopでは、これらのモードを同じIntroloopPlayerシングルトンで操作できます。
さらに、モードがIntoroloopの場合は、上で説明した2つのループポイント(Intro BoundaryとLooping Bundary)を設定して、イントロ付きループの境界を指定します。
4. IntroloopPlayerシングルトンを使ってIntroloopAudioを再生する
以下のようなコードを書いて3.で用意したIntroloopAudioをコントロールします。
コントロール内容は(再生する/ポーズする/再開する/シークする/停止する)などです。
using System;
using System.Collections;
using UnityEngine;
using E7.Introloop;
public class MyTest : MonoBehaviour
{
public IntroloopAudio introloopAudio;
// 再生する
public void Play()
{
// Introloopならイントロ付きループで、
// Loopならループで、
// Non loopingならループなしで再生されます。
IntroloopPlayer.Instance.Play(introloopAudio);
// フェードインしながら再生もできる
// IntroloopPlayer.Instance.Play(introloopAudio, fadetime);
}
// ポーズする
public void Pause()
{
IntroloopPlayer.Instance.Pause();
// フェードアウトしながらポーズもできる
// IntroloopPlayer.Instance.Pause(fadetime);
}
// 再開する
public void Resume()
{
IntroloopPlayer.Instance.Resume();
// フェードインしながら再開もできる
// IntroloopPlayer.Instance.Resume(fadetime);
}
// 指定した時間にシークする
public void Seek(float elapsedTime)
{
IntroloopPlayer.Instance.Seek(elapsedTime);
}
// 停止する
public void Stop()
{
IntroloopPlayer.Instance.Stop();
// フェードアウトしながら停止もできる
// IntroloopPlayer.Instance.Stop(fadetime);
}
}
上記コードのように、IntroloopAudioの(再生する/ポーズする/再開する/シークする/停止する)はIntroloopPlayerを使って行われます。
IntroloopPlayerはシングルトンとして実装されています。シングルトンについては以下を参照してください。
その他、IntroloopPlayerにはAudioMixerの設定項目があります。
ここにAudioMixerを指定することで、AudioMixerの機能を利用できます。
デモでIntroLoopの挙動を確認
デモプログラムはここで確認できます。購入前に確認してみましょう。
サポートは日本語で大丈夫のようです
作者様はタイの方のようですが、Forumを見たところ日本語でのサポート可能なようです。日本人でも安心してアセットを利用できます。
Introloop - Easily play looping music with intro section - Unity Forum
リンク
関連するリンクのまとめです。
最後に
とても便利なので、Unityでお手軽にイントロ付きループをしたい人は是非IntroLoopを使いましょう!