うにty生活

UnityChanを生活させたい

Audioつけてみた+3Dサウンドの検証 #13

 

どうもラブヘイトです

今月は1日も0PVがありません!(今の所)

モチベーション上がるぜ

 

自分もだんだんとUnityを理解できてきているのか、過去の記事でちょっとここ違うな・・・とか出てきましたので

それも少しずつ直して正確でわかりやすい情報を伝えられたらなと思います

 

今回はUnitychanの走る音をつけます

そしてUnityには3Dサウンドという機能があるので、実際にイヤホンで音の聞き分けができるか検証していきます!

 

 

◆はじめに

パーティクルの記事でもちょいちょい言ってましたが、

静止画やgifだけでは伝わりにくいことも増えてきましたので

youtubeにアカウントを作成しました!

Hate Love - YouTube

これからは動画も取り入れて記事を書いていきますね

 

◆AudioClipのインポート・設定

対応しているフォーマットはこちらから参考にしてください

docs.unity3d.com

 

オーディオコンポーネントを追加したらこんな感じになります

f:id:tubakihimeLoveHate:20181130113006p:plain

では説明

 

f:id:tubakihimeLoveHate:20181130113129p:plain

Force To Mono

音声データをモノラルにする項目

ステレオはスピーカー2つ、モノラルはスピーカー1つで音を出します

基本ステレオで大丈夫です

Normalizeは音を均一に大きくする方法です

 

Load In Background

メインスレッドとは別のスレッドでオーディオファイルの読み込みをしてくれます

ここはチェックを入れておきましょう

 

Ambisonic

アンビソニックというのは360°全方位の音を再生するときに使用します

VRを使用するアプリであれば必要ですが、今回説明は割愛します

 

ここからは下のOverride〜の項目の説明です

LoadType

インポートするオーディオファイルをどのように展開するか決める項目

 

・Decompress On Load

ロードの際に解凍される、短い音(一瞬で終わる音)などはこれがいい

 

・Compressed In Memory

再生される直前に解凍される、ファイルは軽くなるが再生時に多少処理が入ってしまう

長いオーディオに適用したら遅れそう

 

・Streaming

ストリーミング再生なので、再生されながらメモリに読み込んでいきます

→オーディオ全てをメモリに読み込まなくてよくなる

 

Preload Audio Data

onの場合はシーン再生時にオーディオクリップが読み込まれる

offにしている場合はスクリプトの方で制御が必要

じゃあ多少の制御は必要になっても、offにしている時の方がシーン読み込みが早くなるのかな?また検証してみなくては・・

 

Compression Format

サウンドファイルの圧縮方法

 

・PCM

圧縮をかけない方式、ファイルサイズがでかくなる代わりに解凍させる時間などは必要ない

 

・Vorbis

Ogg Vorbis形式で圧縮をかける。聞いたことない形式だな・・・

 

 ・ADPCM

ADPCM形式で圧縮,Vorbisより圧縮率が低く音の劣化は少ないです

 

Quality

どれだけの圧縮率か選択する。Vorbis圧縮形式だけで使用可能

下にサイズのプレビューも出てくるので便利

 

◆Audio Souceのインスペクター

f:id:tubakihimeLoveHate:20181130113346p:plain

 

AudioClip

音声データを紐づける項目

 

Output

オーディオミキサーグループを割り当てることができます

オーディオミキサーはWindow>Audio>Audio Mixerから新しく作成可能

f:id:tubakihimeLoveHate:20181130113230p:plain

 Outputに設定できるのはこの中のMasterなので、ここの名前を変えていないと紛らわしくなるので注意

 

Bypass Effects

「バイパス」はオーディオ系の単語で加工しないで音を出すという意味らしいです

つまり原音をそのまま出している状態(Mixerで加工したのもは反映される)

なのでBypass Listener Effectsも聞こえ方の設定かと、そんなに大切ではないです

 

Play On awake

シーン再生時に再生するかどうか

 

Priority

シーン内のオーディオの優先度を決める、優先度が高いほどそのオーディオに優先的にリソースが割り当てられるのかな

 

StereoPan

右と左どっちのスピーカーから聞こえるか設定する

3Dサウンドを適用している場合はうまく動作しない

 

Spatial Blend

3Dサウンドかどうか値を1にすると3Dサウンドになる

下のグラフで詳細に聞こえ方を変更できます

f:id:tubakihimeLoveHate:20181130113413p:plain



 

◆実際に音をつけてみる

音をつけるのは簡単です

Audioクリップに再生したいオーディオを選択してPlayOnAwakeにチェックを入れれば再生されます

 

ただこのままでは問題があります

・歩いてもないのに再生されている

・このUnityちゃんは走ることもできるため走った時、足の動作に合わない

これら2つの問題を解決していきます

 

新たに「WalkAudioPlayer」という名前でスクリプトを作成

Unitychanにアタッチしてください


public class walkAudioPlayer : MonoBehaviour {

Animator animator;
AudioSource source;

bool walkOn =true;


    // Use this for initialization
    void Start () {
        animator = GetComponent<Animator>();
        source = GetComponent<AudioSource>();
    }
    
    // Update is called once per frame
    void FixedUpdate () {
        if(animator.GetBool("walking")||animator.GetBool("run")){
            if(walkOn){
                source.Play();
                walkOn =false;
            }
        }else{
            source.Stop();
            walkOn = true;
        }

        if(animator.GetBool("walking"))source.pitch=1;
        if(animator.GetBool("run"))source.pitch=2;

    }


}

 

FixedUpdate関数でプレイヤー(Unityちゃん)の歩くパラメーター(walking)もしくは走るパラメーター(run)が有効になっているかどうか取得していきます

このパラメーターの部分がわからない場合は過去の記事を参考にしてみてください

 

tubakihimelovehate.hatenablog.com

 

意外と難しかったのが、「Update内で一度だけ再生させる」ということでした

Play()をするたびに足音が最初の部分だけ連続再生されて、どうしよ・・・ってなりましたがなんとかこういう形で割と簡潔に記述できました

 

完成した動画です

youtu.be

 

◆3Dサウンド

 最後に3Dサウンドがちゃんと動作しているか確認してみます

youtu.be

丸い玉から音が出ています

オーディオの録音方法があまりよくなかったため伝わりにくいですが

右と左できちんと分かれているし、遠近で音量が変わって行くのがわかります!

なんて便利な機能なんだ!

 

ということで初めて動画を出してみましたが動画はいいとして音が・・・

また色々試してみます

それではまた