1989年開業 情報工学部門 文部科学省登録番号 第22082号 公益社団法人日本技術士会会員 東大阪商工会議所会員

≫サンプルプログラム一覧 

オープンソース/C言語サンプルプログラム MIDI音源メロディ(アニーローリー)

●パソコンに内蔵されたMIDI音源で音楽(メロディ)を演奏するプログラムです。
●リンク時にライブラリ winmm.lib の指定を追加する必要があります。
●「アニーローリー」はスコットランド民謡です。
 ≫ソースファイルのダウンロード: midi_annie01.c
 ≫演奏を聴く: midi_annie01.m4a
【問題】
●音色を変更してみよう。(鳴らない音もあります)
●コマンドライン引数で音色を渡せるようにしてみよう。
●曲を変更してみよう。
 ※著作権が有効な曲は権利侵害にならないよう注意しよう。

/*********************************/
/*  MIDI音源                 */
/*  アニーローリー               */
/*  リンク時に winmm.lib を追加  */
/*********************************/
#include <windows.h>
#include <stdio.h>

//--音階--
// 60 ド
// 62 レ
// 64 ミ
// 65 ファ
// 67 ソ
// 69 ラ
// 71 シ
// 72 ド

//--音階データ(-1 は最後の印)--
int   onkai [128]={
                    64,62,                      // ミレ
                    60,60,72,71,                // ドドドシ
                    71,69,69,                   // シララ
                    67,64,64,62,60,             // ソミミレド
                    62,64,62,                   // レミレ
                    60,60,72,71,                // ドドドシ
                    71,69,69,                   // シララ
                    67,64,62,60,                // ソミレド
                    60, 0,67,                   // ド・ソ
                    72,72,74,74,                // ドドレレ
                    76,67,                      // ミソ
                    72,72,74,74,                // ドドレレ
                    76,76,74,                   // ミミレ
                    72,71,69,72,69,             // ドシラドラ
                    67,64,64,62,                // ソミミレ
                    60,72,64,62,60,             // ドドミレド
                    60,                         // ド
                    -1
                  };

//--音の長さデータ(ミリ秒)--
int   nagasa[128]={
                    375,125,
                    750,250,750,250,
                    500,1000,500,
                    750,250,500,250,250,
                    1500,375,125,
                    750,250,750,250,
                    500,1000,500,
                    750,250,750,250,
                    1000,500,500,
                    750,250,750,250,
                    1500,500,
                    750,250,750,250,
                    1500,375,125,
                    750,250,500,250,250,
                    500,1000,375,125,
                    250,500,250,750,250,
                    1500,
                  };

void  main( )
{
  HMIDIOUT hmo;   // MIDI出力デバイスのハンドル
//int neiro=  1;  // 音色(1〜128)ピアノ
  int neiro= 11;  // 音色(1〜128)Music Box
//int neiro= 12;  // 音色(1〜128)Vibraphone
//int neiro= 72;  // 音色(1〜128)クラリネット
//int neiro= 74;  // 音色(1〜128)フルート
  int i;

    printf("\nアニーローリー\n");

    midiOutOpen(&hmo,MIDI_MAPPER,0,0,CALLBACK_NULL);    // MIDI出力デバイスを開く

    midiOutShortMsg(hmo,0x000000C0|(neiro<<8));         // 音色を設定する

    for( i=0; onkai[i]!=-1; i++ )                       // データの最後まで
      {
       //--音を出す--
        midiOutShortMsg(hmo,0x7F0090|(onkai[i]<<8));    // MID出力デバイスにメッセージ送信
        Sleep(nagasa[i]);                               // ミリ秒単位で待機

       //--音を消す--
        midiOutShortMsg(hmo,0x80|(onkai[i]<<8));        // MID出力デバイスにメッセージ送信
      }

    midiOutClose(hmo);                                  // MIDI出力デバイスを閉じる
}
   

※SSL暗号化通信対応

佐伯英子技術士事務所 〒542-0073 大阪市中央区日本橋 1-14-13 サンオフィス日本橋601  E-mail: yfb22332@nifty.com