游戏没有声音多单调。

这里做一个简单的范例,用 mciSendString 函数播放 MP3 格式的音乐,先看看代码吧:

  1. // 编译该范例前,请把 background.mp3 放在项目文件夹中
  2. // 发布时,请把 background.mp3 和编译的 exe 放在一起
  3. // 编译环境:VC6 + EasyX v20100825
  4. //
  5. #include <graphics.h>
  6. #include <conio.h>
  7. // 引用 Windows Multimedia API
  8. #pragma comment(lib,"Winmm.lib")
  9.  
  10. void main()
  11. {
  12. initgraph(640, 480);
  13.  
  14. // 打开音乐
  15. mciSendString("open background.mp3 alias mymusic", NULL, 0, NULL);
  16.  
  17. outtextxy(0, 0, "按任意键开始播放");
  18. getch();
  19.  
  20. // 播放音乐
  21. mciSendString("play mymusic", NULL, 0, NULL);
  22.  
  23. outtextxy(0, 0, "按任意键停止播放");
  24. getch();
  25.  
  26. // 停止播放并关闭音乐
  27. mciSendString("stop mymusic", NULL, 0, NULL);
  28. mciSendString("close mymusic", NULL, 0, NULL);
  29.  
  30. outtextxy(0, 0, "按任意键退出程序");
  31. getch();
  32. closegraph();
  33. }

简单讲解一下:

一定要引用 Winmm.lib 库文件。这个范例中是通过 #pragma comment 命令引用的,也可以在项目属性中设置,这里不作介绍。

mciSendString 函数的功能很强大,甚至可以播放视频,不过这里就不多作介绍了,详细请参见 MSDN。我们平时只需要用到第一个参数,将另外三个参数置为 NULL, 0, NULL 即可。

第一个参数是多媒体命令字符串,不区分大小写。程序中,先要通过 open 命令打开 background.mp3,并用 alias 指定了别名为“mymusic”,这样在之后的代码中就可以方便的通过“mymusic”这个别名访问该音乐了。当然,并不是必须要指定别名,每次通过文件名访问也是可以的。

open 后面的 mp3 用绝对路径或相对路径都可以。

然后就是:play mymusic 开始播放,stop mymusic 停止播放,close mymusic 关闭文件。

如果需要同时播放多个音乐,请为不同的音乐指定不同的别名,然后分别操作即可。

不再需要播放的音乐,请记得用 close 命令关闭。

另外还有一个 PlaySound 函数也可以用来播放声音,不过可惜不支持 mp3 / wma,这里就不多做介绍了。

一些有用的多媒体命令:

  1. 从头播放 xxx
  2. "play xxx from 0"
  3.  
  4. 循环播放 .mp3 文件(.wma / .mid 同样可以):
  5. "open xxx.mp3" 然后 "play xxx.mp3 repeat"
  6.  
  7. 循环播放 .wav 文件:
  8. "open xxx.wav type MPEGVideo" 然后 "play xxx.wav repeat"
  9.  
  10. 关闭当前程序打开的所有多媒体文件:
  11. "close all" 
  12.  
  13. 如果文件名中有空格,需要用双引号引起来文件名(注意转义):
  14. mciSendString("open \"D:\\My Music\\俞丽拿 梁祝 化蝶.mp3\" alias mymusic", NULL, 0, NULL);

如果希望将 mp3 嵌入到 exe 中,请参考:http://www.easyx.cn/skills/View.aspx?id=87

实际中可能会遇到各种各样的问题,这里给出一个完整的范例程序,可以下载到本机试试能否正常播放。【点这里下载

这些暂时应该够用了吧,更多的多媒体命令请参见 MSDN。

在C语言控制台程序中播放MP3音乐的更多相关文章

  1. 在.NET Core控制台程序中使用依赖注入

    之前都是在ASP.NET Core中使用依赖注入(Dependency Injection),昨天遇到一个场景需要在.NET Core控制台程序中使用依赖注入,由于对.NET Core中的依赖注入机制 ...

  2. 如何在.NET Core控制台程序中使用依赖注入

    背景介绍 依赖注入(Dependency Injection), 是面向对象编程中的一种设计原则,可以用来减低代码之间的耦合度.在.NET Core MVC中 我们可以在Startup.cs文件的Co ...

  3. 在控制台程序中,添加config文件

    一.右击类库 → 添加 → 新建项 → 应用程序配置文件(或者选择一个XML文件,然后将名字改成XXX.config),内容如下: <?xml version="1.0" e ...

  4. Android命令行播放MP3音乐

    /*************************************************************************** * Android命令行播放MP3音乐 * 说 ...

  5. C++控制台程序中使用定时器

    转自博客:http://www.cnblogs.com/phinecos/archive/2008/03/08/1096691.html 作者:洞庭散人 “我现在项目是一个控制台程序,用到的Win32 ...

  6. 将CodedUI Test 放到控制台程序中,模拟鼠标键盘操作

    CodedUI Test是微软的自动化测试工具,在VS中非常好用.可以用来模拟鼠标点击,键盘输入.但执行的时候必须要用mstest调用,无法传入参数(当然可以写入config文件中,但每次修改十分麻烦 ...

  7. Windows Phone 如何在程序中播放提示声音?

    在Windows Phone 中播放提示音可以使用 Microsoft.Xna.Framework.Audio 命名空间下的 SoundEffect 类.具体使用方法如下: 1. 根据声音文件路径创建 ...

  8. vc中播放mp3文件的方法小结

    一般播放MP3常见的有两种方法,一种是自己解码,另外一种用系统的库,比如MCI,当然如果可以用控件直接用个控件会更方便. 1.      使用mci #include <windows.h> ...

  9. .net core控制台程序中使用原生依赖注入

    如果要在程序中使用DbContext,则需要先在Nuget中安装Microsoft.EntityFrameworkCore.SqlServer using ConsoleApp1.EntityFram ...

随机推荐

  1. reg51.h 详解

    /* BYTE Register */ sfr P0 = 0x80; //P0口 sfr P1 = 0x90; //P1口 sfr P2 = 0xA0; //P2口 sfr P3 = 0xB0; // ...

  2. windows 10是如何做到全平台统一的?

    1.EXE本身就是个容器,它可以在ARM平台上包含ARM的native code执行,也可以在x86平台上包含x86的native code执行,本质上无差别(所以麻烦那些说EXE不能在ARM平台上运 ...

  3. 【转】Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例--不错

    原文网址:http://www.cnblogs.com/skywang12345/p/3311252.html 概要 这一章,我们对HashSet进行学习.我们先对HashSet有个整体认识,然后再学 ...

  4. POJ-2240

    Arbitrage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19063   Accepted: 8069 Descri ...

  5. Django中生成PDF(一)

    Django中生成PDF(一) 需求描述:     某网站与其用户达成一致的协议,每份协议中都有用户相关的独特信息,且还需要生成PDF并存档.PDF文件中需要有企业LOGO.文字描述等信息.其展现形式 ...

  6. java foreach记录

    实现原理解释: http://blog.csdn.net/a596620989/article/details/6930479 http://stackoverflow.com/questions/8 ...

  7. 一个菜鸟所喜欢用的响应式布局,操作方便简单、时尚简约,适合新手!(一个Dreamweaver cs6生成响应式布局)

    前端开发并不是一个容易的工作,不仅需要掌握HTML.CSS和JavaScript,针对不同的浏览器版本和平台,还需要了解如何设计出跨平台的网站.如今随着响应式设计的流行,前端开发变得越来越困难,且花费 ...

  8. 【C#基础】CSA控件编写秘籍

    新建CSA控件 1.新建一个纯类,命名空间是: namespace SimPerfect.CSAControlLibrary.CSAControls 2.实现两个构造函数:无参和传Candy参数 pu ...

  9. 数据库VIEW(视图)

    视图是基于 SQL 语句的结果集的可视化的表. 视图包括行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段. 我们能够向视图加入 SQL 函数.WHERE 以及 JOI ...

  10. mysql安装出现error Nr.1045

    我们在windows下安装mysql时会出现Access denied for user 'root'@localhost'(using password:No)的问题,这个问题是因为你的机器上之前安 ...