1.音を鳴らす
まずは、単純に音を鳴らすプログラムを作成します。
次のプログラムを作成してください。ここでは sound1.c とします。
今回新たに用いたAPIなどについて解説します。
これで単純に音を再生することができました。PlayTone関数は鳴り終わるまで待つ動作をせず、 また10msec単位で指定するので、Wait10Msec関数と同様に使うとよいです。 また今回のように、音を鳴らす時間をマクロで指定しておけば、テンポを変えるのに便利です。
PlayTone関数の周波数指定で音を出すときに音階に従って指定したい場合は、次の表を参考にすると良いでしょう。
今回新たに用いたAPIなどについて解説します。
nVolume = 2
PlayTone(440,TEMPO)
NXTのボリュームを指定します。ボリュームは0〜4までの整数で指定します。
PlayTone(440,TEMPO)
指定した周波数の音を鳴らすAPIです。
第1の引数は音の周波数を指定します。今回は440Hzなので、ラの音が鳴るようになっています。
第2の引数は音を鳴らす時間を指定します。時間は10msec単位で指定します。
第1の引数は音の周波数を指定します。今回は440Hzなので、ラの音が鳴るようになっています。
第2の引数は音を鳴らす時間を指定します。時間は10msec単位で指定します。
これで単純に音を再生することができました。PlayTone関数は鳴り終わるまで待つ動作をせず、 また10msec単位で指定するので、Wait10Msec関数と同様に使うとよいです。 また今回のように、音を鳴らす時間をマクロで指定しておけば、テンポを変えるのに便利です。
PlayTone関数の周波数指定で音を出すときに音階に従って指定したい場合は、次の表を参考にすると良いでしょう。
音階 | オクターブ | |||
---|---|---|---|---|
3 | 4 | 5 | 6 | |
B | 247 | 494 | 988 | |
A# | 233 | 466 | 932 | |
A | 220 | 440 | 880 | 1760 |
G# | 415 | 831 | 1661 | |
G | 392 | 784 | 1568 | |
F# | 370 | 740 | 1480 | |
F | 349 | 698 | 1397 | |
E | 330 | 659 | 1319 | |
D# | 311 | 622 | 1245 | |
D | 294 | 584 | 1175 | |
C# | 277 | 554 | 1109 | |
C | 262 | 523 | 1047 |
2.メロディーを作成する
先ほどの機能を用いれば、メロディーを作成することができます。
それでは次のプログラムを作成してください。ここでは sound2.c とします。
プログラムを動かすとご存知「カエルの歌」が再生されると思います。このようにしてメロディーを再生することができます。
メロディーのプログラムは長くなってしまうことが多いため、上記のように別の関数にしておくと便利です。 また、メロディーをヘッダに記述しておき、プログラム内ではインクルードして使用するだけにしておけば、さらに分かりやすくなります。
それでは次のプログラムを作成してください。ここでは sound2.c とします。
sound2.c
#define TEMPO 25 void RingTone(int freq, int time){ PlayTone(freq, time-5); wait10Msec(time); } void FlogSong(){ RingTone(523, TEMPO*2); RingTone(587, TEMPO*2); RingTone(659, TEMPO*2); RingTone(698, TEMPO*2); RingTone(659, TEMPO*2); RingTone(587, TEMPO*2); RingTone(523, TEMPO*3); wait10Msec(TEMPO); RingTone(659, TEMPO*2); RingTone(698, TEMPO*2); RingTone(784, TEMPO*2); RingTone(880, TEMPO*2); RingTone(784, TEMPO*2); RingTone(698, TEMPO*2); RingTone(659, TEMPO*3); wait10Msec(TEMPO); RingTone(523, TEMPO*2); wait10Msec(TEMPO*2); RingTone(523, TEMPO*2); wait10Msec(TEMPO*2); RingTone(523, TEMPO*2); wait10Msec(TEMPO*2); RingTone(523, TEMPO*2); wait10Msec(TEMPO*2); RingTone(523, TEMPO); RingTone(523, TEMPO); RingTone(587, TEMPO); RingTone(587, TEMPO); RingTone(659, TEMPO); RingTone(659, TEMPO); RingTone(698, TEMPO); RingTone(698, TEMPO); RingTone(659, TEMPO); wait10Msec(TEMPO); RingTone(587, TEMPO); wait10Msec(TEMPO); RingTone(523, TEMPO*3); wait10Msec(TEMPO); } task main(){ nVolume = 2; FlogSong(); } |
プログラムを動かすとご存知「カエルの歌」が再生されると思います。このようにしてメロディーを再生することができます。
メロディーのプログラムは長くなってしまうことが多いため、上記のように別の関数にしておくと便利です。 また、メロディーをヘッダに記述しておき、プログラム内ではインクルードして使用するだけにしておけば、さらに分かりやすくなります。