前回は迷路ゴール時に使える短い曲を作りました。
今回は、音の作り方第3弾として3音で曲を作ろうと思います。
3音で曲を作る
3音用関数を作る
メリーさんはメイン1音を入力して、残り2音は決められた音を鳴らしていましたが
今回作る3音関数は3音全部をバラバラに指定します。
そして、どの音を強調するかで3つの音の長さを調整する必要があります。
そこで
void bwdqz1(int y, int yy, float w1, float w2, float w3) { int x; SET_BUZZER_FREQ(w3); //周波数を設定 ENABLE_BUZZER; //ブザーを発振させる for(x = 0; x < y; x++) //X回繰り返す { SET_BUZZER_FREQ(w1); //音(周波数)を変更する wait_ms(yy*4); //待ち時間 SET_BUZZER_FREQ(w2); //音(周波数)を変更する wait_ms(yy*3); //待ち時間 SET_BUZZER_FREQ(w3); //音(周波数)を変更する wait_ms(yy*3); //待ち時間 } DISABLE_BUZZER; //ブザーの発振を停止させる } void bwdqz1a(int y, int yy, float w1, float w2, float w3) { int x; SET_BUZZER_FREQ(w3); //周波数を設定 ENABLE_BUZZER; //ブザーを発振させる for(x = 0; x < y; x++) //X回繰り返す { SET_BUZZER_FREQ(w1); //音(周波数)を変更する wait_ms(yy*2); //待ち時間 SET_BUZZER_FREQ(w2); //音(周波数)を変更する wait_ms(yy*4); //待ち時間 SET_BUZZER_FREQ(w3); //音(周波数)を変更する wait_ms(yy*4); //待ち時間 } DISABLE_BUZZER; //ブザーの発振を停止させる }
という様な感じでw1,w2,w3を鳴らす長さを変えるのですが
なぜ複数このような関数を作るかというと
bwdqz1a(s,b,SOZ_FREQ,SO_FREQ,DOX_FREQ);
このように参考動画から、鍵盤を見て入力していくのですが
左、中央、右で、左を軽く、中央と右の音を強調したい場合
bwdqz1aの中の記述で
SET_BUZZER_FREQ(w1); //音(周波数)を変更する wait_ms(yy*2); //待ち時間 SET_BUZZER_FREQ(w2); //音(周波数)を変更する wait_ms(yy*4); //待ち時間 SET_BUZZER_FREQ(w3); //音(周波数)を変更する wait_ms(yy*4); //待ち時間
この様にw2とw3の待ち時間を長く取ります。
真ん中だけを強く、右だけを強く、等の自分の思う強調したい部分が
作っている内に出てくると思うので、そこでまた関数を増やしていけばいいでしょう。
待ち時間yyの横の数の合計が(自分は分かり易いので)10になる様に揃える事で
曲としてのテンポを一定に保っています。これは別に10である必要はないので
曲によって自由に変えましょう。ちなみに前回のレベルアップ音は11でした。
2音と1音の関数を作る
常に3音で音が鳴っている訳ではないので、2音と1音だけ鳴らす関数が必要です。
3音の関数から音を減らして、待ち時間の合計を合わせればOKです。
ここまで理解出来れば、後は参考資料を見ながら入力していくだけです。
まとめ
どの部分を強くするか、で待ち時間調整する事によって
単純に短くした音は基準を4分音符とするなら8分音符的な扱いになる
という事を理解するとこの曲の再現性が上がると思います。
これに至る前にサンプルを作っていたので、自分は上手く表現出来ませんでしたが
次の曲に生かしていくつもりです。
修正するには時間が掛かり過ぎるので前回のままですがサンプルも置いておきます。
次の予定としては、もう少し落ち着いた曲を作り始めているのですが
別の案もあるので状況をみて選ぼうかと思います。