在C语言控制台程序中播放MP3音乐
游戏没有声音多单调。
这里做一个简单的范例,用 mciSendString 函数播放 MP3 格式的音乐,先看看代码吧:
// 编译该范例前,请把 background.mp3 放在项目文件夹中
// 发布时,请把 background.mp3 和编译的 exe 放在一起
// 编译环境:VC6 + EasyX v20100825
//
#include <graphics.h>
#include <conio.h>
// 引用 Windows Multimedia API
#pragma comment(lib,"Winmm.lib") void main()
{
initgraph(640, 480); // 打开音乐
mciSendString("open background.mp3 alias mymusic", NULL, 0, NULL); outtextxy(0, 0, "按任意键开始播放");
getch(); // 播放音乐
mciSendString("play mymusic", NULL, 0, NULL); outtextxy(0, 0, "按任意键停止播放");
getch(); // 停止播放并关闭音乐
mciSendString("stop mymusic", NULL, 0, NULL);
mciSendString("close mymusic", NULL, 0, NULL); outtextxy(0, 0, "按任意键退出程序");
getch();
closegraph();
}
简单讲解一下:
一定要引用 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,这里就不多做介绍了。
一些有用的多媒体命令:
从头播放 xxx:
"play xxx from 0" 循环播放 .mp3 文件(.wma / .mid 同样可以):
"open xxx.mp3" 然后 "play xxx.mp3 repeat" 循环播放 .wav 文件:
"open xxx.wav type MPEGVideo" 然后 "play xxx.wav repeat" 关闭当前程序打开的所有多媒体文件:
"close all" 如果文件名中有空格,需要用双引号引起来文件名(注意转义):
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音乐的更多相关文章
- 在.NET Core控制台程序中使用依赖注入
之前都是在ASP.NET Core中使用依赖注入(Dependency Injection),昨天遇到一个场景需要在.NET Core控制台程序中使用依赖注入,由于对.NET Core中的依赖注入机制 ...
- 如何在.NET Core控制台程序中使用依赖注入
背景介绍 依赖注入(Dependency Injection), 是面向对象编程中的一种设计原则,可以用来减低代码之间的耦合度.在.NET Core MVC中 我们可以在Startup.cs文件的Co ...
- 在控制台程序中,添加config文件
一.右击类库 → 添加 → 新建项 → 应用程序配置文件(或者选择一个XML文件,然后将名字改成XXX.config),内容如下: <?xml version="1.0" e ...
- Android命令行播放MP3音乐
/*************************************************************************** * Android命令行播放MP3音乐 * 说 ...
- C++控制台程序中使用定时器
转自博客:http://www.cnblogs.com/phinecos/archive/2008/03/08/1096691.html 作者:洞庭散人 “我现在项目是一个控制台程序,用到的Win32 ...
- 将CodedUI Test 放到控制台程序中,模拟鼠标键盘操作
CodedUI Test是微软的自动化测试工具,在VS中非常好用.可以用来模拟鼠标点击,键盘输入.但执行的时候必须要用mstest调用,无法传入参数(当然可以写入config文件中,但每次修改十分麻烦 ...
- Windows Phone 如何在程序中播放提示声音?
在Windows Phone 中播放提示音可以使用 Microsoft.Xna.Framework.Audio 命名空间下的 SoundEffect 类.具体使用方法如下: 1. 根据声音文件路径创建 ...
- vc中播放mp3文件的方法小结
一般播放MP3常见的有两种方法,一种是自己解码,另外一种用系统的库,比如MCI,当然如果可以用控件直接用个控件会更方便. 1. 使用mci #include <windows.h> ...
- .net core控制台程序中使用原生依赖注入
如果要在程序中使用DbContext,则需要先在Nuget中安装Microsoft.EntityFrameworkCore.SqlServer using ConsoleApp1.EntityFram ...
随机推荐
- cocos2d-x 几何绘制: DrawingPrimitives 和 CCDrawNode
在看书的时候只提到了DrawingPrimitives,然后我去搜索这个类,结果没搜到.心想难道是类名改了,那我搜方法名吧,搜了下DrawLine,果然被我搜到了.结果发现原来这些各方法都是全局函数, ...
- linux0.12 链接过程
终于编译OK了..可链接就是一大堆错误 问题1: boot/head.o: In function `startup_32': (.text+0x10): undefined reference to ...
- MVC 模板页和布局
我们在以前的Asp.NET课程中已经学习过母版页了,在MVC中WebForm视图使用母版页的方法与以前基本相同. 创建一个项目MvcMasterPageDemo. 添加Home控制器,生成Index视 ...
- (转)linux bash shell 入门教程
Shell Script(bash)简介 众所皆知地,UNIX上以小工具著名,利用许多简单的小工具,来完成原本需要大量软体开发的工作,这一点特色,使得UNIX成为许多人心目中理想的系统平台. 在众多的 ...
- Android中设置文本颜色的三种方法
最近刚开始学web,发现好的颜色搭配可以让自己的网页更加美观, 中午不想做事,就无聊滴花了两个小时测试了所有颜色的编码,总结如下 新手没有什么吊炸天的技术,仅仅是一份辅助的文档,有兴趣的朋友可以收藏下 ...
- 秀才每天一篇之—SEO是什么?
[导读]SEO是什么?秀才搁笔七天以来.遇到非常多事情.站点被K ,排名掉了. 却找不出原因,開始迷茫了.以至于没有心情来照应这个博客,不好意思了,各位.在这七天以来.秀才一直在思考,SEO究竟应该怎 ...
- django: db - many to one
models 模块中的对象有三种对应关系:多对一,多对多,一对一.本讲说明多对一关系. blog/models.py: from django.db import models class Emplo ...
- jsp DAO设计模式
DAO(Data Access Objects)设计模式是属于J2EE体系架构中的数据层的操作. 一.为什么要用DAO? 比较在JSP页面中使用JDBC来连接数据库,这样导致了JSP页面中包含了大量的 ...
- Linux 下 oracle 导入数据库—数据泵方式导入dmp文件
dmp导出数据源的oracle版本是12c,我本地oracle版本是11g,这在导入数据过程中导致出现错误 一.用system 用户登录oracle,我忘记了system密码,解决办法: [oracl ...
- cocos2dx Sprite的多种创建方法
1.通过文件创建 Sprite *bg = Sprite::create("backGround.jpg"); 2.通过图片的某个区域创建 SpriteFrame *frame = ...