声明:本教程版权归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. A计划(bfs)

    A计划 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissio ...

  2. 设计模式 - 适配器模式(adapter pattern) 具体解释

    适配器模式(adapter pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 适配器模式(adapter pattern): 将一个类的接 ...

  3. C# inherit

    Case:class A has a construct. class B is inherit from class A and B also has a construct. What's the ...

  4. Myeclipse代码提示及如何设置自动提示

    Myeclipse代码提示及如何设置自动提示 (2011-11-18 00:38:41) 转载▼ 标签: 杂谈 分类: Java 1. 设置代码自动提示window --> preference ...

  5. 两台linux机器时间同步

    Linux自带了ntp服务 -- /etc/init.d/ntpd,这个服务不仅可以设置让本机和某台/某些机器做时间同步,他本身还可以扮演一个time server的角色,让其他机器和他同步时间. 配 ...

  6. php 自己写的好看的分页类

    自己写的一个分页类 ,不是很完整,个别没有做验证,但可以使用,分页效果见文章底部.除了链接数据库的代码没有粘贴上来,其他的都粘贴了.供学习使用- <?php /** * Created by P ...

  7. Python网络编程——修改套接字发送和接收的缓冲区大小

    很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...

  8. hdu 4372 第一类stirling数的应用/。。。好题

    /** 大意: 给定一系列楼房,都在一条水平线上,高度从1到n,从左侧看能看到f个, 从右侧看,能看到b个,问有多少种这样的序列.. 思路: 因为肯定能看到最高的,,那我们先假定最高的楼房位置确定,那 ...

  9. GROUPING SETS、ROLLUP、CUBE

    大家对GROUP BY应该比较熟悉,如果你感觉自己并不完全理解GROUP BY,那么本文不适合你.还记得当初学习SQL的时候,总是理解不了GROUP BY的作用,经过好长时间才终于明白GROUP BY ...

  10. 转:C++:从子类访问父类的私有函数

    众所周知,c和c++的数组都是不安全的,因为无论c还是c++都不提供数组边界检查功能,这使得数组溢出成为可能.从某个意义上说,c和c++是一种缺少监督的语言,然而这也正是其魅力所在.c++给予程序员更 ...