幻世(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这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...
随机推荐
- YUV / RGB 格式及快速转换算法
1 前言 自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用 的过程,所以在不同的应用领域中为了更好更准确 ...
- tomcat的集群配置
配置环境需要:1.Apache服务器,下载地址:http://httpd.apache.org/download.cgi#apache22 2.tomcat6.0或者tomcat7.0,(集群中tom ...
- SRM 585
250 : 递推,从左下角到右下角走一条,剩下的都是子结构 const int mod = 1000000007; long long dp[1000010] , s[1000010]; class ...
- gridview的高级使用
后台数据 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...
- [译]在 64bit 环境中执行32 bit的SSIS包
最近碰到了一个众所周知的32bit的 SSIS 包在64bit的SQL Server环境的执行问题. 我看了一些解决方案,比如修改在SSDT里面修改 debug 选项(Run64BitRuntime ...
- YII2 实现登录时候修改最新登录时间
YII2 实现登录时候修改最新登录时间 YII2保存最新登录时间主要技巧:为 EVENT_AFTER_LOGIN 事件绑定一个方法,在方法中保存最新时间 public function login() ...
- [LeetCode]题解(python):044-Wildcard Matching
题目来源: https://leetcode.com/problems/wildcard-matching/ 题意分析: 定义两个新字符规则,'?'代表任意一个字符,’*‘代表任意长度的任意字符.输入 ...
- AseoZdpAseo.init(this, AseoZdpAseo.INSERT_TYPE);
让以后的人知道吧,这就是一个广告包,相当于广告插件.
- Buy Tickets(线段树)
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 16607 Accepted: 8275 Desc ...
- Sqoop处理Clob与Blob字段
[Author]: kwu Sqoop处理Clob与Blob字段,在Oracle中Clob为大文本.Blob存储二进制文件. 遇到这类字段导入hive或者hdfs须要特殊处理. 1.oracle中的測 ...