基于cocos2d-x的Android游戏中使用fmod音频引擎
cocos2d-x的音频引擎是cocosDenshion, 它的Android版比较弱, 只能播放一个背景音乐和些许音效, 如果要实现稍微复杂一点的音频播放, 比如同时播放几个音轨就不能了. 这一点远不及iOS版.
对于普通的游戏, 背景音乐加音效也够用了. 但是对于音乐类游戏, 就不行了.
fmod音频引擎是一个非常专业的音频引擎, 除了能同时播放多个音轨, 还有其他强大的功能.
使用起来也非常简单:
1. 去fmod.org下载 fmod ex的android版本
2. 解压缩后, 在api/inc下就是需要的头文件, api/lib下面就是需要的库文件
3. 打开基于cocos2d-x的工程的jni/Android.mk
在第一句 LOCAL_PATH := $(call my-dir)
后面加入
include$(CLEAR_VARS)
LOCAL_MODULE := fmodex
LOCAL_SRC_FILES := /YOUR_FMOD_PATH/api/lib/$(TARGET_ARCH_ABI)/libfmodex.so
LOCAL_EXPORT_C_INCLUDES := /YOUR_FMOD_PATH/api/inc
include$(PREBUILT_SHARED_LIBRARY)
注意YOUR_FMOD_PATH是你本地解压缩fmod ex的路径, 然后, 在
LOCAL_WHOLE_STATIC_LIBRARIES := 中最后加入fmodex
这样就把libfmodex.so链接到工程里了.
然后, 将头文件的路径加入到 LOCAL_C_INCLUDES := 中
4. 在工程中需要调用fmod的地方include "fmod.h" 和 "fmod_errors.h"等.
就可以调用fmod来播放音频文件了. 可以使用路径来播放, 比如/sdcard/xxx/yyy.mp3.
不过, 用fmod不能直接用路径播放Assets文件夹下的音频文件, 因为这些文件是打包到apk中的.
若要播放Assets中的文件, 需要先读取成数据, 调用fmod来播放. 参考代码如下:
FMOD_SYSTEM *gSystem = 0;
FMOD_SOUND *gSound = 0;
FMOD_CHANNEL *gChannel = 0;
FMOD_RESULT result = FMOD_OK;
result = FMOD_System_Create(&gSystem);
result = FMOD_System_Init(gSystem, 32, FMOD_INIT_NORMAL, 0);
unsigned long size = 0;
unsigned char* data = CCFileUtils::sharedFileUtils()->getFileData("5stars.ogg", "r", &size);
FMOD_CREATESOUNDEXINFO exinfo = {0};
exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
exinfo.length = size;
result = FMOD_System_CreateSound(gSystem, (const char*)data, FMOD_OPENMEMORY | FMOD_CREATESAMPLE | FMOD_HARDWARE | FMOD_LOOP_OFF, &exinfo, &gSound);
result = FMOD_System_PlaySound(gSystem, FMOD_CHANNEL_FREE, gSound, 0, &gChannel);
这里, FMOD_System_CreateSound可以讲数据指针作为data参数传入, 注意后面的参数要加上FMOD_OPENMEMORY, 表示是用直接用数据播放音乐, FMOD_CREATESAMPLE表示让FMOD来缓存音频数据, 就可以在随后释放data. 同时, 要构造一个FMOD_CREATESOUNDEXINFO结构体, 用来传入数据的长度.
执行程序, 就能听到美妙的音乐啦~
这是播放一个文件, 若要同时播放多个文件, 创建多个Channel即可.
另外请注意, fmod ex虽然可免费使用, 但用于商业就要license费了. 对于低于5美元的产品, 100$还是可以接受的.
基于cocos2d-x的Android游戏中使用fmod音频引擎的更多相关文章
- 基于cocos2d开发的android小游戏——採花仙
/*cocos 2d 已经成为了如今移动端游戏开发的强有力的工具,眼下主流游戏中多採用cocos 2d游戏引擎. 我也尝试了一下该引擎.我是用的是cocos2d-android,以后要移植到Cocos ...
- [Android游戏开发学习笔记]View和SurfaceView
本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在A ...
- NDk编译opencv for Android,并引用在Unity3d游戏中的一般步骤
本文使用:Unity3d + opencv + Android Unity3d中可以调用opencv 编译好的.so 动态库,在生成Android apk时可以正常运行. 因为Android系统是 ...
- Android研究之为基于 x86 的 Android* 游戏选择合适的引擎具体解释
摘要 游戏开发者知道 Android 中蕴藏着巨大的机遇. 在 Google Play 商店的前 100 款应用中,约一半是游戏应用(在利润最高的前 100 款应用中.它们所占的比例超过 90% ...
- 为基于 x86 的 Android* 游戏选择合适的引擎
摘要 游戏开发者知道 Android 中蕴藏着巨大的机遇. 在 Google Play 商店的前 100 款应用中,约一半是游戏应用(在利润最高的前 100 款应用中.它们所占的比例超过 90%). ...
- Atitit 游戏的通常流程 attilax 总结 基于cocos2d api
Atitit 游戏的通常流程 attilax 总结 基于cocos2d api 加载音效1 加载页面1 添加精灵1 设置随机位置2 移动2 垃圾gc2 点击evt2 爆炸效果3 定时生成精灵3 加载音 ...
- 怎样在Android开发中FPS游戏实现的两种方式比较
怎样在Android开发中FPS游戏实现的两种方式比较 如何用Android平台开发FPS游戏,其实现过程有哪些方法,这些方法又有哪些不同的地方呢?首先让我们先了解下什么是FPS 英文名:FPS (F ...
- 在基于TypeScript的LayaAir HTML5游戏开发中使用AMD
在基于TypeScript的LayaAir HTML5游戏开发中使用AMD AMD AMD是"Asynchronous Module Definition"的缩写,意思就是&quo ...
- 如何在Cocos2D游戏中实现A*寻路算法(六)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
随机推荐
- Linux 概念架构的理解
摘要 Linux kernel 成功的两个原因: 架构设计支持大量的志愿开发者加入到开发过程中: 每个子系统,尤其是那些需要改进的,都支持很好的扩展性. 正是这两个原因使得 Linux kernel ...
- Writing Text Files On The Client in Oracle Forms 10g
Below is the example to write file on client in Oracle Forms 10g with webutil library package.Note: ...
- 什么是 Help Desk?
科技如何帮助公司发展,关键就在于保证IT系统的安全稳定运行.我们都知道要保证系统100%可用非常难实现,那么如何在系统故障时减少处置时间?一个有效的办法就是帮助台(Help Desk).那么什么是帮助 ...
- centos jenkins
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo rpm --import htt ...
- IIS7配置PHP运行环境
1.下载PHP运行包,网址:http://windows.php.net/download/ 选择的对应的版本包下载,并解压到相应的目录中(不限定),如:E:\vss\php\php_sdk 2.配置 ...
- LTE Module User Documentation(翻译12)——X2切换(X2-based handover)
LTE用户文档 (如有不当的地方,欢迎指正!) 18 X2-based handover 正如 3GPP 定义的,切换是改变用户服务小区的连接方式的过程.这一过程中涉及的两个基站通常称为源基站和目 ...
- [http session]
原文链接:http://lavasoft.blog.51cto.com/62575/275589/ 1.Session创建的时间是: 一个常见的误解是以为session在有客户端访问时就被创建,然而事 ...
- OpenGL的API函数使用手册
(一)OpenGL函数库 格式: <库前缀><根命令><可选的参数个数><可选的参数类型> 库前缀有 gl.glu.aux.glut.wgl.glx.a ...
- checkbox将选中的数据提交到后台
在项目中有些地方需要批量添加的数据,在这里使用到checkbox比较方便一些. 例如:我需要将多个包添加到同一个地区的 主要的前端代码: 这个是用来放checkbox的. <div id=&qu ...
- laravel 控制器方法里存get值 和 blade 模板获得闪存值的方法
//get 方式把id传到路由 <a href="/admin/reply/add/{{$comment -> id}}" class="btn btn-bl ...