函数介绍

为了实现用C语言播放音乐,我们需要用到windows的一个API,mciSendString。

函数原型为:

MCIERROR mciSendStringA(

LPCSTR lpstrCommand,

LPSTR lpstrReturnString,

UINT uReturnLength,

HWNDhwndCallback

);

1,返回值:MCIERROR即DWORD类型,而DWORD类型就是unsigned int,执行成功返回0,出错返回非0值

2,lpstrCommand,指向以null结尾的命令字符串:”命令 设备[ 参数]”

3,lpstrReturnString,指向接收返回信息的缓冲区,为NULL时不返回信息

4,uReturnLength,上述缓冲区的大小

5,hwndCallback,在命令串中含notify时,它指定一个回调窗口的句柄,一般为NULL

使用方法

具体的播放代码是这样子滴:

mciSendString("stop a", NULL, 0, NULL); //停止播放音乐

mciSendString("close a", NULL, 0, NULL); //关闭音乐

open指令打开需要播放的音乐,alias后面制定了前面文件路径的别名,以后想要操作这个文件直接使用这个别名就行了,后面的三个参数平时,就记着写作NULL,0,NULL即可。

第二条语句play指令后面接上面定义的别名,repeat表示歌曲循环播放。如果想要在音乐播放时停止播放,有以下代码

mciSendString("stop a",NULL,0,NULL); //停止播放音乐

mciSendString("close a",NULL,0,NULL); //关闭音乐

总而言之:play a开始播放,stop a停止播放,close a关闭文件,如果需要同时播放多个音乐的话应该为每个音乐设置不同的别名,这样就可以了

注意:还有一个函数PlaySound可以用来播放音乐,但是不支持mp3和wma

返回值错误检查

有时候播放音乐会没有声音,这时候就需要对返回值进行检查了,在返回错误码的同时,还会有对应的错误信息,那么怎么查看信息呢?

这里需要用到另外一个函数mciGetErrorString。

函数原型:

BOOL mciGetErrorStringA(

MCIERROR mcierr,

LPSTR pszText,

UINT cchText

);

1,返回值,没有错误返回非零值,错误返回0

2,mcierr,mciSendString返回的错误代码。

3,pszText,指向缓冲区的指针,该缓冲区接收错误描述,接受之后输出即可看到信息。

4,cchText,pszText缓冲区的长度(以字符为单位)

具体代码如下:

char buf[100] = "";

char buf1[100] = "";

DWORD m1= mciSendString("open ThatGirl.mp3 alias a", NULL, 0, NULL);

int temp=mciGetErrorString(m1, buf, 100);

DWORD m2 = mciSendString("play a", NULL, 0, NULL);

mciGetErrorString(m2, buf, 100);

printf("m1-%u,m2-%u temp:%dn",m1,m2,temp);

printf("%sn%sn", buf,buf1);

运行结果如下:

我这里是能正常播放的,所以一切OK!

如果你想要获取更多C语言、C++、Windows以及QT的知识!

小编有一个免费的C/C++编程学习交流俱乐部,【点击进入】!

还有编程学习文件(源码,项目实战教学视频以及给小白的零基础教程),欢迎初学者和正在进阶中的小伙伴们!

c并非所有的代码路径都返回值_两行C语言代码播放音乐,就这么so easy!你学到了吗?...相关推荐

  1. 并非所有代码路径都返回值

    写代码时提示:并非所有代码路径都返回值 (1)函数Max()是有必要返回值的,因为这个函数的功能就是求得某种结果: (2)函数Main()是没必要返回值的,因为它没什么需要告诉调用者(操作系统)的,所 ...

  2. 获取存储过程返回值及代码中获取返回值

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  3. 获取存储过程返回值及代码中获取返回值(转)

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  4. python process返回值_如何恢复传递给multiprocessing.Process的函数的返回值?

    如何恢复传递给multiprocessing.Process的函数的返回值? 在下面的示例代码中,我想恢复函数的返回值worker.我该怎么做呢?这个值存储在哪里? 示例代码: import mult ...

  5. qdialog 返回值_如何从Python中的QDialog实例返回值?

    我想打开一个QtGui.QDialog,从用户请求一组值,然后在单击"保存"后返回值.在 下面的代码应该在不修改的情况下运行.在import sys from PySide imp ...

  6. bat获取命令返回值_全网都在找的redis字符串命令,总结在这了

    概述 redis一般用来做缓存,可能很多朋友都没有深入去学习redis的相关命令,只是涉及到安装部署而已,所以今天主要总结介绍一下redis字符串的一些命令. SET 语法:SET key value ...

  7. cefsharp执行完js代码后获取返回值问题

    CefSharp相关操作 Task<CefSharp.JavascriptResponse> t = mychrome.GetBrowser().MainFrame.EvaluateScr ...

  8. php readfile 返回值,PHP readfile( )用法及代码示例

    PHP中的readfile()函数是一个内置函数,用于读取文件并将其写入输出缓冲区.文件名作为参数发送到readfile()函数,它返回成功读取的字节数,如果失败,则返回FALSE和错误. 通过在函数 ...

  9. struts 修改拦截器修改返回值_关于struts2简单的介绍与示例

    Apache Struts 2是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构.它利用并延伸了Java Servlet API,鼓励开发者采用MVC架构. 缘起于Apache St ...

最新文章

  1. python之路---25 模块和包
  2. mac idea用自带的maven还是_苹果电脑自带截图工具怎么用?mac自带截屏工具使用技巧分享
  3. php如何转换类型,PHP数据类型转换
  4. 福昕pdf虚拟打印机_一学就会的PDF文档压缩小技巧
  5. SAP S/4HANA生产订单创建之后,为什么会自动执行action
  6. java中抽象类,abstract关键字
  7. 队列的基本概念介绍以及典型应用示例
  8. Android之仿ele地图定位效果
  9. sessionFactory.getCurrentSession()的引出
  10. 毕设使用EndNote管理Word文献
  11. 热更新Sophix的爬坑之路
  12. Tomcat 9 免安装版 配置教程
  13. 三维分子图的球面信息传递
  14. 苹果计算机取消用户名和密码进入不,苹果电脑怎么退出账户登录不了怎么办
  15. 【VOLTE】【SRVCC】【3】 VOLTE SRVCC切换失败场景
  16. 图论专题HDU-1869 六度分离
  17. excel美化技巧-持续更新
  18. 如何在Windows系统上制作U盘启动盘?
  19. table数据刷新;v-if刷新el-table表格
  20. linux下创建php文档,linux新建文件有哪些方法

热门文章

  1. ssh (安全外壳协议)Secure Shell 百度百科
  2. python开发飞船游戏
  3. python count函数用法 comm_Python学习第六天课后练习案例 (主要针对的内容是python函数的定义和使用)...
  4. 暴涨30%!马斯克突然杀入推特:当上最大股东!
  5. 顺丰控股:2月速运物流业务营业收入98.49亿元,同比下降3.36%
  6. 京东:应届博士生年薪最高达200万元!确认过眼神,是我羡慕不来的人
  7. 为了多拿点补贴,马斯克甚至还当过“渣男”?
  8. 华为关联公司哈勃投资晟芯网络 持股10%
  9. 瑞幸咖啡获2.5亿美元融资:将用于债务重组及与SEC和解
  10. 制造业一声叹息!干30年实业不如炒股?