前提・実現したいこと
概要として,二重if文と複数個のデータ,それぞれD1,D2,D3,D4...があり,
一つ目の条件式でD1を出力,二つ目の条件式でD2を出力して一つ目の条件式に戻る
また一つ目の条件式でD3を,二つ目の条件式でD4を...とループさせたいです.
しかし下記のプログラムでは仕様のような動きをせず,D1がそのまま条件式1,2に適用されています.
どうすれば一つの条件式に対し一つの計測値を対応させることが出来るでしょうか?
また,この仕様の動きをさせるには二重if文以外の文がいいでしょうか?
どのようなプログラム文にすればいいか教えてください
該当のソースコード
C++ if (Average < -0.30){ //左に偏りすぎ→最も低い和音C play(chord::```C```); Total = 0; //コードを出力して初期化 if (Average < -0.30){ //左に偏りすぎ→音程そのままマイナー play(chord::```Cm```); Total = 0; //完結 次のコード進行へ } else if ((-0.30 <= Average) && (Average < -0.10)){ //左に少し偏っている→低く明るいコード進行和音 play(chord::```Csus4```); Total = 0; //完結 次のコード進行へ } else if ((-0.10 <= Average) && (Average <= 0.10)){ //正常→転換 noteOn(60, 127); Sleep(375); noteOn(64, 127); Sleep(375); noteOn(67, 127); Sleep(375); noteOn(72, 127); Sleep(375); noteOff(60); noteOff(64); noteOff(67); noteOff(72); Total = 0; //転換 次のコード進行へ } else if ((0.10 < Average) && (Average <= 0.30)){ //右に少し偏っている→高く明るいコード進行和音 play(chord::```Dsus4```); Total = 0; //完結 次のコード進行へ } else if (0.30 < Average){ //右に偏りすぎ→音程一個上がってマイナー play(chord::```CSm```); Total = 0; //完結 次のコード進行へ } } else if ((-0.30 <= Average) && (Average < -0.10)){ //左に少し偏っている→二番目に低い和音DS play(chord::```DS```); Total = 0; if (Average < -0.30){ //左に偏りすぎ→音程一個下がってマイナー play(chord::```Dm```); Total = 0; //完結 次のコード進行へ } else if ((-0.30 <= Average) && (Average < -0.10)){ //左に少し偏っている→低く明るいコード進行和音 play(chord::```CSsus4```); Total = 0; //完結 次のコード進行へ } else if ((-0.10 <= Average) && (Average <= 0.10)){ //正常→転換 noteOn(63, 127); Sleep(375); noteOn(67, 127); Sleep(375); noteOn(70, 127); Sleep(375); noteOn(75, 127); Sleep(375); noteOff(63); noteOff(67); noteOff(70); noteOff(75); Total = 0; //転換 次のコード進行へ } else if ((0.10 < Average) && (Average <= 0.30)){ //右に少し偏っている→高く明るいコード進行和音 play(chord::```Fsus4```); Total = 0; //完結 次のコード進行へ } else if (0.30 < Average){ //右に偏りすぎ→音程一個上がってマイナー play(chord::```Em```); Total = 0; //完結 次のコード進行へ } } else if ((-0.10 <= Average) && (Average <= 0.10)){ //正常→基準の和音FS play(chord::```FS```); Total = 0; if (Average < -0.30){ //左に偏りすぎ→音程一個下がってマイナー play(chord::```Fm```); Total = 0; //完結 次のコード進行へ } else if ((-0.30 <= Average) && (Average < -0.10)){ //左に少し偏っている→低く明るいコード進行和音 play(chord::```Esus4```); Total = 0; //完結 次のコード進行へ } else if ((-0.10 <= Average) && (Average <= 0.10)){ //正常→明るいコード進行FSsus4 play(chord::```FSsus4```); Total = 0; //完結 次のコード進行へ } else if ((0.10 < Average) && (Average <= 0.30)){ //右に少し偏っている→高く明るいコード進行和音 play(chord::```GSsus4```); Total = 0; //完結 次のコード進行へ } else if (0.30 < Average){ //右に偏りすぎ→音程一個上がってマイナー play(chord::```Gm```); Total = 0; //完結 次のコード進行へ } } else if ((0.10 < Average) && (Average <= 0.30)){ //右に少し偏っている→2番目に高い和音A play(chord::```A```); Total = 0; if (Average < -0.30){ //左に偏りすぎ→音程一個下がってマイナー play(chord::```GSm```); Total = 0; //完結 次のコード進行へ } else if ((-0.30 <= Average) && (Average < -0.10)){ //左に少し偏っている→低く明るいコード進行和音 play(chord::```Gsus4```); Total = 0; //完結 次のコード進行へ } else if ((-0.10 <= Average) && (Average <= 0.10)){ //正常→転換 noteOn(69, 127); Sleep(375); noteOn(73, 127); Sleep(375); noteOn(76, 127); Sleep(375); noteOn(81, 127); Sleep(375); noteOff(69); noteOff(73); noteOff(76); noteOff(81); Total = 0; //転換 次のコード進行へ } else if ((0.10 < Average) && (Average <= 0.30)){ //右に少し偏っている→高く明るいコード進行和音 play(chord::```Bsus4```); Total = 0; //完結 次のコード進行へ } else if (0.30 < Average){ //右に偏りすぎ→音程一個上がってマイナー play(chord::```ASm```); Total = 0; //完結 次のコード進行へ } } else if (0.30 < Average){ //右に偏りすぎ→最も高い和音hiC play(chord::```hiC```); Total = 0; if (Average < -0.30){ //左に偏りすぎ→音程一個下がってマイナー play(chord::```Bm```); Total = 0; //完結 次のコード } else if ((-0.30 <= Average) && (Average < -0.10)){ //左に少し偏っている→低く明るいコード進行和音 play(chord::```ASsus4```); Total = 0; //完結 次のコード進行へ } else if ((-0.10 <= Average) && (Average <= 0.10)){ //正常→転換 noteOn(72, 127); Sleep(375); noteOn(76, 127); Sleep(375); noteOn(79, 127); Sleep(375); noteOn(84, 127); Sleep(375); noteOff(72); noteOff(76); noteOff(79); noteOff(84); Total = 0; //転換 次のコード進行へ } else if ((0.10 < Average) && (Average <= 0.30)){ //右に少し偏っている→高く明るいコード進行和音 play(chord::```hiCsus4```); Total = 0; //完結 次のコード進行へ } else if (0.30 < Average){ //右に偏りすぎ→音程そのままマイナー play(chord::```hiCm```); Total = 0; //完結 次のコード進行へ } }
簡易的なプログラム文
例えば計測データが「0,0,1,0...」だった場合,下記のようなプログラムを経て
C,Cm,hiC,hiCm と出力してほしいのです.
if (Data == 0){ play(chord::C); Total = 0; if (Data == 0){ play(chord::Cm); Total = 0; } else if (Data == 1){ play(chord::Csus4); Total = 0; } } else if (Data == 1){ play(chord::hiC); Total = 0; if (Data == 0){ play(chord::hiCm); Total = 0; } else if (Data == 1){ play(chord::hiCsus4); Total = 0; } }
回答2件
あなたの回答
tips
プレビュー