cocos2dx自带的音效播放有SimpleAudioEngine和AudioEngine两个,SimpleAudioEngine可以播放简单的音效,

如果播放音效数量过多的话,多导致有些音效播放失败。AudioEngine是一个不成熟的音效引擎,笔者在两个项目中

都试过用它,结果在安卓手机上频繁切换音效的过程中出现闪退。

fmod很强大,而且一个音效文件可以支持多平台。而且音效文件不容易被盗。

在官网下载cocos2dx的demo,然后下载对应平台的fmod的库,将安装好的库文件放在同一个文件夹,另外所有头文件

也放在一个文件夹内。

win32的库有:

fmod_vc.lib

fmodL_vc.lib

fmodstudio_vc.lib

fmodstudioL_vc.lib

fsbank_vc.lib

对于64位系统的,可以使用带64的库文件。

在vs的库路径和附加依赖项中加入写库文件,在附加包含目录添加头文件目录,运行文件即可。

对应安卓平台会有许多问题,比如声音会出现颤抖,处理方法可以看官网的教学文档。

安卓接入过程:

1.修改项目的jni目录Android.mk文件。在文件开始的地方加入

 LOCAL_PATH := $(call my-dir)

 include $(CLEAR_VARS)
LOCAL_MODULE := fmodstudio
LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libfmodstudio.so
include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS)
LOCAL_MODULE := fmodstudioL
LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libfmodstudioL.so
include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS)
LOCAL_MODULE := fmod
LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libfmod.so
include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS)
LOCAL_MODULE := fmodL
LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libfmodL.so
include $(PREBUILT_SHARED_LIBRARY)

在LOCAL_SRC_FILES变量中加入自己封装的fmod的cpp文件;

在LOCAL_C_INCLUDES变量中加入fmod头文件目录;

在include $(BUILD_SHARED_LIBRARY)上方加入share libraies的导入变量:

LOCAL_SHARED_LIBRARIES := fmodL
LOCAL_SHARED_LIBRARIES += fmod
LOCAL_SHARED_LIBRARIES += fmodstudioL
LOCAL_SHARED_LIBRARIES += fmodstudio

include $(BUILD_SHARED_LIBRARY)

在jni的目录下创建prebuilt文件夹,将fmod的库的四个文件夹:arm64-v8a、armeabi、armeabi-v7a、x86放在prebuilt文件夹下,

另外还有一个fmod.jar库,将它放在libs文件夹下

修改安卓的AppActivity启动文件:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        org.fmod.FMOD.init(this);//用于启动fmod功能

}

protected void onDestroy() {

  super.onDestroy();

org.fmod.FMOD.close();//用于关闭fmod功能

}

  static
    {
    System.loadLibrary("fmod"); //用于程序开始运行时导入fmod.jar
    }

接入过程完成。

注意的是,安卓在加载音效的目录跟其他平台有所区别,

下方是区分平台获取音效的路径方法:

const char * getResourcePath(const char *path)
 {
  if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
  {
   char buf[256];
   sprintf(buf, "file:///android_asset/%s", path);
   return buf;
  }
  else
  {
   return path;
  }
 }

如果项目中使用了fmod的录音功能,需要在AndroidManifest.xml文件中加入路径权限:android.permission.RECORD_AUDIO

在项目目录下通过控制台编译打包:cocos compile -p android

转载请注明出处,from 博客园HemJohn

cocos2dx for android 接入 fmod的过程的更多相关文章

  1. 分析cocos2d-x在Android上的编译过程(1):cocco2d-x是怎样生成的Android的文件夹结构

    当新建完一个cocos2d-x的项目后.进入到项目中的proj.android中,会看到例如以下的文件夹结构 在VS先把它编译,然后导入到Eclipse中,导入完后会看到多了几个文件 watermar ...

  2. cocos2d-x在Android上的编译过程(3):简化Android.mk文件的编写

    在编译动态库时.要求我们要去编写jni/Android.mk文件.告诉编译器编译出来的库时应包括包括编译文件和其它引用库.但对于一个大项目来说,维护这个文件肯定是一件比較繁琐的事情.由于每加一个文件或 ...

  3. android cocos2d-x for Android安装和学习笔记(请用adt-bundle21.1或以上导入)

    引用:http://weimingtom.iteye.com/blog/1483566 (20121108)注意:这篇文章用cdt编译ndk工程的内容已过时(现在可以用adt-bundle,避免配置繁 ...

  4. (译)cocos2d-x跨android&ios平台开发入门教程

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  5. TalkingData Cocos2dx在android平台使用总结

    前言:最近发现很多朋友在使用TalkingData游戏版本Cocos2dx SDK使用过程中会出现的一些问题,今天来做一下总结,希望对您有所帮助: 首先非常感谢您使用TalkingData游戏统计平台 ...

  6. cocos2dx工程中接入支付宝sdk

    1. 首先去支付宝官网下载开发者文档 2. 然后按着开发者文档将支付宝的sdk导入到你的工程中,并关联到工程中,步骤入下图: (1)将从支付宝官方网站获得的支付宝的sdk的jar包拷贝到工程中的lib ...

  7. 为Cocos2d-x的Android平台加入Protobuffer支持

    为Cocos2d-x的Android平台加入Protobuffer支持 分类: 工作2013-11-27 18:00 386人阅读 评论(1) 收藏 举报 cocos2d-xandroid平台交叉编译 ...

  8. Mac 下配置 Cocos2d-x 3-x android 的环境

    本人初学Cocos2d 3-x,环境配置,搭建android环境弄了好长时间,走了不少弯路,翻阅了好多人的博客和文档,包括官方文档讲的似乎有些似懂非懂,好多依然是旧的版本,所以把我的整个过程梳理一下. ...

  9. 【转载】cocos2dx 中 Android NDK 加载动态库的问题

     原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各 ...

随机推荐

  1. 洛谷P2046 [NOI2010]海拔(最小割,平面图转对偶图)

    传送门 不明白为什么大佬们一眼就看出这是最小割…… 所以总而言之这就是一个最小割我也不知道为什么 然后边数太多直接跑会炸,所以要把平面图转对偶图,然后跑一个最短路即可 至于建图……请看代码我实在无能为 ...

  2. ADO学途 one day

    博主在第一个demo的困苦中,略得一些见解,需要的伙伴可以get下 刚开始先创建一个程序的前端,这样对自己要实现的功能有一个直观的了解.分三 步:首先1.创建一个windows窗体.拖控件使程序接近真 ...

  3. IOS字符串截取保留小数点后两位

    -(NSString*)getTheCorrectNum:(NSString*)tempString { //计算截取的长度 NSUInteger endLength = tempString.len ...

  4. (转) Linux命令详解-date

    Linux命令详解-date 原文:https://www.cnblogs.com/Dodge/p/4278292.html 在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到 ...

  5. (转)io各层次性能汇总及运行速度对比

    io各层次性能汇总:以上图片可以清晰的解释io的运行效率 守护进程:持续保持运行着的程序 进程:放在内存中运行的程序 程序:代码文件,php,java

  6. return void ajax

    public class UserInfo { private String name; private Integer age; public String getName() { return n ...

  7. Java 2 个 List 集合数据求并、补集操作

    开发过程中,我们可能需要对 2 个 或多个 List 集合中的数据进行处理,比如多个 List 集合数据求 相同元素,多个 List 集合数据得到只属于本身的数据,如图示: 这里写图片描述 这里以 2 ...

  8. sql 容易被忽视的点

    1 dual select查询语句只有select就可以,但为了规范,凑结构,可以加个dual 例:select now() from dual; 这个概念是Oracle中的.在mysql中可写可不写 ...

  9. 使用Karabiner为Mac内置键盘、HHKB进行映射

    使用Karabiner为Mac内置键盘.HHKB进行映射 Table of Contents 1. 引言 2. 什么是Karabiner和配置方法的基本说明 3. 内置键盘设置 4. HHKB设置 5 ...

  10. java控制远程ssh-expect4j(一)

    github : https://github.com/wengyingjian/ssh-java-demo.git 程序写完后,ssh连接到远程服务器上需要做的步骤都是固定的,所以我们可以通过程序来 ...