声明:本教程版权归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)的更多相关文章

  1. FFmpeg命令行工具学习(二):播放媒体文件的工具ffplay

    一.简述 ffplay是以FFmpeg框架为基础,外加渲染音视频的库libSDL构建的媒体文件播放器. 在使用ffplay之前必须要安装到系统中,MAC的安装教程为:http://www.cnblog ...

  2. 幻世(OurDream)2D图形引擎使用教程8——处理操作输入(2)

    声明:本教程版权归Lizcst Software Lab所有,欢迎转载,但是转载必须保留本段声明文字,并注明文章来源:http://blog.csdn.net/kflizcst 谢谢合作! 今天的教程 ...

  3. 幻世(OurDream)2D图形引擎使用教程9——处理操作输入(3)

    声明:本教程版权归Lizcst Software Lab所有,欢迎转载,但是转载必须保留本段声明文字,并注明文章来源:http://blog.csdn.net/kflizcst 谢谢合作! 现在我们该 ...

  4. 幻世(OurDream)2D图形引擎易语言汉化版更新提示

    幻世引擎的易语言汉化专版到目前为止已经累积了多个BUG,其中多个BUG是影响引擎功能使用的问题,我将会在近期发布修复所有问题的更新版本(此更新版本同时也将会支持最新的对加入的粒子系统的支持),敬请各位 ...

  5. 幻世(OurDream)2D图形引擎大更新——炫丽粒子特效强势回归!

    本次更新终于让各位期待已久的绚丽粒子系统特效强势回归到幻世当中了.凭借新引擎强大而又高效的绘图,新的粒子系统将比旧有版本(原Ycnd 2D)在性能上有极大幅度的增强,增幅超过十倍! 更强的性能!更好的 ...

  6. 幻世(OurDream)TM 2D图形引擎开通捐赠渠道

    为了支持幻世(OurDream)TM 2D图形引擎更好的发展,同一时候也是为了给希望支持引擎发展的朋友一个安全快捷的渠道,Lizcst Software Lab于今日正式在官方旗舰店增设了一个捐赠捐款 ...

  7. Unity 2D游戏开发教程之使用脚本实现游戏逻辑

    Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...

  8. node-webkit教程(11)Platform Service之shell

    node-webkit教程(11)Platform Service之shell 文/玄魂 目录 node-webkit教程(10)Platform Service之shell 前言 11.1  She ...

  9. Unity 2D游戏开发教程之精灵的死亡和重生

    Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...

随机推荐

  1. hdu1711(终于搞懂了KMP算法了。。)

    题意:给你两个长度分别为n(1 <= N <= 1000000)和m(1 <= M <= 10000)的序列a[]和b[],求b[]序列在a[]序列中出现的首位置.如果没有请输 ...

  2. 解决shell脚本中 echo 怎么写入换行到文件

    測试环境:ubuntu12.04 LTS版本号 echo >> file.txt就可以, 这样的方法对于脚本开头是bash和sh效果都一样, 而echo -e >> file. ...

  3. Extending your SharePoint 2007 site with Microsoft ASP.NET AJAX 3.5

    After ASP.NET 3.5 has been installed you need to modify the web.config file of your MOSS web site wi ...

  4. Oracle定时器调用存储过程

    1. 创建表 create table job_table(run_time date); 2. 创建存储过程 create or replace procedure job_proc is begi ...

  5. XAlign - Xcode插件 - 对齐代码

    链接地址:http://my.oschina.net/u/2473136/blog/520620 一款十分强大的自定义对齐模式插件 开源地址:https://github.com/qfish/XAli ...

  6. SpringMVC请求访问不到静态文件解决方式

    如何你的DispatcherServlet拦截"*.do"这样的有后缀的URL,就不存在访问不到静态资源的问题. 如果你的DispatcherServlet拦截"/&qu ...

  7. Zend Studio 如何配置本地apache服务器使用xdebug调试php脚本

    本地环境搭配: apache 2.2 安装位置:D:/program files/Apache Software Foundation/Apache2.2 php 5.2.10 安装位置:C:/php ...

  8. Windows Phone 8初学者开发—第6部分:设置应用程序的样式

    原文 Windows Phone 8初学者开发—第6部分:设置应用程序的样式 Source Code: http://aka.ms/absbeginnerdevwp8  PDF Version: ht ...

  9. jQuery入门学习贴

    先引一下阮一峰大牛翻译的书<软件随想录>中的一句话: “ joel认为,软件开发,最缺的是天才.而我认为,最缺的是全才.什么“全”:全面.全局.全心全意.全力以赴. ” 最近再学习jQue ...

  10. 深入探究VC —— 资源编译器rc.exe(3)

    Windows应用程序中,图标.菜单.畏途.图标.工具条.对话框等是以资源的形式存在的.开发人员也可以自定义资源类型.如果一个程序使用了资源,那么它在构建时需要对资源进行编译.程序所使用的资源会在资源 ...