Audioまとめ


## 概要

https://docs.unity3d.com/ja/current/Manual/AudioOverview.html

### 音を出す側

音を出すオブジェクトにスピーカー（`AudioSource`）をつけて、そこに音源（`AudioClip`）をセットする。

AudioSource
https://docs.unity3d.com/jp/current/Manual/class-AudioSource.html

AudioClip
https://docs.unity3d.com/jp/current/Manual/class-AudioClip.html


### 音を聞く側

`AudioListener`を1シーンに1つ用意する。主にメインカメラがリスナーオブジェクトになる。

AudioListener
https://docs.unity3d.com/jp/540/Manual/class-AudioListener.html

> 参考
[【Unity開発】Audioまとめ(基本編)【ひよこのエッセンス】](http://hiyotama.hatenablog.com/entry/2015/05/22/134029)
[【Unity開発】Audioまとめ(3Dサウンド中心)【ひよこエッセンス】](http://hiyotama.hatenablog.com/entry/2015/05/22/134044)


## オーディオファイル

https://docs.unity3d.com/ja/current/Manual/AudioFiles.html

基本的には非圧縮のwavファイルを使う


## BGM / SE

### BGM

- 一般的に、途切れることはない
- クロスフェードする可能性はある
- 一般的に、Spatial Blendは2D設定

こちらのスクリプトが使ってみて便利だった
[【Unity】とっても簡単に扱えるBGM再生クラスを作ってみた。フェードイン、フェードアウト対応版](http://naichilab.blogspot.jp/2015/03/unitybgm.html)

その他
[【Unity】Audioの基本と扱いについて](http://techblog.kayac.com/unity_advent_calendar_2016_17)


### SE

- 単発の音
- 複数重なることがある
- 一般的に、Spatial Blendは3D設定


### Play / PlayOneShot

Play
https://docs.unity3d.com/ja/540/ScriptReference/AudioSource.Play.html

PlayOneShot
https://docs.unity3d.com/ja/540/ScriptReference/AudioSource.PlayOneShot.html

サンプルを見る限り、
BGMのように重複せずにシンプルに音を鳴らすのが`Play`、
SEのように重複することを前提に音を鳴らすのが`PlayOneShot`



## AudioMixer

https://docs.unity3d.com/jp/current/Manual/AudioMixer.html

解説：[チュートリアル > Audio > オーディオミキサーとミキサーグループ](https://unity3d.com/jp/learn/tutorials/modules/beginner/5-pre-order-beta/audiomixer-and-audiomixer-groups)

まずミキサーをつくると、デフォルトでMasterを親としたグループがつくられる。その下に操作したい音ごとにグループをつくっていく。（Masterで操作した値はすべてのグループに影響を与える）

![スクリーンショット 2017-10-27 7.06.31.png](https://qiita-image-store.s3.amazonaws.com/0/136286/a3aa7067-6f9e-233e-5744-44706dc9d365.png "スクリーンショット 2017-10-27 7.06.31.png")

上記の画像は、ポーズ画面になったらAttenuation（減衰）を下げているスナップショットを登録しているところ。スナップショットとは、ミキサー内で設定した値などをアセットのような形で登録できるもの。

解説：[チュートリアル > Audio > オーディオミキサースナップショット](https://unity3d.com/jp/learn/tutorials/topics/audio/audio-mixer-snapshots)

各グループの「B」ボタンは「バイパス」。オーディオグループにエフェクトをかけるか設定できる。

![スクリーンショット 2017-10-27 7.16.37.png](https://qiita-image-store.s3.amazonaws.com/0/136286/43623083-b2f3-a1fe-c968-a9d21b755fb0.png "スクリーンショット 2017-10-27 7.16.37.png")
![スクリーンショット 2017-10-27 7.16.23.png](https://qiita-image-store.s3.amazonaws.com/0/136286/9c99e465-c749-e924-accb-f462f9f45f26.png "スクリーンショット 2017-10-27 7.16.23.png")

作成したグループをAudioSourceのOutputに設定してあげることで、ミキサーを通して出力することができる。


```c:ポーズ画面の表示・非表示でスナップショットを切り替える
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;

public class MenuManager : MonoBehaviour {

	public AudioMixerSnapshot paused;
	public AudioMixerSnapshot unpaused;

	Canvas canvas;

	void Start () {
		canvas = GetComponent<Canvas> ();
	}

	void Update () {
		if (Input.GetKeyDown (KeyCode.Escape)) {
			ToggleMenu ();
		}
	}

	void ToggleMenu() {
		canvas.enabled = !canvas.enabled;
		// 時間依存で動いているものは止まる
		Time.timeScale = Time.timeScale == 1 ? 0 : 1;
		// スナップショットを切り替える
		if(Time.timeScale == 0){
			unpaused.TransitionTo(.01f);
		} else {
			paused.TransitionTo(.01f);
		}
	}

}
```


> 参考
[Unityのオーディオミキサーを使って音声の変換や音量を変更する](https://gametukurikata.com/se/audiomixer)
[Unityの一時停止で止まるもの、止まらないもの【Time.timeScale】](http://tech.pjin.jp/blog/2016/12/20/unity_skill_7/)



## Ducking

ある音が再生された場合、他の音にエフェクトをかけたり音量を下げたりすること

解説：[チュートリアル > Audio > Duck Volume オーディオエフェクト](https://unity3d.com/jp/learn/tutorials/topics/audio/duck-volume-audio-effect)


ex. 銃撃した時に少しだけBGMが下がる

SEに`Send`、BGMに`Duck Volume`を設定。
SEの音がThresholdを超えた時にBGMが少し下がっている。

![duck.gif](https://qiita-image-store.s3.amazonaws.com/0/136286/4023794a-579b-46cb-ee5c-687bff4e2356.gif "duck.gif")


> 参考
[Unity 5のサウンド再生機能について（２）音にエフェクトを付与する方法について](http://tsubakit1.hateblo.jp/entry/2015/05/30/233000)