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音频引擎的更多相关文章

  1. 基于cocos2d开发的android小游戏——採花仙

    /*cocos 2d 已经成为了如今移动端游戏开发的强有力的工具,眼下主流游戏中多採用cocos 2d游戏引擎. 我也尝试了一下该引擎.我是用的是cocos2d-android,以后要移植到Cocos ...

  2. [Android游戏开发学习笔记]View和SurfaceView

    本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在A ...

  3. NDk编译opencv for Android,并引用在Unity3d游戏中的一般步骤

    本文使用:Unity3d + opencv + Android Unity3d中可以调用opencv 编译好的.so 动态库,在生成Android apk时可以正常运行.   因为Android系统是 ...

  4. Android研究之为基于 x86 的 Android* 游戏选择合适的引擎具体解释

     摘要 游戏开发者知道 Android 中蕴藏着巨大的机遇. 在 Google Play 商店的前 100 款应用中,约一半是游戏应用(在利润最高的前 100 款应用中.它们所占的比例超过 90% ...

  5. 为基于 x86 的 Android* 游戏选择合适的引擎

    摘要 游戏开发者知道 Android 中蕴藏着巨大的机遇. 在 Google Play 商店的前 100 款应用中,约一半是游戏应用(在利润最高的前 100 款应用中.它们所占的比例超过 90%). ...

  6. Atitit 游戏的通常流程 attilax 总结 基于cocos2d api

    Atitit 游戏的通常流程 attilax 总结 基于cocos2d api 加载音效1 加载页面1 添加精灵1 设置随机位置2 移动2 垃圾gc2 点击evt2 爆炸效果3 定时生成精灵3 加载音 ...

  7. 怎样在Android开发中FPS游戏实现的两种方式比较

    怎样在Android开发中FPS游戏实现的两种方式比较 如何用Android平台开发FPS游戏,其实现过程有哪些方法,这些方法又有哪些不同的地方呢?首先让我们先了解下什么是FPS 英文名:FPS (F ...

  8. 在基于TypeScript的LayaAir HTML5游戏开发中使用AMD

    在基于TypeScript的LayaAir HTML5游戏开发中使用AMD AMD AMD是"Asynchronous Module Definition"的缩写,意思就是&quo ...

  9. 如何在Cocos2D游戏中实现A*寻路算法(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

随机推荐

  1. sd 卡驱动--基于高通平台

    点击打开链接 内容来自以下博客: http://blog.csdn.net/qianjin0703/article/details/5918041 Linux设备驱动子系统第二弹 - SD卡 (有介绍 ...

  2. Code First Migrations更新数据库结构(数据迁移)

    背景 code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建 (DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们 ...

  3. jquery总结03-遍历节点

    这是用的最多的 向下遍历节点 children()   第一级子元素 相当于li>span find()  多级子孙元素 相当于li span 注意:.filter(':contains(&qu ...

  4. 单据状态BE构建

    这节主要罗列出单据状态BE构建步骤1.创建单据状态BE实体项目,修改命名空间 2.如下图所示,分别设置实体枚举状态值 3.修改单据基本属性 构造后,至此单据状态BE构建完毕

  5. Eclipse 修改API

    真机调试时报错,提示application api 21,device api 10 Automatic Target Mode: Unable to detect device compatibil ...

  6. mac 安装tomcat

    一.下载 首先在tomcat官网下载完整版的 tomcat.tar.gz包,Core下 注: zip用于windows操作系统,tar.gz用于unix和linux操作系统. Binary Distr ...

  7. 【转】Vim十大必备插件

    [转]Vim十大必备插件 转自:http://my.oschina.net/zhoukuo/blog/336315 Taglist taglist是一个用于显示定位程序中各种符号的插件,例如宏定义.变 ...

  8. Delphi TTable 组件

    TTable 是 TDataSet 的派生类,它是基于 BDE 数据库引擎的数据集组件,也是一个较简单的数据组件,可以直接从数据库中获取数据表的数据,只需设置连接的数据库属性(Database) 和所 ...

  9. Python3.X新特性之print和exec

    print print 现在是一个函数,不再是一个语句.<语法更为清晰> 实例1 打开文件 log.txt 以便进行写入并将对象指定给 fid.然后利用 print将一个字符串重定向给文件 ...

  10. Http-Only Cookie

    设置Cookie的时候,如果服务器加上了HttpOnly属性,则这个Cookie无法被JavaScript读取(即document.cookie不会返回这个Cookie的值),只用于向服务器发送. S ...