声明:本教程版权归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. Implement custom foreach function in C#

    http://msdn.microsoft.com/en-us/library/System.Collections.IEnumerator.aspx http://support.microsoft ...

  2. IOS开发之格式化日期时间的使用 && 编程中常见问题

    今天在做一个有关时间的一些开发的时候,遇见了一写问题,反正来说既是很简单的问题,但毕竟用了我一些时间去调错误,遂记录之. 本来是想用 NSDateFormat 来转换一下服务器返回的时间,然后在客户端 ...

  3. spring的常用配置

    bean.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http ...

  4. [LeetCode]题解(python):021-Merge Two Sorted Lists

    题目来源: https://leetcode.com/problems/merge-two-sorted-lists/ 题意分析: 题目给出两个排好序的链表,将这两个链表整合成一个新的有序的链表. 题 ...

  5. hdu 2814 快速求欧拉函数

    /** 大意: 求[a,b] 之间 phi(a) + phi(a+1)...+ phi(b): 思路: 快速求欧拉函数 **/ #include <iostream> #include & ...

  6. TCP/IP学习笔记

    1. 2. >>>   int socket(int af, int type,int protocol);//创建套接字,返回从文件描述表中取出新的索引号(int);AF_INET ...

  7. 修改SQL Server 排序规则 (未能排它地锁定数据库以执行该操作)

    use master go alter database DBName set single_user go alter database DBName COLLATE Chinese_PRC_CI_ ...

  8. Maven 版 JPA 最佳实践

    项目结构图 数据库环境 数据库:MySQL 版本:5.x 数据库名:jpa-demo 用户名密码:root/1234 代码清单 1:数据库脚本: /* Navicat MySQL Data Trans ...

  9. [置顶] ios 360度旋转效果demo

    demo功能:用UIimageView实现360度旋转效果. demo说明:iPhone6.1 测试成功.主要代码在:FVImageSequence.m中.在touchesMoved事件中,通过替换U ...

  10. 企业级IM应该帮助员工提高绩效,避免无关的信息干扰

    很多上班族一定熟悉如下的场景: 您早上上班一打开QQ,就弹出一个新闻集成窗口,随便点开看看吧,这一点不要紧,您就被一个又一个的链接带着逛下去了.等回过神来要工作的时候,发现已经在这些八卦新闻上浪费了一 ...