分享cocos2dx3.17.1集成fmod步骤及注意事项

Cocos集成FMOD音效

====================================================

集成

首先下载对应的api

macOS

  • 1.把api/lowlevel/lib/下的libfmod.dylibapi/lowlevel/inc下的代码添加项目中
  • 2.项目配置把libfmod.dylib所在的路径添加到build settings下的Library Search Paths中,头文件的路径添加到build settings下的Header Search Paths
  • 3.在Build Phases中点击+选择New Copy File Phases,选择Frameworks,然后把libfmod.dylib添加到新建的phases中
  • 4.在build settings下的Other Linker Flags添加-lfmod,在 Runpath Search Paths设置@runpath的路径,示例项目中是@loader_path/../Frameworks

@runpath参考地址 http://www.cnblogs.com/csuftzzk/p/mac_run_path.html

IOS

  • 1.把api/lowlevel/lib/下的.aapi/lowlevel/inc下的代码添加项目中
  • 2.项目配置把静态库.a所在的路径添加到build settings下的Library Search Paths中,头文件的路径添加到build settings下的Header Search Paths

Windows

  • 1.把api/lowlevel/lib/下的.aapi/lowlevel/inc下的代码添加项目中
  • 2.右键点击工程,最下边找到属性属性配置下找到C/C++,然后点击常规,在附加包含目录中添加刚才添加的inc下的代码的目录。(release和debug)都要加
  • 3.在C/C++平级的列表中找到链接器,点击常规,在右侧附加库目录中添加刚才添加的lib目录(release和debug)都要加,在常规平级列表中找到输入,然后在附加依赖项debug下添加fmodL_vc.lib,fmodL64_vc.librelease下添加fmod_vc.lib,fmod64_vc.lib

Android

  • 1.把api/lowlevel/lib/api/lowlevel/inc添加到项目中
  • 2.fmod.jar包添加到项目中app/libs下,没有目录则新建一个,在build.gradle中添加implementation files('libs/fmod.jar')引用 jar包。
  • 3.编辑Android.mk文件,在LOCAL_PATH := $(call my-dir)下边添加

FMOD_ANDROID_DIR := …/…/…/…/fmod/android
FMOD_LIBRARY_PATH := (FMOD_ANDROID_DIR)/lib/(TARGET_ARCH_ABI)

include $(CLEAR_VARS)
LOCAL_MODULE := fmod
LOCAL_SRC_FILES := $(FMOD_LIBRARY_PATH)/libfmod.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/$(FMOD_ANDROID_DIR)/inc
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := fmodL
LOCAL_SRC_FILES := $(FMOD_LIBRARY_PATH)/libfmodL.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/$(FMOD_ANDROID_DIR)/inc
include $(PREBUILT_SHARED_LIBRARY)

include $(BUILD_SHARED_LIBRARY)上边添加

LOCAL_STATIC_LIBRARIES += fmod
LOCAL_STATIC_LIBRARIES += fmodL
  • 4.如果使用lua,还需要编辑lua_bindings下边的Android.mk
  • 5.AppActivity中添加必要的函数调用,初始化、退出、load lib
    public class AppActivity extends Cocos2dxActivity{
    	@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.setEnableVirtualButton(false);
            super.onCreate(savedInstanceState);
            org.fmod.FMOD.init(this);
        }
        protected void onDestroy() {
            super.onDestroy();
            org.fmod.FMOD.close();//用于关闭fmod功能
        }
        static
        {
            System.loadLibrary("fmod");
        }
    }
    

在lua中使用

打开 frameworks/cocos2d-x/tools/tolua/ 仿着写一个导出文件 <.ini 和 .py>导出c++ to lua

注意

cocos tolua 需要使用cocos版本对应的android-ndk,对应关系查看cocos官网

简单使用

//初始化FMOD系统
FMOD::System *system;
FMOD::System_Create(&system);
system->init(maxchannels, FMOD_INIT_NORMAL, nullptr); // maxchannels表示最大channel数量(可同时播放的音效数量)

//创建音效的实例
FMOD::Sound * sound;
system->createSound(filename, FMOD_DEFAULT, 0, &sound); // 第二个参数根据使用环境不同选择不同的枚举

// 播放上边创建的音效
FMOD::Channel *channel = 0;
system->playSound(sound, 0, false, &channel);

//设置不同属性(音量,模式等)
channel->setVolume(volume);
channel->setMode(FMOD_DEFAULT);

###示例工程
frameworks/fmod中的FmodSound类,简单实现了背景音乐和播放音效的基础方法

void playSound(std::string filename, bool loop, float volume);
void setSoundVolume(float volume);
void stopSoundByName(std::string filename);
void stopAllSound();
void playMusic(std::string filename, bool isloop);
void stopMusic();
void preloadSound(std::string filename);
6赞