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. 配置eclipse使能打开当前文件所在目录

    配置方法如下:Run -> External Tools -> External Tools Configurations...右键Program,new 在右边的界面中: Locatio ...

  2. C++string中用于查找的find系列函数浅析

    总述:      以下所讲的所有的string查找函数,都有唯一的返回类型,那就是size_type,即一个无符号整数(按打印出来的算).若查找成功,返回按查找规则找到的第一个字符或子串的位置:若查找 ...

  3. .ipynb文件 与ipython notebook

    没有安装ipython notebook 后看见.ipynb文件直接手足无措了 一.安装ipython notebook 使用命令 pip ipython [all] 为所有用户安装 ipython ...

  4. Python学习(14)模块二

    一:_name_ Python中if _name_ == '_main_'的解析 当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍 ...

  5. Security » Authorization » 要求处理器中的依赖注入

    Dependency Injection in requirement handlers¶ 30 of 32 people found this helpful Authorization handl ...

  6. 做完c语言作业的心得

    算是第一次自己接触c语言,并不是很深入的了解了,但也完成了第一次课的作业.在没有复制粘贴的情况下,8遍的简单编程让我记下了它基本的格式. 实验1.2.3.7都是基本的输入字,和课上的练习差不多,巩固最 ...

  7. 如何通过pid快速找出进程的路径

    [carlton@oc3408554812 Desktop]$ top top - 09:35:06 up 32 min,  2 users,  load average: 1.49, 1.56, 1 ...

  8. Input 值改变触发事件

    $('#keyword').bind('input propertychange', function() { $('.close-search').show();});  

  9. 手机抓包-fiddler

    如果app走的是http协议,不用root,只需要通过fiddler做代理,就可以抓到所有请求. 1. fiddler+手机wifi设置 安装fiddler,勾中 Fiddler Options -& ...

  10. Linux摄像头驱动学习之:(五)UVC-分析设备描述符

    linux系统上插上USB摄像头设备后,内存就会有相应的设备描述符信息,后期可以根据这些信息进一步写驱动程序. 流程:Device(设备) -> Configuration(配置) -> ...