MCI で WAVE を繰り返し演奏

VC++ の MCI(Media Control Interface) で MM_MCINOTIFY: をポストして WAVE を繰り返し演奏します。

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

プロジェクトの設定

  1. 新規プロジェクトで(MciWav)を作成します。
  2. ページ先頭の画像を参考にして DialogBox を作成して下さい。
    キャプションとIDを次のように設定して下さい。
    BOX キャプション ID
    DialogBox Dialog IDD_DIALOG1
    Button WAVE IDC_WAVE
    Button STOP IDC_STOP
    Button CLOSE IDCANCEL
  3. 次のファイルをプロジェクトのフォルダーに格納して、MciWav.cpp をプロジェクトに追加して下さい。
    Chimes.wav は Windows のフォルダーに格納されています。
    ファイル 説明
    MciWav.cpp DialogBox のソースプログラム
    chimes.wav 演奏する WAVE ファイル
  4. MciWav.cpp の説明です。
    mciSendString() は mmsystem.h で定義されています。
    "winmm.lib" は #pragma を使ってリンクしています。
    id は MCI Device ID を保存する領域です。
        #include    <windows.h>
        #include    <mmsystem.h>
        #include    "resource.h"
        #pragma     comment(lib,"winmm.lib")
    
        MCIDEVICEID id;     //MCI Device ID
        
  5. WM_INITDIALOG: で chimes.wav をオープンします。
    オープンされた chim の MCI Device ID を取得してグローバル領域に保存して下さい。
        MCIERROR    rc;
        case WM_INITDIALOG:
            rc= mciSendString("open chimes.wav type waveaudio alias chim",NULL,0,NULL);
            if (rc)     MessageBox(hDlg,"chimes.wav","OPEN ERROR",MB_OK);
            id= mciGetDeviceID("chim");
            if (id==0)  MessageBox(hDlg,"chim","GET ID ERROR",MB_OK);
            break;
        
  6. WAVE ボタンのクリックで chimes.wav の演奏を開始します。
    mciSendString() に notify を指定すると、演奏の終了時に MM_MCINOTIFY: がポストされてきます。
        case IDC_WAVE:
            mciSendString("play chim from 0 notify",NULL,0,hDlg);
            return TRUE;
        
  7. MM_MCINOTIFY: で MCI Device ID と命令の正常終了を確認して play を再度実行します。
        case MM_MCINOTIFY:
            if (lParam==(LONG)id && wParam==MCI_NOTIFY_SUCCESSFUL)
                mciSendString("play chim from 0 notify",NULL,0,hDlg);
            return TRUE;
        
  8. STOP ボタンで演奏を停止します。
    プログラムの終了時に MCI を Close して下さい。
  9. ビルドに続いて実行を行います。
    WAVE ボタンをクリックすると chimes.wav が繰り返し演奏されます。
    STOP ボタンをクリックすると演奏が終了します。

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

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