前提・実現したいこと
聞くことができる最小の音圧を特定するために以下の条件下でプログラムを作成したいです。音圧を上下させ、値を求めます。その音圧の上下幅を決定するためにPESTという方法を用います。
刺激の変化方向ルール :聞こえたら音圧を下げ、聞こえなかったら音圧を上げる。
刺激の間隔ルール(1):刺激の変化方向が変われば変化幅を半分にする。
刺激の間隔ルール(2):同じ変化方向なら2回目も変化幅を同じにする。
刺激の間隔ルール(3):3回以上連続して同じ変化方向ならそのたびに変化幅を倍にする。ただし直近の反転の直前で幅が倍になっていない場合、3回目の変化幅を変えない
よろしくお願いします。初心者のためできるだけわかりやすく説明していただけると助かります。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.Audio; 5 6public class AudioVolumeControlByKey : MonoBehaviour 7{ 8 public KeyCode volumeDownKey, volumeUpKey; 9 10 public enum VolumeControlSpeed { move1 = 1, move2 = 2, move4 = 4, move6 = 6 } 11 public VolumeControlSpeed volumeControlSpeed = VolumeControlSpeed.move2; 12 13 public AudioMixer audioMixer; 14 public string targetParameter; // AudioMixer > Master > Volume をExposeしたパラメーター名を指定する 15 16 private const int MAX_VOLUME = 20, MIN_VOLUME = -40; 17 18 19 private void Update() 20 { 21 if (Input.GetKey(volumeDownKey) || Input.GetKey(volumeUpKey)) 22 AdjustVolume(); 23 24 if (Input.GetKeyDown(KeyCode.F)) 25 { 26 GetComponent<AudioSource>().Play(); // 効果音を鳴らす 27 } 28 } 29 30 31 private void AdjustVolume() 32 { 33 float currentVolume; 34 audioMixer.GetFloat(targetParameter, out currentVolume); 35 36 float adjustValue = (float)volumeControlSpeed * 1.0f; 37 38 if (Input.GetKeyDown(volumeDownKey)) 39 audioMixer.SetFloat(targetParameter, Mathf.Clamp(currentVolume - adjustValue, MIN_VOLUME, MAX_VOLUME)); 40 41 if (Input.GetKeyDown(volumeUpKey)) 42 audioMixer.SetFloat(targetParameter, Mathf.Clamp(currentVolume + adjustValue, MIN_VOLUME, MAX_VOLUME)); 43 } 44}
試したこと
上記のコードを書き、矢印キーの上下で手動では音圧を変更できるようになりました。それを自動化するために前述の条件を取り入れたプログラムを作成したいです。