質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

535閲覧

矢印キーの上下で値を変化させる。その変化量を変更するプログラムの作成。

mayamaya1020

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/11/30 09:05

前提・実現したいこと

聞くことができる最小の音圧を特定するために以下の条件下でプログラムを作成したいです。音圧を上下させ、値を求めます。その音圧の上下幅を決定するために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}

試したこと

上記のコードを書き、矢印キーの上下で手動では音圧を変更できるようになりました。それを自動化するために前述の条件を取り入れたプログラムを作成したいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2020/11/30 09:54

ルール3の意味がよく分かりません。 とりあえず変化幅に適当な値を置いて、どう入力されたらどうなるかのパターンを例示してください。(ここがわかれば後はそのままif文にするだけのような気もしますが) 基準の変化幅→1 1回目上入力:1 2回目上入力:1 3回目上入力:2(ただし〜からの意味がわからないので一旦無視) 4回目上入力:4 など
mayamaya1020

2020/12/01 03:48 編集

ご回答ありがとうございます。 基準の変化幅2とすると 1回目:2 2回目:2 3回目:4(3回目なので2倍) 4回目:8(4回目なのでさらに2倍) 5回目(反転):-4(反転して-1/2倍) 6回目:-4 7回目(反転):2(反転して-1/2倍) 8回目:2 9回目:2(3連続だが直近の反転の直前(6回目)が5回目の倍になっていないためそのまま) 10回目(反転):-1 11回目:-1 12回目:-1(3連続だが直近の反転の直前(9回目)が8回目の倍になっていないためそのまま) です。よろしくお願いします。
BluOxy

2020/12/01 07:45

1回目~12回目は、全て上を入力したときの値でしょうか。入力と出力が分かりません。 また、業務を委託するサイトではありませんので、何を試していて何で困っているかを記載するようお願いします。
guest

回答1

0

▪intを用意して同じキーを押したらインクリメントする。3以上で倍にする条件式を作成。反対方向を押したら0を代入。上昇値を-1/2倍
▪boolを用意して直近の反転前に倍になったか判定する。反転時に上記のintが3以上でfalse、そうでなければtrue。このboolを論理積で3以上で倍にする条件式に入れる

をおこなえば良いです
この位のコード書けるのであれば質問するまでも無い気します

と思ったら案の定流用コードなんですね
http://negi-lab.blog.jp/archives/%20AudioVolumeControlByKey.html

回答者はあなたがどれだけ出来るのか。どれくらい理解しているのかを提示されたもので判断するのでこういう場合は他人のコード流用している事書いておいてくれませんか?

こういう当たり前の事すら出来ずに質問を繰り返す面の皮が厚い人が多くて嫌になります

投稿2020/12/01 08:50

編集2021/07/11 09:21
Tto777

総合スコア189

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mimi_no_naka

2020/12/03 06:04 編集

こういうトリッキーな仕様のモノ作ろうとする辺り仕事か課題でコード流用は隠したいのかなと思ったりします。 普通自分で仕様考えたら人に聞くまでも無いですから。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問