C言語でビープ音を鳴らし、あまつさえ演奏する。
親愛なる悪友からの熱烈な要望に答えて、前にpythonでやった事をC言語に移植してみた。 めんどいからドレミじゃなくてabcにしちゃったけどね。
C言語でビープ音を鳴らす関数はBeepっていうそのまんまの名称のもので、windows.hをインクルードすれば使えるようになります。 この関数についてはmsdnのマニュアルを参照してください。 使い方はpythonのと全く変わらないみたいね。
で、書いたソースがこんな感じ。
/* * * ビープ音で演奏するやつ。 * * MIT License (c)2013 MacRat */ #include <stdio.h> #include <windows.h> #define BASE_TIME 250 int main(int argc, char** argv) { int buf, freq, time; buf = getchar(); while(buf != EOF) { switch(buf) { case ' ': freq = 0; break; case 'c': case 'C': freq = 523; break; case 'd': case 'D': freq = 587; break; case 'e': case 'E': freq = 659; break; case 'f': case 'F': freq = 698; break; case 'g': case 'G': freq = 784; break; case 'a': case 'A': freq = 880; break; case 'b': case 'B': freq = 932; break; default: freq = -1; break; } time = BASE_TIME; while((buf = getchar()) == '-') { time += BASE_TIME; } if(freq > 0) { Beep(freq, time); }else if(freq == 0) { sleep(time); } } return 0; }
久々に書くとなんかコレジャナイ感じがするねー、C言語。 コンパイルしたものはここに置いておきます。ソースコードも同梱。
stdinからの入力で音を鳴らすようになっているので、echoの出力をリダイレクトするなり手打ちするなりしてください。 cがド、bがレ、eがミ、fがファ、gがソと来て、aがラ、bがシね。 ハイフンを書くと、ハイフンの数だけ前の音を伸ばします。 スペースで無音を入れることも可能。