パープルハット

※当サイトではGoogleアドセンス広告を利用しています

Unity 音楽の再生(再生・停止、5秒移動、再生速度の変化など)





音楽の再生方法について

AudioSourceを使用することで音楽の再生などが可能となる。




AudioSourceの主な変数や関数(参考:公式ドキュメント)

clip 再生する音楽ファイル
clip.length clipの長さを秒で取得する(2分10秒の音楽ファイルなら130となる)
clip.frequency clipのサンプリング周波数を取得
time 現在の再生位置を秒単位で取得
timeSamples 現在のサンプル位置を取得
timeより正確らしい
≒time×clip.frequency
pitch AudioSourceの再生速度
マイナスに設定すると逆再生となる
Play() AudioSourceを再生する
Pause() AudioSourceの現在の位置で停止する
Stop() AudioSourceを終了させる
次にPlay()でスタートしたら0秒からになっている





プログラム例

以下の例ではAudioSourceを格納している変数名を「audioSource」としている。

スペースキーを押したときに音楽源ファイルの長さと現在の再生位置の表示する

using UnityEngine;

public class Sample : MonoBehaviour
{
    [SerializeField] AudioSource audioSource;

    string Str(float length)
    {
        int len = (int)length;
        int min = len / 60;
        int sec = len % 60;

        return $"{min}:{sec.ToString("D2")}";
    }

    void Func()
    {
        string s1 = Str(audioSource.time);
        string s2 = Str(audioSource.clip.length);
        Debug.Log($"{s1}/{s2}");
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Func();
        }
    }
}


表示例

0:11/1:01



5秒早送り/巻き戻し

「→」クリックで5秒早送り、「←」クリックで5秒巻き戻す処理

using UnityEngine;

public class Sample2 : MonoBehaviour
{
    [SerializeField] AudioSource audioSource;

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            audioSource.time += 5;
        }

        else if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            audioSource.time -= 5;
        }
    }
}



再生速度を変化させる

「↑」クリックで再生速度を+0.1倍、「↓」クリックで-0.1倍する。
(0.5~3倍)

using UnityEngine;

public class Sample3 : MonoBehaviour
{
    [SerializeField] AudioSource audioSource;

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            audioSource.pitch = Mathf.Min(audioSource.pitch + 0.1f, 3);
        }

        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            audioSource.pitch = Mathf.Max(audioSource.pitch - 0.1f, 0.5f);
        }
    }
}