Win32 API非混音播放声音函数
1.PlaySound
Win32 API 播放声音最简单的就是PlaySound函数了。
播放文件:
PlaySound("deal.wav",NULL,SND_FILENAME | SND_ASYNC);
播放资源:
PlaySound((LPCSTR)IDR_WAVE_DEAL, GetModuleHandle(NULL), SND_RESOURCE | SND_ASYNC);
其中SND_ASYNC可以换成SND_SYNC,SND_SYNC的意思是同步模式,程序运行到此处会阻塞,直到声音播放完为止。SND_ASYNC的意思是异步模式,此时声音开始播放,程序会继续执行。
停止播放:
PlaySound(NULL,NULL,NULL,NULL);
2.mciSendString
mciSendString函数以命令形式控制设备的播放动作。
打开文件:
mciSendString("OPEN deal.wav ALIAS MUSIC", NULL, 0, 0);
播放文件:
mciSendString("PLAY MUSIC FROM 0", NULL, 0, NULL);
关闭文件:
mciSendString("CLOSE MUSIC", NULL, 0, NULL);
需要注意的是mciSendString是不支持多线程的,也就是不能通过开多个线程同时播放以达到混音的效果。
3.mciSendCommand
这个函数和mciSendCommand是一组的,只是操作方式换成用结构体。
打开文件:
MCI_OPEN_PARMS mciOpen;
mciOpen.lpstrElementName = "deal.wav";
DWORD dwReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)&mciOpen);
if (dwReturn)//此句是为得到出错信息
{
char sz[64];
mciGetErrorString(dwReturn, sz, 64);
throw sz;
}
播放文件:
MCI_PLAY_PARMS mciPlay;
mciSendCommand(mciOpen.wDeviceID, MCI_PLAY, NULL,(DWORD)&mciPlay);
关闭文件:
MCI_GENERIC_PARMS mciClose;
mciSendCommand(mciOpen.wDeviceID, MCI_CLOSE, 0, DWORD_PTR(&mciClose));
4.waveOut系列函数
还不熟,待续。