[发明专利]一种实时获取Cocos2d‑x游戏播放声音的方法有效
申请号: | 201510070822.1 | 申请日: | 2015-02-10 |
公开(公告)号: | CN104793917B | 公开(公告)日: | 2017-09-12 |
发明(设计)人: | 唐东明;周伟 | 申请(专利权)人: | 西南民族大学 |
主分类号: | G06F3/16 | 分类号: | G06F3/16 |
代理公司: | 成都信博专利代理有限责任公司51200 | 代理人: | 张澎 |
地址: | 610041 四川*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 实时 获取 cocos2d 游戏 播放 声音 方法 | ||
技术领域
本发明涉及一种实时获取Cocos2d-x游戏播放声音的方法,具体是指在游戏运行的过程中自动获取当前游戏播放的所有声音数据的方法。
背景技术
Cocos2d-x是一个支持多平台的2D手机游戏引擎,使用C++开发,基于OpenGL ES,基于Cocos2d-iphone,支持WOPhone,iOS 4.1,Android 2.1及更高版本,WindowsXP&Windows7,WindowsPhone 8。采用Cocos2d-x提供的SDK可以很容易地建立和运行IOS平台下的手机游戏。
IOS平台下Cocos2d-x提供了两种声音引擎,分别基于OpenAL和AVFoundation来进行封装实现。基于OpenAL的引擎主要用于提供实时的声效播放,例如游戏中的射击声音等;基于AVFoundation的声音引擎主要采用AVPlayer来实现,主要用于播放游戏的背景音乐。因此在基于Cocos2d-x开发的游戏中有两种声音播放源头。在游戏开发时,游戏开发人员有时需要对游戏运行中的声音特进行特殊处理以实现特殊的音乐效果,例如加入白噪声、变音等;此外游戏开发人员可能需要保存游戏运行过程中的声音用于回放游戏过程。为了实现这些特殊目的,就必须获得当前游戏中正在播放的所有的声音,并且需要实时的对当前播放的多路声音数据进行合成并处理。
为了实现上述目的,传统的方式分为两种:
(1)不采用Cocos2d-x提供的声音引擎,自己封装一套声音引擎,这样整个游戏运行期间的声音播放都由自己的声音引擎代码来控制,包括声音数据的加载、管理、播放、进度控制等等。这种方式的缺点是实现工作量大,并且自己封装的稳定性难以保证,和Cocos2d-x的兼容性也难以保证。
(2)修改Cocos2d-x的声音引擎源码,将自己的处理加入到引擎中。这种方式的实现无法保证通用性,针对正常播放的数据可能会产生破坏性的作用,并且有可能会破坏Cocos2d-x的完整性,此外只能针对单个应用,难以移植。
上面两种传统方式的一个共同的缺点是:由于OpenAL和AVFoundation都是以二进制库形式提供的底层播放基础,因此基于它们开发的声音播放只能实现播放声音文件,暂停播放,恢复播放等基本,而无法实时获得当前正准备送到声卡播放的音频数据帧。为了实现对当前播放声音的实时特殊处理就必须获得当前正播放的音频原始帧数据,并对音频帧数据进行实时处理才能满足需要。
发明内容
针对上述现有技术存在的问题,本发明提出通过重新编译提供OpenAL库函数实现并通过函数回调的方式获得当前播放的音频帧数据、并通过监控方式实时预加载Cocos2d-x的AVFoundation的AVPlayer播放的音频文件,通过音频时间轴计算的方式获得当前AVPlayer播放的音频帧,最后实时的将两种来源的音频帧数据进行合并,并通过回调函数的方式将合并后的当前播放的原始音频帧内容提供给游戏开发人员。
为了实现上述目的,本发明采用的手段是:
一种实时获取Cocos2d-x游戏播放声音的方法,通过创建一个服务于Cocos2d-x游戏开发人员的特殊Framework来获取游戏播放的声音,在该Framework中完整的重新编译实现OpenAL库;在OpenAL库实现中加入特定的回调函数用于获得当前播放的音频帧;并且通过引入全局的Cocos2d-x共享Director来获得回调接口,并添加回调函数用于监控Cocos2d-x游戏的每一帧,以此获得当前AVPlayer的播放状态并获得当前播放的音频帧,最后将获得的多路原始音频帧进行合并以获得混合后的声音帧,获得的声音帧和玩游戏的用户听到的声音完全一致,包括如下具体的步骤:
(1)创建一个用于IOS平台的Framework项目;
(2)引入OpenAL的代码实现,定义一个接收OpenAL播放的音频数据的函数get_openal_data(),并添加在OpenAL代码实现中音频处理函数处用于获得当前播放的音频帧;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西南民族大学,未经西南民族大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510070822.1/2.html,转载请声明来源钻瓜专利网。