Audio Class で MIDI を演奏する

DirectX の Audio Object Class を使って MIDI を演奏します。
Audio Object Class を使うと、誰でも簡単にプログラムを作成することが出来ます。

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

プロジェクトの作成

  1. 私が提供する Audio Object Class を使うと MIDI の演奏が簡単にできます。
    Audio Object Class は Object Class Library からダウンロード出来ます。
  2. [ファイル] [新規作成] [プロジェクト] から空のプロジェクト(MyMidi)を作成して下さい。
    プロジェクトのフォルダーに次のファイルを格納して下さい。
    プロジェクト/既存項目の追加からプログラムファイルとヘッダファイルをプロジェクトに追加して下さい。
    ファイル名 ファイルの説明
    MyMidi.cpp 「プログラムの説明」を参考に作成して下さい
    audio.h audio Object Class ヘッダファイル
    audio.cpp audio Object Class プログラムファイル
    midi1.mid ネットから適当な MIDI を調達して名前を変更して下さい
    midi2.mid ネットから適当な MIDI を調達して名前を変更して下さい
  3. このプログラムは、カレントフォルダーに格納されている midi1.mid と midi2.mid を DialogBox のボタン操作で切り替えて演奏します。
    次の DialogBox を作成して下さい。
  4. DialogBox のキャプションとIDです。
    BOX キャプション ID
    DialogBox MIDI Program IDD_DIALOG1
    Button LOAD MIDI-1 IDC_BUTTON1
    Button LOAD MIDI-2 IDC_BUTTON2
    Button MIDI 演奏 IDC_BUTTON3
    Button MIDI 停止 IDC_BUTTON4
    Button CLOSE IDC_CLOSE
  5. 必要なライブラリは audio.h の中から #pragma でリンクしているので、特に操作は不要です。
  6. ビルドから実行を選ぶと midi1.mid がロードされて自動的に演奏が始まります。
    「LOAD MIDI-2」をクリックすると midi2.mid に切り替わります。
    「MIDI 停止」で演奏が停止し、「MIDI 演奏」で演奏が開始されます。

プログラムの説明

  1. Audio Object Class を使うので audio.h と audio.cpp をプロジェクトに組み込んで下さい。
    Audio App; が Object Class の定義で、必要な領域はこれだけです。
        #include    "audio.h"
        #include    "resource.h"
    
        //☆ Audio Object Class
        Audio       App;
        
  2. WinMain() では midi1.mid をロードして演奏を開始してから、DialogBox を表示します。
        int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR,int)
        {   App.Load("midi1.mid");
            App.Play();
            DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DlgProc);
            return TRUE;
        }
        
  3. DialogBox の CALLBACK 関数に Button がクリックされたときの処理を記述します。
    IDC_BUTTON1 で midi1.mid をロードして演奏します。
    IDC_BUTTON2 で midi2.mid をロードして演奏します。
    IDC_BUTTON3 でロードされている MIDI を演奏します。
    IDC_BUTTON4 で MIDI の演奏を停止します。
    IDC_CLOSE で WM_CLOSE をポストします。
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {   case IDC_BUTTON1:
                    App.Load("midi1.mid");
                    App.Play();
                    break;
                case IDC_BUTTON2:
                    App.Load("midi2.mid");
                    App.Play();
                    break;
                case IDC_BUTTON3:
                    App.Play();
                    break;
                case IDC_BUTTON4:
                    App.Stop();
                    break;
                case IDC_CLOSE:
                    PostMessage(hDlg,WM_CLOSE,0,0);
                    break;
            }
            break;
        
  4. プログラムの終了処理です。
    Object Class の Constructor が全てのオブジェクトを開放してくれます。
        case WM_CLOSE:
            EndDialog(hDlg,TRUE);
            return (TRUE);
        

【演習】

  1. Audio Object Class を使うと、厄介な処理は Object Class が全て面倒を見てくれます。
    Audio Object Class を使わないで MIDI を演奏するプログラムを作成して下さい。
    プログラムは MIDI を演奏する を参照して下さい。

超初心者の方のために全ソースコードを掲載します。 (^_^;)
Object Class Library から audio.h と audio.cpp を取得してプロジェクトに組み込んで下さい。
このプログラムは Dialob Box 使ったプログラムなので、ページの画像を参考にして Dialog Box を作成して下さい。
全ソースコード

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

超初心者のプログラム入門(DirectX9 game program)

超初心者のプログラム入門(DirectX10 game program)