【C/C++】以VS2019演示如何在程序中设置自己的提示音[WindowsAPI]

【C/C++】以VS2019演示如何在程序中设置自己的提示音[WindowsAPI]

相信很多小伙伴在课程设计大作业的时候都想要另辟蹊径,剑走偏锋,阿巴阿巴。。。来让自己的程序在功能上保证保量的同时可以多点锦上添花的东西(比如我就是那位小伙伴 )。今天和大家分享一个简单的方法让自己的程序能够发出我们自己预设好的提示音。

注:1.本文章内容并非改变系统提示音。
2.本文章较为基础,废话较多,觉得啰嗦的可在最下面直接看代码

首先我们要找到自己想要的素材(因为做提示音,所以不建议太长)我这里用的是郭老师经典的一句“耶斯莫拉”(郭语永远年轻!)然后放到我们对应项目的文件夹。
在这里插入图片描述
(当然,放到其他文件夹也可以,这么做是为了接下来的操作中直接使用相对路径,较为简单)

下面是我们需要用到的头文件

#include<windows.h>
#include<mmsystem.h>//多媒体设备接口
#pragma comment(lib,"winmm.lib")//加载静态库

需要注意的是这三句都是预编译指令,千万不要欠手手把 ‘;’ 打进去了。
为了实现功能我们主要会用到这个函数:
MCIERROR mciSendString(LPCSTR lpszCommand , LPTSTR lpszReturnString ,UINT cchReturn , HANDLE hwndCallback );
关于这个函数的机理放在下面了,需要的自取 当然不看也无所谓,会用就行
在这里插入图片描述
说白了就是,函数第一个参数是一个操作加上文件的存储地址及文件名(需要带文件后缀,一般为MP3,WAV。这里用的相对路径),后面三个填0就行,简单粗暴无脑。
具体操作可以看下面的代码:

//播放提示音
void cueTone()
{
	/*第一个参数为一条string,后三个参数均为0即可*/
	/*文件位置及文件名./ysml.WAV*/
	mciSendString("close ./ysml.WAV", 0, 0, 0);  //关闭
	mciSendString("open ./ysml.WAV", 0, 0, 0);   //打开
	mciSendString("play ./ysml.WAV", 0, 0, 0);   //播放
	
}

有了这个函数,当我们调用它的时候,就可以播放我们自己的提示音了。
当然,有的小伙伴可能会疑惑:为什么顺序是 1.关闭 2.打开 3.播放 ,而不是这样

/*错误示范*/
void cueTone1()
{
	/*第一个参数为一条string,后三个参数均为0即可*/
	mciSendString("open ./ysml.WAV", 0, 0, 0);   //打开
	mciSendString("play ./ysml.WAV", 0, 0, 0);   //播放
	mciSendString("close ./ysml.WAV", 0, 0, 0);  //关闭	
}

当我们按照 打开、播放、关闭 的方式进行时,我们的函数执行过快,没有听到就会被关闭。
有的同学可能想用Sleep();函数:

void cueTone2()
{
	/*第一个参数为一条string,后三个参数均为0即可*/
	mciSendString("open ./ysml.WAV", 0, 0, 0);   //打开
	mciSendString("play ./ysml.WAV", 0, 0, 0);   //播放
	Sleep(1000);                          //等待音频结束
	mciSendString("close ./ysml.WAV", 0, 0, 0);  //关闭	
}

这么做也很不错,但是暂停的同时我们也同样不能进行其他操作。
可能有的小伙伴会想,那我直接用这样的代码:

/*错误示范*/
void cueTone3()
{
	/*第一个参数为一条string,后三个参数均为0即可*/
	mciSendString("open ./ysml.WAV", 0, 0, 0);   //打开
	mciSendString("play ./ysml.WAV", 0, 0, 0);   //播放
}

这样做没有关闭,好像也没什么。但是实际操作会发现,这样做之后文件只能播放一次,再次使用将不再播放。

所以我个人比较推荐第一个方式的,当然有更好的方法也欢迎在评论区留言。

写好了功能,我们还是在main函数里调用一下试试吧。但是这里依然存在一个问题:
有的小伙伴完全按照第一个函数写,但他们的代码可能会这样
在这里插入图片描述
这种情况是因为你是用的是Unicode字符集,可以通过下图方式更改:

在这里插入图片描述
更改为多字节字符之后报错就会消失啦!

下面附上一个小程序,通过一个简单的循环,只要输入数字并回车,就可以听见郭子的“耶斯莫拉”了。

#include<stdio.h>
#include<windows.h>
#include<mmsystem.h>//多媒体设备接口
#pragma comment(lib,"winmm.lib")//加载静态库

//播放提示音
void cueTone()
{
	mciSendString("close ./ysml.WAV", 0, 0, 0);
	mciSendString("open ./ysml.WAV", 0, 0, 0);
	mciSendString("play ./ysml.WAV", 0, 0, 0);
}
int main(void)
{
	int i;
	printf("请输入数字:\n");
	while (1)
	{
		scanf_s("%d",&i);
		cueTone();
	}
	return 0;
}
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Felix郅高

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值