MCIを利用してWAVEファイルを再生するサンプル

本来であれば、ファイル名はコマンドラインなんぞから持ってくるのがスジかも。

// mciWave.cpp
// Winmm.libのインポートが必要、Mmsystem.hのインクルードは不要?
// Cでは動きません

#include 
#include 
#include 

#define FNAME_SOUND	"C:\\Program Files\\NetMeeting\\Blip.wav"	// 再生ファイル名

class MCI {
	MCI_OPEN_PARMS mop;
public:
	MCIERROR Init();
	VOID Play();
	~MCI();
};

MCIERROR MCI::Init()
{
	mop.dwCallback = NULL;
	mop.lpstrDeviceType = (LPCSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
	mop.lpstrElementName = FNAME_SOUND;
	return mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT, (DWORD)&mop);
}

VOID MCI::Play()
{
	// 停止→頭出し→再生
	mciSendCommand(mop.wDeviceID, MCI_STOP, 0, 0);
	mciSendCommand(mop.wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, 0);
	mciSendCommand(mop.wDeviceID, MCI_PLAY, 0, 0);
	return;
}

MCI::~MCI()
{
	mciSendCommand(mop.wDeviceID, MCI_CLOSE, 0, 0);
	return;
}

int main()
{
	MCI MyMCI;
	MCIERROR mciErr;
	if(mciErr=MyMCI.Init()) {
		char errMessage[1024];
		mciGetErrorString(mciErr, errMessage, 1024);
		printf("err: %s\n", errMessage);
	}
	MyMCI.Play();
	printf("何かキーを押して下さい。\n");
	getch();
	return 0;
}