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がシね。 ハイフンを書くと、ハイフンの数だけ前の音を伸ばします。 スペースで無音を入れることも可能。