zoukankan      html  css  js  c++  java
  • cocos2dx for android 接入 fmod的过程

    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文件。在文件开始的地方加入

     1 LOCAL_PATH := $(call my-dir)
     2 
     3 include $(CLEAR_VARS)
     4 LOCAL_MODULE := fmodstudio
     5 LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libfmodstudio.so
     6 include $(PREBUILT_SHARED_LIBRARY)
     7 
     8 include $(CLEAR_VARS)
     9 LOCAL_MODULE := fmodstudioL
    10 LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libfmodstudioL.so
    11 include $(PREBUILT_SHARED_LIBRARY)
    12 
    13 include $(CLEAR_VARS)
    14 LOCAL_MODULE := fmod
    15 LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libfmod.so
    16 include $(PREBUILT_SHARED_LIBRARY)
    17 
    18 include $(CLEAR_VARS)
    19 LOCAL_MODULE := fmodL
    20 LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libfmodL.so
    21 include $(PREBUILT_SHARED_LIBRARY)
    View Code

    在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

  • 相关阅读:
    局域网无法访问vmware虚拟机WEB服务器解决办法
    zipimport.ZipImportError: can't decompress data; zlib not available 解决办法
    如何在win下使用linux命令
    《redisphp中文参考手册》php版
    Python关键字参数与非关键字参数(可变参数)详解
    Python与 PHP使用递归建立多层目录函数
    第一场个人图论专题
    poj_2762,弱连通
    word宏的问题
    fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  • 原文地址:https://www.cnblogs.com/HemJohn/p/5447304.html
Copyright © 2011-2022 走看看