小的wave播放比较简单,用sndPlaySound可以搞定
#include "mmsystem.h"
#pragma comment(lib,"winmm.lib")
//---------------播放-----------
sndPlaySound("e://wav//nyt.wav",SND_ASYNC); //第一参数为播放文件路径,第二为播放同时继续下条语句
//-----------------停止----------------------
sndPlaySound(NULL,0);
文件大些时,比如当WAVE文件大于100K时,这时候系统无法将声音数据一次性的读入内存,sndPlaySound函数就不能进行播放(听别人说的,但我用了400k的都没问题),这时可以用mci,主要是用mciSendCommand实现,
//----------------初始化参数-------------------
MCI_OPEN_PARMS openParms;
MCI_PLAY_PARMS playParms;
openParms.dwCallback = 0;
openParms.lpstrAlias = "";
openParms.lpstrDeviceType = "waveaudio"; //类型为wave
openParms.lpstrElementName = "e://wav//nyt.wav"; //播放的文件路径
playParms.dwCallback = 0;
playParms.dwFrom = 0;
playParms.dwTo = 0;
//---------------------打开文件---------------------
mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT,(DWORD)((LPVOID)&openParms));
//-----------------------关闭文件------------------------------------
mciSendCommand(openParms.wDeviceID,MCI_CLOSE,0,0);
//-------------------------播放-----------------------------------------------
mciSendCommand(openParms.wDeviceID,MCI_PLAY,MCI_WAIT,(DWORD)(LPVOID)(&playParms));
//--------------------------停止--------------------
mciSendCommand(openParms.wDeviceID,MCI_STOP,0,0);
//---------------------------暂停--------------------------
mciSendCommand(openParms.wDeviceID,MCI_PAUSE,0,(DWORD)(LPVOID)(&playParms));
//我发现用mci时程序会死在那,后来自己干脆写了一个播放线程就ok了,sndPlaySound没这方面的问题