Win32 API非混音播放声音函数

本文介绍了在Windows环境下使用PlaySound、mciSendString、mciSendCommand及waveOut系列函数进行音视频播放的方法。详细解释了如何播放、停止音频文件,并提供了异步与同步播放模式的对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值