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. linuxmint 默认不启动图形界面

    1.参考:http://garyu.blog.51cto.com/2838408/513772 修改/etc/X11/default-display-manager文件 该文件的内容一般是一个路径,比 ...

  2. VirtualProvider (VirtualCube)虚拟立方体

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. C\C++ 获取当前路径

    C\C++ 获取当前路径   获取当前工作目录是使用函数:getcwd.cwd指的是“current working directory”,这样就好记忆了. 函数说明: 函数原型:char* getc ...

  4. iOS 如何适配iOS10

    转自: http://www.cnblogs.com/jukaiit/p/5881062.html 2016年9月7日,苹果发布iOS 10.2016年9月14日,全新的操作系统iOS 10将正式上线 ...

  5. fsimage 和 edits log

    standby NN每隔一段时间(由参数dfs.ha.tail-edits.period决定,默认是60s)去检查Journal node上新的Edits log文件. standby NN每隔一段时 ...

  6. 转!mysql 查询 distinct多个字段 注意!!

    前几天做项目时,mysql写了个sql, distinct  id,col1,col2,...  结果出来了多条同个ID的记录,百度了下..... 下面先来看看例子: table  id name  ...

  7. attr和prop

    <div class="content-item active"> <table class="table"> <thead> ...

  8. jquery ui学习笔记

  9. c#网络通信框架networkcomms内核解析之九 自定义处理方法的运行机制

    NetworkComms网络通信框架序言 本文基于networkcomms2.3.1开源版本  gplv3协议 我们自己写的处理方法都称之为自定义处理方法 比如,我们在服务器上写的与登陆相关的处理方法 ...

  10. PHP批量删除做法

    1.批量删除主页 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...