Blanktar

  1. top
  2. blog
  3. 2013
  4. 09

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