先頭部分の無音をカットする

音楽ファイルはフリー素材を使うことがあるのですが、ゲームに使う上で困ったことがありました。それは先頭部部分に入っている無音です。

mp3やwavといった音楽ファイルの先頭に無音の部分が入っていることがあります。作る都合上発生するのか、何らかの理由があってそうなっているのかわかりませんが、そのようなものが存在します。

この無音部分はゲームで使う上で面倒です。ボタンを押したときのSEなどレスポンスが要求されるUIにおいて頭に無音があるSEを流してしまうと、反応が悪く感じられます。少し遅れて再生されるような印象なので、ずれていて一度気になると気持ち悪いものです。

無音が入っている音声ファイルを調べてみると、下のように左端から少しの間無音になっていのがわかります。ほんの0.1秒くらいですが、再生するとわずかに遅れる感じがします。

Unity Editor上の画面でも無音部分があることを確認できます。
調べたい音声ファイルを選び、インスペクタ―の下の方にあるプレビュー画面を見ると波形が表示されています。左側の方を良く見ると、波形が一直線上になっていて無音であることがわかります。

解決方法は2通りあります。
素材を加工して無音部分を削除する方法とプログラムで再生開始位置をずらす方法です。

素材を加工するにはその素材が加工しても良くなくてはいけません。フリー素材といっても商用利用が可能なのか作者の情報を載せることが必要なのかといった利用規約についてはそれぞれ異なるため、必ず確認しましょう。加工可能と明記していない素材である場合は、作者に連絡するか使わないのが賢明です。

素材が加工して良ければ、Audacityというフリーのツールを使って無音の場所を消します。Audacityは色々なファイル形式に対応しているのですが、MP3、WAV、Ogg Vorbisに対応しているのが非常に使いやすいです。
どのような音楽ファイル編集ソフトでも大抵切り取りは入っているようなので別の編集ソフトを使っても同じ作業はできます。

編集作業は先頭部分の無音と思われるところを選択して、削除するだけです。Audacityでの編集操作をgifでキャプチャーしたので下の動画を見れば操作がわかると思います。
無音の領域を消した後に「オーディオの書き出し」というコマンドを選び、保存することで修正を行った音楽ファイルが得られます。

もうひとつの解決方法のプログラムでやる場合は、マニュアルに載っているようにAudioSource.timeに再生場所をセットした状態でAudioSource.Playを呼びます。こうすると自由に再生位置を変えられるため、素材を変更しなくても無音を飛ばして再生することができます。
私の場合はSEの再生にAudioSource.PlayOneShotを使っていたので、AudioSource.timeを変更しても再生位置を変えることができませんでした。おそらくはAudioSource.Playだけが設定を反映されるのでしょう。

プログラムで無音をなくす方法はお勧めしません。調整が非常に難しく時間がかかってしまいます。リソースを編集する方法は専用のツールということもあり、意外と簡単に精度良く加工できます。