簡易メトロノームをC言語で作る

あまり真面目にやる気はなかったが、寝付けず暇だったので書いてみた。


sオーダーより小さい時間プロセスの実行を止める関数は、sleepではなくusleepを使うらしい。usleep関数は引数にμs単位のdoubleを取る。
60/BPMが音と音の間隔なので、

  1. 音を鳴らす
  2. 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);
}