簡易メトロノームをC言語で作る
あまり真面目にやる気はなかったが、寝付けず暇だったので書いてみた。
sオーダーより小さい時間プロセスの実行を止める関数は、sleepではなくusleepを使うらしい。usleep関数は引数にμs単位のdoubleを取る。
60/BPMが音と音の間隔なので、
- 音を鳴らす
- 60/BPM秒待つ
というものをループさせればよい。
改善点
- 音には警告音(\a)を用いたが、どうもウェイト時間より警告音のwavファイルの再生時間のほうが長いと等間隔に再生されない模様。
- 例えばEnterで開始し、次にEnterを押すまで無限に繰り返しをさせたい(今回はとりあえず100回ループさせた)。
以下ソース。
#include <stdio.h> #include <unistd.h> int main(void) { int i; double a; printf("BPMを入力してください:"); scanf("%lf", &a); for (i=1; i <= 100; i++) { printf("\a"); fflush(stdout); usleep( 60.0 * 1000000 / a ); } return(0); }