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系列函数
还不熟,待续。

posted @ 2018-12-05 19:13  tomwillow  阅读(83)  评论(0编辑  收藏  举报