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