FreelyApps

個人によるアプリ開発の日記です。アプリの収入だけで生活できるようになるのが目標です。UnityでAndroid向けのゲームアプリを作成しています。


    アプリ『トランプ・ジン・ラミー』を公開しました。
    Android/iOS https://goo.gl/PYKFYG

    タグ:サウンド

      このエントリーをはてなブックマークに追加 Clip to Evernote
    音楽ファイルはフリー素材を使うことがあるのですが、ゲームに使う上で困ったことがありました。それは先頭部部分に入っていた無音です。

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

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

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

    nosound

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

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

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

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

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

    pre-nosou


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

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

      このエントリーをはてなブックマークに追加 Clip to Evernote
    BGM用のファイルをインポートするとデフォルトの設定がオーディオクリップに適用されます。
    audioclipsetting

    これをインスペクタ―上から手動で設定することが普通だと思いますが、数が多くなってくるといちいち設定をするのが面倒になります。手動での設定は行うことを忘れることもあります。
    これらを解決するには自動で設定を行えるようにするのが一番です。

    AssetPostprocessorというクラスを継承してクラスを作ります。AssetPostprocessorはアセットのインポートや変更時になんらかの処理を行うために使うクラスです。
    Editorフォルダの下にスクリプトをおかなければいけません。(Unity5からなのかEditorフォルダの下に置かなくても動作するようになっていました。しかしながら、互換性のためEditorフォルダに置くことを推奨します。) 

    上のスクリプトはBGMをインポートしたときにオーディオクリップの設定を行うサンプルです。
    BGM_IMPORTERシンボルが定義されていれば、Resources/Sound/BGMにおかれたオーディオクリップをストリーミング再生で圧縮フォーマットはOgg Vorbisというように設定します。
    新しくオーディオファイルを追加したときはこのスクリプトの処理が行われます。既に追加してあるファイルに処理を通したい場合は、リインポートを行うかオーディオクリップの設定を変更すると処理が通ります。
    リインポートはアセットを選択した状態でAssetsメニュー->Reimportを選択するかアセットを右クリックして出るメニューからReimportを選択すればできます。フォルダを指定するとそのフォルダ以下をリインポートすることもできます。

    上記のスクリプトはBGM用に作ったものですが、少し改造すればSEやVoiceといったBGMとは少し設定を変えるであろうオーディオクリップにも使えます。
    フォルダを分けるのが素直な方法だと思います。 Resources/Sound/SEとかResources/Sound/Voiceにあるファイルだったらで場合分けするというのがお手軽です。

    こういった自動化用のスクリプトはEditor拡張というやり方でUnityは柔軟に対応することができるようになっています。 Editor拡張は面倒なことが多いのですが、一度作ってしまうと後の作業を劇的に減らしてくれる可能性を秘めています。
    同じような作業を繰り返していると感じているときは自動化できないかと考えてみると楽ができます。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity4ではモバイル版のAudioClipの圧縮はMP3で行われるようになっていました。MP3はライセンス的に厳しいです。ここに具体例が挙がっていますが、ゲームで5000本以上配布したら$2500という料金というものです。タイトルごとということなので、1作ごとに約30万円程度の利益がでないと赤字です。

    Unity5ではモバイル版のAudioClipの圧縮がOgg Vorbisに変わっています。すべてのプラットフォームでOgg Vorbisがデフォルトになったようです。

    公式の解説はまだ更新が遅れているようで、Unity4のときの解説が残っています。いずれ更新されると思います。
    以下は2015/6/25時点でスクリーンショットを撮ったものです。一番下のPlatform specific detailsという項目があり、モバイルの音データの圧縮はMP3になると書いてあります。

    audioclip-miss

    ライセンス料が発生すると困る場合もあるでしょう。私も困る一人です。
    気になったのでUnityに問い合わせたところ問題なかったということでした。 

    このページのトップヘ