【Unity】サウンドの基本　AudioClip　AudioSource　AudioListener

# 環境
Unity 2019.3.7f1

#はじめに
サウンドを再生したことはあるけど、
再生方法がいくつかあって、いまいち手順がまとまっていないためメモ

# サウンドの基本
音を鳴らすには次の３つが必要です。
**・AudioClip**
　CDみたいなもの　自分でファイルを用意する。
　 再生できる形式はaif、wav、mp3、oggです。
**・AudioSource**
　CDプレイヤーみたいなもの　このコンポーネントをオブジェクトに付ける必要有り。。
**・AudioListener**
 　スピーカーみたいなもの　MainCameraにこのコンポーネントが勝手についている。
　 一つのシーンに２つ以上つけると警告がでる。

# 音の再生方法
音の再生方法は大きく分けて次の２種類
**・AudioSourceにAudioClipを紐づけして再生**

**・スクリプトから再生**
　　－Playメソッド
　　　BGM再生(重ねて再生×)
　
　　－PlayOneShotメソッド
　　　SE再生(重ねて再生〇)
　
　　－UnPauseメソッド
　　　　　一時停止を解除

# 音の停止方法
　**スクリプトから停止**
　　－Stopメソッド
　　　CDプレイヤーでいう■ボタン　再度再生すると最初からの再生になる。

　　－Pauseメソッド
　　　　一時停止する

# 具体例
## 音の再生方法
#### ・AudioSourceにAudioClipを紐づけして再生
AudioSourceコンポーネントを適当なオブジェクトに付けて
**・オーディオクリップに音楽ファイルをアタッチ**
**・ゲーム開始時に再生にチェック**
を行い実行することで再生できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/67751c0a-26bd-9922-0191-234bda25cf4b.png)

#### ・スクリプトから再生
 Playメソッド、PlayOneShotメソッドを使用するために
以下の前準備を行います。

**前準備**
・空のゲームオブジェクトを作成
・新規スクリプトを作成
・作成した空のオブジェクトに次の２つを割り当て
　AudioSourceコンポーネント
　作成した新規スクリプト
・AudioSourceコンポーネント設定
　「ゲーム開始時に再生」のチェックを外しておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/135900cc-0ae6-d112-836c-978118dcb91d.png)







##### Playメソッド
主な用途はBGM再生です。
複数の音を重ねて再生できません。

では、Playメソッドを使って音を再生してみます。


まず、スクリプトをこのように書きます。

```CSharp:test4
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test4 : MonoBehaviour
{
    [SerializeField] private AudioSource a;//AudioSource型の変数aを宣言

    void Start()
    {
        a.Play();//AudioSource型が入っている変数aを再生
    }
}
```
[SerializeField]についての説明はこちら↓
https://qiita.com/Maru60014236/items/f550b07d49e199be771b

次にインスペクター画面で
・AudioSourceを変数aにアタッチ
・再生したい音楽ファイル (AudioClip) 割り当て
　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/dcee35e4-7772-d0f2-867f-d6ee8faa3e89.png)



実行すると音が再生されます。

　
##### PlayOneShotメソッド
こちらは複数の音を重ねて再生できますが、ちょっと手間が増えます。


スクリプトはこちらにします。

```CSharp:test4
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test4 : MonoBehaviour
{
    [SerializeField] private AudioSource a;//AudioSource型の変数aを宣言
    [SerializeField] private AudioClip b;//AudioClip型の変数bを宣言

    void Start()
    {
        a.PlayOneShot(b);//AudioClip型の変数bを引数として、AudioSource型が入っている変数aを再生 
    }
}
```
　
変数aにAudioSourceをアタッチ
変数bに再生したいAudioClipをアタッチします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/f6e54563-3547-e255-c45c-e52e757b6372.png)
実行することで音が再生されます。

　
##### UnPauseメソッド
一時停止を解除する
Pauseメソッドの具体例の項目で一緒に説明します。

　
## 音の停止方法
#### スクリプトから停止
音の停止、一時停止はPlayメソッドや「ゲーム開始時に再生」にて音が再生されている状態で使います。
　
　
##### Stopメソッド



ボタンに自作の関数を割り当てて使うコードです。

```CSharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test4 : MonoBehaviour
{
    [SerializeField] private AudioSource a;//AudioSource型の変数aを宣言 再生するAudioSourceをアタッチ必要
   
    void Start()
    {        
    }

    //ボタンに割り当てる自作の関数
    public void PushButton()
    {
        a.Stop();//AudioSource型が入っている変数aを停止 
    }
}
```

新規でボタンを作成し、Buttonコンポーネントでこのように関数を割り当てることで使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/6b4180a5-24e7-045d-74b9-db97a5f4e3b4.png)
再生している状態でボタンを押せば音が停止します。

　
##### Pauseメソッド

PauseメソッドとUnPauseメソッドのボタンを作り
一時停止・一時停止解除ができるようにします。

```CSharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test4 : MonoBehaviour
{
    [SerializeField] private AudioSource a;//AudioSource型の変数aを宣言 再生するAudioSourceをアタッチ必要
   
    void Start()
    {        
    }

    //ボタン1つ目に割り当てる自作の関数
    public void PushButtonPause()
    {
        a.Pause();//AudioSource型が入っている変数aを一時停止 
    }

    //ボタン2つ目に割り当てる自作の関数
    public void PushButtonUnPause()
    {
        a.UnPause();//AudioSource型が入っている変数aを一時停止解除 
    }

}
```
2つのボタンに自作の関数をそれぞれ割り当てることで
一時停止と一時停止解除を行うことができます。


# おわりに
　応用として２記事貼っておきます。

https://qiita.com/Maru60014236/items/7c874122aaa922a03257

https://qiita.com/Maru60014236/items/6c1250ba98c178eac664