音楽の再生方法について
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); } } }
応用例
いろいろ組み合わせたらこんな感じに音楽再生機能を作ることも可能です。
Unityで作成した音楽再生アプリみたいなやつ#Unity pic.twitter.com/2o2IIMirNL
— ミドリ黄 (@MidorikiProg) 2022年4月9日
作り方はこちら
kiironomidori.hatenablog.com