[发明专利]一种实时获取Cocos2d‑x游戏播放声音的方法有效
申请号: | 201510070822.1 | 申请日: | 2015-02-10 |
公开(公告)号: | CN104793917B | 公开(公告)日: | 2017-09-12 |
发明(设计)人: | 唐东明;周伟 | 申请(专利权)人: | 西南民族大学 |
主分类号: | G06F3/16 | 分类号: | G06F3/16 |
代理公司: | 成都信博专利代理有限责任公司51200 | 代理人: | 张澎 |
地址: | 610041 四川*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 实时 获取 cocos2d 游戏 播放 声音 方法 | ||
1.一种实时获取Cocos2d-x游戏播放声音的方法,通过创建一个服务于Cocos2d-x游戏开发人员的特殊Framework来获取游戏播放的声音,在该Framework中完整的重新编译实现OpenAL库;在OpenAL库实现中加入特定的回调函数get_openal_data()用于获得当前播放的音频帧;并且通过引入全局的Cocos2d-x共享Director来获得回调接口,并添加回调函数用于监控Cocos2d-x游戏的每一帧,以此获得当前AVPlayer的播放状态并获得当前播放的音频帧,最后将获得的多路原始音频帧进行合并以获得混合后的声音帧,获得的声音帧和玩游戏的用户听到的声音完全一致,包括如下具体的步骤:
(1)创建一个用于IOS平台的Framework项目;
(2)引入OpenAL的代码实现,定义一个接收OpenAL播放的音频数据的函数get_openal_data(),并添加在OpenAL代码实现中音频处理函数处用于获得当前播放的音频帧;
(3)获得Cocos2d-x全局共享的Director对象并为其添加一个全局的事件回调Scheduler函数director_scheduler(),用于获得当前游戏每一帧的回调事件通知;该函数在游戏运行的每一帧都将被调用,具体的计算公式如下:
设当前播放的声音数据的指针为p,当前播放的音频帧数据指针为fp,并当前声音播放的第t秒,设音频每一帧为bf字节,音频采样频率为sr,则fp=p+t*sr*bf;
从而检测当前Cocos2d-x采用AVPlayer方式播放的声音文件的变化与播放状态的变化,获取当前播放音频帧;
(4)在游戏运行的每一帧对采用步骤(2)和步骤(3)分别获得的音频帧数据进行实时的合并,设获得音频帧为S1,S2,合并后的音频帧为S,则计算方式为:S=S1<0&&(S2<<16)<0?(S1+(S2<<16))-((S1*(S2<<16))/-2147483648):(S1>0&&(S2<<16)>0?(S1+(S2<<16))-((S1*(S2<<16))/2147483648):S1+(S2<<16));
(5)定义一个为Cocos2d-x游戏开发人员调用的函数get_playing_sound_dataframe(),通过该函数开发人员即可获得当前播放的游戏声音帧数据;另外定义一个用于初始化环境变量信息的函数init_environment()函数,通过该函数可以对一些必要的资源进行初始化;
(6)将Framework工程进行编译,设编译后的Framework名称为soundFramework。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西南民族大学,未经西南民族大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510070822.1/1.html,转载请声明来源钻瓜专利网。