MCI で WAVE を演奏する

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

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

プロジェクトの設定

  1. 新規プロジェクトで(Wave)を作成します。
  2. ページ先頭の画像を参考にして DialogBox を作成して下さい。
    キャプションとIDを次のように設定して下さい。
    BOX キャプション ID
    DialogBox Dialog IDD_DIALOG1
    Button WAVE IDOK
    Button CLOSE IDCANCEL
  3. 次のファイルをプロジェクトのフォルダーに格納して wave.cpp をプロジェクトに追加して下さい。
    WAVE ファイルは C:\Windows\Media のフォルダーに格納されています。
    ファイル 説明
    wave.cpp DialogBox のソースプログラム
    ringin.wav 演奏する WAVE ファイル
  4. wave.cpp のソースコードです。
    mciSendString() は mmsystem.h で定義されています。
    "winmm.lib" は #pragma を使ってリンクしています。
        /*************************************************************/
        /*★ MCI(Media Control interface) で WAVE を演奏   前田 稔 ★*/
        /*************************************************************/
        #include    <windows.h>
        #include    <mmsystem.h>
        #include    "resource.h"
        #pragma     comment(lib,"winmm.lib")
        
  5. WinMain は DialogBox を表示するだけです。
  6. DialogBox の CALLBACK 関数です。
    WM_INITDIALOG: で ringin.wav をオープンします。
        LRESULT CALLBACK DialogProc(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
        {
            switch(msg)
            {   case WM_INITDIALOG:
                    mciSendString("open ringin.wav type waveaudio alias ringin",NULL,0,NULL);
                    break;
        
    c:\data\test\ に格納した ringin.wav をフルパスで指定する場合です。
    mciSendString("open c:\\data\\test\\ringin.wav type waveaudio alias ringin",NULL,0,NULL);
    2012/8/8 MP3 の演奏が出来ることも確認しました。
    test.mp3 はネットからダウンロードしたファイルです。
    夏の扉.mp3 は松田聖子の CD を MP3 に変換したファイルです。
    mciSendString("open c:\\tmp\\test.mp3 type mpegvideo alias ringin",NULL,0,NULL);
    mciSendString("open c:\\tmp\\夏の扉.mp3 type mpegvideo alias ringin",NULL,0,NULL);
  7. IDOK ボタンがクリックされると WAVE の演奏を開始します。
    IDCANCEL ボタンがクリックされると WM_CLOSE をポストします。
                case WM_COMMAND:
                    switch(LOWORD(wParam))
                    {   case IDOK:
                            mciSendString("play ringin from 0",NULL,0,NULL);
                            return TRUE;
                        case IDCANCEL:
                            PostMessage(hDlg,WM_CLOSE,0,0);
                            return TRUE;
                    }
                    break;
        
  8. WM_CLOSE では "close ringin" で MCI をクローズしてプログラムを終了します。
                case WM_CLOSE:
                    mciSendString("close ringin",NULL,0,NULL);
                    EndDialog(hDlg, TRUE); 
                    return TRUE;
                    break;
        
  9. ビルドに続いて実行を行います。
    WAVE ボタンをクリックして ringin.wav が演奏されたら完成です。

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

【演習】

  1. MCI(Media Control Interface) のコマンドは TEXT 文字で指示します。
    "play ringin from 0" が先頭から演奏するコマンドです。
    途中から演奏する "play ringin from 100" なども使えるようです。
        mciSendString("open ringin.wav type waveaudio alias ringin",NULL,0,NULL);
        mciSendString("play ringin from 0",NULL,0,NULL);
        mciSendString("play ringin from 100",NULL,0,NULL);
        
  2. MCI(Media Control Interface) は MIDI だけでなく WAVE や MP3 や CD も演奏することができます。
    MIDI を演奏しながら効果音(WAVE) を鳴らしてみて下さい。

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