幻世(OurDream)2D图形引擎使用教程11——播放媒体文件(1)
声明:本教程版权归Lizcst Software Lab所有,欢迎转载,但是转载必须保留本段声明文字,并注明文章来源:http://blog.csdn.net/kflizcst
谢谢合作!
播放媒体是有趣的程序所必须具备的一个重要的功能,尤其是游戏程序。一个没有任何媒体效果(包括音频或者视频)的游戏,将无法给人带来想要玩下去的冲动。这篇乃至接下来的一系列教程将向大家介绍如何在使用幻世引擎开发的程序中播放各种媒体文件。
在幻世引擎中,有两个接口是专门用来处理和播放媒体文件的,分别是ISoundSystem和IMediaSystem。前者是一个简单的音频引擎,可以播放常见的简单的音频媒体文件。后者则是一个较为复杂完备的多媒体引擎,不止可以播放多种音频媒体文件,还可以播放许多格式的动态视频媒体文件等。
我们现在首先要学习的是ISoundSystem接口提供的播放功能。ISoundSystem接口支持两种常见音频文件,分别是wav波形声音与midi声音。下面我们就通过代码来介绍具体的使用方法。
[使用ISoundSystem接口播放声音]
1、要使用ISoundSystem接口,第一步要做的,自然是向引擎主接口申请该接口了,直接使用引擎主接口提供的函数GetSoundSystem即可。
先定义一个全局的ISoundSystem接口的变量,以便于我们在整个代码中都可以使用。
然后,我们通过主引擎接口获取ISoundSystem接口。
2、接下来我们使用ISoundSystem接口来载入一个事先准备好的音频文件。
AddSound函数用户加载音频文件,参数分别是:
A、该音频文件的资源ID,这个不多介绍,相信通过之前的幻世教程,大家应该明白了幻世引擎在加载资源与使用资源上的特点。
B、音频文件的路径,这个就是你想要播放的文件的位置了,需要注意的是ISoundSystem接口所支持的文件格式。
C、D、E、这三个参数是音频播放的屏幕坐标,ISoundSystem支持3D音效,因此,指定不同的音源位置,可以让声音听起来像是从空间中的某个点发出的一样。这个可以用来实现一些有意思的效果。
F、该音频资源的播放次数,就是你想要播放这个声音的遍数。如果该处指定数字大于1,则稍后使用Play函数播放声音时,将会自动播放指定的遍数后再停止。这里我个人觉得,不必指定大于1参数,因为你可以随时通过播放操作来实现声音的多次播放。
3、有了上面这几步,音频文件其实就已经准备好了,蓄势待发啊,下面这一步就只是在需要的时候调用ISoundSystem接口的Play函数来完成播放操作了。
这里我写得稍微复杂一点,主要是让程序变得更加健壮完美一些,那就是通过按下指定的键后可以播放或者停止音频。函数IsPlay用于检测指定ID 的音频文件当前是不是正在播放。Stop函数不用说大家也知道,自然是停止指定ID的音频文件的播放了。
4、好,到这里代码已经完成了,现在我们编译一下并运行,按回车键就可以听到音乐响起来了(当然你得有可以出声的设备,并且要打开了或者插好了),按退格键音乐就会停止。效果截图我就不提供了,呵呵,通过图片也看不到声音:-)
[完成]
这篇教程,我们先学个简单的声音播放。其实ISoundSystem接口还提供了一些声音效果的函数,比如SetVolume与GetVolume函数,用来设置和获取音频播放的音量;SetupSoundParameters函数用来设置声音的特殊变化(比如:混响、回声等等);UpdateSoundPosition函数用来移动音源位置(还记得之前说的AddSound在添加声音时也可以设置音源位置吗?当然,那个只是一个初始位置)等等。组合使用这些函数可以实现一些很有趣的声音效果,大大增强你的幻世程序的用户体验!
当然ISoundSystem接口虽然简单易用,提供的效果也还够用,但是局限也是很明显的,那就是支持的媒体格式太少了,对于许多更主流或者说更有优势的媒体格式不支持,并且ISoundSystem接口也不支持媒体文件的流式载入与流式播放功能,会导致加载较大的媒体文件时出现卡顿或缓慢的现象。这种种的瑕疵就需要用到我们下一篇教程将会介绍到的更强大的IMediaSystem接口啦!
[另外]
还要说明一点的是(也许这个也不需要多说,呵呵),ISoundSystem接口播放的声音是支持混合的,也就是说,你可以同时播放多个音频,实现多个音源混合在一起播放的效果,而不是必须等待前一个音频播放完毕或者只能一个一个的播放声音:-)
[示例代码下载]
全部源代码下载:http://kuai.xunlei.com/d/BiIvALHLUNStUgQA5f9
幻世(OurDream)2D图形引擎使用教程11——播放媒体文件(1)的更多相关文章
- FFmpeg命令行工具学习(二):播放媒体文件的工具ffplay
一.简述 ffplay是以FFmpeg框架为基础,外加渲染音视频的库libSDL构建的媒体文件播放器. 在使用ffplay之前必须要安装到系统中,MAC的安装教程为:http://www.cnblog ...
- 幻世(OurDream)2D图形引擎使用教程8——处理操作输入(2)
声明:本教程版权归Lizcst Software Lab所有,欢迎转载,但是转载必须保留本段声明文字,并注明文章来源:http://blog.csdn.net/kflizcst 谢谢合作! 今天的教程 ...
- 幻世(OurDream)2D图形引擎使用教程9——处理操作输入(3)
声明:本教程版权归Lizcst Software Lab所有,欢迎转载,但是转载必须保留本段声明文字,并注明文章来源:http://blog.csdn.net/kflizcst 谢谢合作! 现在我们该 ...
- 幻世(OurDream)2D图形引擎易语言汉化版更新提示
幻世引擎的易语言汉化专版到目前为止已经累积了多个BUG,其中多个BUG是影响引擎功能使用的问题,我将会在近期发布修复所有问题的更新版本(此更新版本同时也将会支持最新的对加入的粒子系统的支持),敬请各位 ...
- 幻世(OurDream)2D图形引擎大更新——炫丽粒子特效强势回归!
本次更新终于让各位期待已久的绚丽粒子系统特效强势回归到幻世当中了.凭借新引擎强大而又高效的绘图,新的粒子系统将比旧有版本(原Ycnd 2D)在性能上有极大幅度的增强,增幅超过十倍! 更强的性能!更好的 ...
- 幻世(OurDream)TM 2D图形引擎开通捐赠渠道
为了支持幻世(OurDream)TM 2D图形引擎更好的发展,同一时候也是为了给希望支持引擎发展的朋友一个安全快捷的渠道,Lizcst Software Lab于今日正式在官方旗舰店增设了一个捐赠捐款 ...
- Unity 2D游戏开发教程之使用脚本实现游戏逻辑
Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...
- node-webkit教程(11)Platform Service之shell
node-webkit教程(11)Platform Service之shell 文/玄魂 目录 node-webkit教程(10)Platform Service之shell 前言 11.1 She ...
- Unity 2D游戏开发教程之精灵的死亡和重生
Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...
随机推荐
- hdu5115 Dire Wolf【区间dp】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4361169.html ---by 墨染之樱花 [题目链接]http://acm.hdu.e ...
- Chrome插件Visual Event查看Dom元素绑定事件的利器
找这工具找了好久,统一找着了,开发人员不可多得的好东东,收藏做一下分享. 用Chrome插件Visual Event查看Dom绑定的事件 Visual Event简介 Visual Event是一个开 ...
- html相关介绍
HTML(超文本标记语言) 超文本标记语言,即HTML(Hypertext Markup Language),是用于描述网页文档的一种标记语言 XHTML1.0 可扩展超文本置标语言(eXtensi ...
- Onvif协议
ONVIF致力于通过全球性的开放界面标准来推进网络视频在安防市场的应用,这一接口界面标准将确保不同厂商生产的网络视频监控产品具有互通性.2008年11月,论坛正式发布了ONVIF第一版规范ONVIF核 ...
- 移动平台WEB前端开发技巧汇总(转)
最近我很关注移动前端的知识,但做为一个UI设计师和web前端工作人员没有这个工作环境接触,做为门外汉,网上系统的知识也了了,一直有种雾里看花的感觉,见到本文,我自己是奉为经典.所以我分享之后又专门打笔 ...
- chrome developer tool 调试技巧2
我大概是从 08.09 年从 Firebug 转入 Chrome Developer Tool,一直用到现在,越用越喜欢.我平时调错时常用的功能有: 代码格式化可以将被压缩的代码自动展开 实时代码编辑 ...
- CentOS 6.5(64bit)安装GCC4.8.2+Qt5.2.1(替换GCC的链接库)
截至目前,Qt的最新版本为5.2.1,CentOS的版本为6.5,GCC的版本为4.8.2,经过一番尝试,终于将Qt开发环境安装到了CentOS(64 bit)中,整个过程中有几个需要注意的地方,在这 ...
- 1214 线段覆盖wiki oi
题目描述 Description 给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,……N.这些坐标都是区间(-999,999)的整数.有些线段 ...
- 数据结构——二叉搜索树(Binary Search Tree)
二叉树(Binary Tree)的基础下 每个父节点下 左节点小,右节点大. 节点的插入: 若root==NULL则root=newnode 否则不断与节点值比较,较小则向左比较,较大则向右比较. 完 ...
- iOS中谓词的使用
Cocoa提供了一个类NSPredicate类,该类主要用于指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配.谓词表示计算真值或假值的函数.在cocoa ...