MCI で MIDI を演奏する

VC++ の MCI(Media Control Interface) で MIDI を演奏する DialogBox の簡単なプログラムです。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. DialogBox のプログラムなので、空の新規プロジェクト(Midi)を作成します。
    DialogBox の基本は Dialog Box のプログラム を参照して下さい。
  2. ページ先頭の画像を参考にして DialogBox を作成して下さい。
    キャプションとIDを次のように設定して下さい。
    BOX キャプション ID
    DialogBox Dialog IDD_DIALOG1
    Button MIDI IDOK
    Button CLOSE IDCANCEL
  3. 次のファイルをプロジェクトのフォルダーに格納して、Midi.cpp をプロジェクトに追加して下さい。
    MIDI ファイルは適当なものを調達してきて下さい。
    MIDI にはバージョンが色々あり、全てが演奏できるとは限りません。
    音が鳴らないときは、別の MIDI ファイルで試してみて下さい。
    ファイル 説明
    Midi.cpp DialogBox のソースプログラム
    Aki.mid 演奏する MIDI ファイル
  4. Midi.cpp のソースコードです。
    mciSendString() は mmsystem.h で定義されています。
    "winmm.lib" は #pragma を使ってリンクしています。
        /************************************************/
        /*★ PlaySound() で MIDI を鳴らす     前田 稔 ★*/
        /************************************************/
        #include    <windows.h>
        #include    <mmsystem.h>
        #include    "resource.h"
        #pragma     comment(lib,"winmm.lib")
        
  5. WinMain は DialogBox を表示するだけです。
  6. DialogBox の CALLBACK 関数です。
    WM_INITDIALOG: で aki.mid をオープンします。
        LRESULT CALLBACK DialogProc(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
        {
            switch(msg)
            {   case WM_INITDIALOG:
                    mciSendString("open aki.mid type sequencer alias aki",NULL,0,NULL);
                    break;
        
    aki.mid をフルパスで指定する場合です。
    mciSendString("open c:\\data\\test\\aki.mid type sequencer alias aki",NULL,0,NULL);
  7. IDOK ボタンがクリックされると MIDI の演奏を開始します。
    IDCANCEL ボタンがクリックされると WM_CLOSE をポストします。
                case WM_COMMAND:
                    if (LOWORD(wParam)==IDOK)
                    {   mciSendString("play aki",NULL,0,NULL);
                        return TRUE;
                    }
                    if (LOWORD(wParam)==IDCANCEL)
                    {   PostMessage(hDlg,WM_CLOSE,0,0);
                        return TRUE;
                    }
                    break;
        
  8. WM_CLOSE では "close aki" で MCI をクローズしてプログラムを終了します。
                case WM_CLOSE:
                    mciSendString("close aki",NULL,0,NULL);
                    EndDialog(hDlg, TRUE); 
                    return TRUE;
                    break;
            }
            return FALSE;
        }
        
  9. ビルドに続いて実行を行います。
    MIDI ボタンをクリックして Aki.mid が演奏されたら完成です。

MIDI ファイルの演奏手順は、以下のようになります。
  1. ファイルをオープン(open) します。
  2. 演奏を開始(play) します。
  3. 必要ならば演奏を停止(stop) します。
  4. ファイルをクローズ(close) します。

【演習】

  1. MCI(Media Control Interface) のコマンドは TEXT 文字で指示します。
    "play aki" で MIDI を演奏します。
    "aki" は open コマンドの alias で設定した名前です。
        mciSendString("open aki.mid type sequencer alias aki",NULL,0,NULL);
        mciSendString("play aki",NULL,0,NULL);
        
  2. MCI(Media Control Interface) は MIDI だけでなく WAVE や CD も演奏することができます。
    MCI で効果音(WAVE) を鳴らしてみて下さい。
    WAVE は type waveaudio で指定します。

超初心者のプログラム入門(Win32API C++)