0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Unityでイントロ付きBGMを流したい

Last updated at Posted at 2023-06-26

はじめに


誰もが一度は悩むUnityでのイントロ付きループBGM再生。
ADX2を使える環境ならまぁ使いますよねというところですが、諸事情で自力で頑張らないといけないこともあります。
スクリプトで解決するのもアリですが一時停止対応とか音源の分割とかそれなりに大変です。
色々調べて先人の足跡から得た解法をまとめました

こんな人が対象

Unityで音を鳴らしたことがあり、波形編集のツールを見て理解はできないが操作はできそう…
この辺がラインです

用意するもの

Unity 2019.4 : テスト環境のバージョンですが多少古くても、当然新しくても問題なさそう
適当な.wav : ループさせたい音源
Wavosaur 1.8 : ループポイントを設定するために使います

いざループポイントを追加

Wavosaur は作者様のサイトや検索でかかるところから自己責任でDLをお願いします。
日本語化パッチも検索で出てきますのでお好みでお願いします。
用意ができたらWavosaurを起動
スクリーンショット 2023-06-27 004332.png
・ファイルブラウザか、メニューバーのファイルから対象の音源を開き、画像右下のような波形のウィンドウが出ることを確認

・メニューバー>ツール>ループ>ループポイントを作成 を選択

・ループの始点終点のサンプル数がわかっている場合は メニューバー>ツール>ループ>プロパティ を選択し、ダイアログからそれぞれ設定
スクリーンショット 2023-06-27 004351.png
・サンプル数がわかっていない場合は、右下の波形ウィンドウ内の Loop startLoop end を動かして設定

ループポイントの設定が終わればファイルを保存し音源の用意は終了です

鳴らしてみる

    AudioSource audiosource;

    public void Play( AudioClip clip )
    {
        audiosource.clip = clip;
        audiosource.loop = true;
        audiosource.Play();
    }

疑似コードですがこんな感じでスクリプトからイントロ付きBGM再生ができちゃいます。
長さ不定になりますが、再生中にloopをfalseにすることでアウトロもできなくもないと思います。
もちろん、Unityエディタから音源のインスペクタにある再生機能でもしっかりループ再生ができていることが確認できます。

どういう仕組みか

WaveFile へsmplチャンクを追加しそこにループ情報を書き込むことでUnityがいい感じに対処してくれているようです。
今回は Wavosaur でループポイントを埋め込みましたが、smplチャンクを編集できるツールであればそちらでももちろん可能ですし、自分でWaveFileを編集するもよしです。
WaveFileだけでなくVorbisもループに対応しているようなので元音源をVorbisで作るのも、Unity側のCompressionFormatをVorbisにするのもOKでした。

最後に

多くの先人の皆様の知見をまとめただけのものです
皆様に感謝を

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?