笔记:集成Wwise音频引擎

记录并积累开发过程中的小问题。请多指教。
直接从微信复制过来,图片加载不哭出来,代码格式有点乱·····
更多笔记请扫码访问公众号,一起交流~

关于Wwise相信很多人不太了解,那我也不多解释啦,直接到官网了解下就知道它的强大了~

由于项目需要同时播放大量音频,CC的音频组件难以支撑,同时播放数量过多会导致最后播放的音频无法播放,终止音频会发生爆音。所以最终选择了Wwise音频音频

Wwise对Unity和Unreal做了很好的支持,但对CC就···厚此薄彼了·····

只有一个N年前的Demo

https://github.com/wwisesamples/cocos2dx-IntegrationDemo

那咱们也得充分利用起来~

首先下载Demo,利用里面的WwiseWrapper文件,可以自己调整修改~

配个各个平台

windows:
1.添加附加包含目录

2.添加附加库目录

3.在工程中添加文件

Android:
1.修改Application.mk

2.修改Android.mk(可根据需求增加或删除插件)

LOCAL_PATH := $(call my-dir)

#wwise
include $(CLEAR_VARS)
ifndef AK_CONFIG
#AK_CONFIG := Profile
AK_CONFIG := Release
endif

ifneq ($(AK_CONFIG), Debug)
NDK_DEBUG := 1
endif

AK_ANDROID := 1

WWISESDK := E:/workspace/Wwise/SDK

include $(CLEAR_VARS)
#SDK_LIB_DIR := ${WWISESDK}/Android_$(TARGET_ARCH_ABI)/$(AK_CONFIG)/lib
SDK_LIB_DIR := ${WWISESDK}/Android_armeabi-v7a/Release/lib

ifneq ($(AK_CONFIG), Release)
LOCAL_MODULE := CommunicationCentral
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libCommunicationCentral.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
else
LOCAL_EXPORT_CFLAGS += -DAK_OPTIMIZED
endif

include $(CLEAR_VARS)
LOCAL_MODULE := AkMemoryMgr
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libAkMemoryMgr.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := AkSoundEngine
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libAkSoundEngine.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := AkCompressorFX
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libAkCompressorFX.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := AkPeakLimiterFX
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libAkPeakLimiterFX.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := zip
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libzip.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := cocos2djs_shared

LOCAL_MODULE_FILENAME := libcocos2djs

ifeq ($(USE_ARM_MODE),1)
LOCAL_ARM_MODE := arm
endif

#wwise
LOCAL_LDLIBS := -llog -lOpenSLES -landroid -lEGL -lGLESv1_CM
LOCAL_CFLAGS := -DLUA_USE_POSIX

LOCAL_C_INCLUDES := $(LOCAL_PATH)/…/…/…/Classes

#Wwise
LOCAL_C_INCLUDES +=
$(WWISESDK)/samples/SoundEngine/Android
$(WWISESDK)/samples/SoundEngine/Android/libzip/lib
$(WWISESDK)/samples/SoundEngine/Common
$(WWISESDK)/include
$(WWISESDK)/samples/IntegrationDemo/Android \

LOCAL_SRC_FILES := hellojavascript/main.cpp
…/…/…/Classes/AppDelegate.cpp
…/…/…/Classes/jsb_module_register.cpp \

#wwise
LOCAL_SRC_FILES +=
…/…/…/Classes/WwiseWrapper.cpp
…/…/…/Classes/WwiseAudio.cpp
…/…/…/Classes/jsb_wwise_audio.cpp \

LOCAL_SRC_FILES +=
$(WWISESDK)/samples/SoundEngine/Common/AkFileLocationBase.cpp
$(WWISESDK)/samples/SoundEngine/Common/AkFilePackage.cpp
$(WWISESDK)/samples/SoundEngine/Common/AkFilePackageLUT.cpp
$(WWISESDK)/samples/SoundEngine/Android/AkFileHelpers.cpp
$(WWISESDK)/samples/SoundEngine/Android/AkDefaultIOHookBlocking.cpp \

#jpush

LOCAL_SRC_FILES += …/…/…/Classes/jpush/JPushBridge.cpp \

LOCAL_STATIC_LIBRARIES := cocos2dx_static

include $(BUILD_SHARED_LIBRARY)

$(call import-module, cocos)
3.修改AppActivity.java

static public AppActivity activity = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    
    super.onCreate(savedInstanceState);
    
activity = this;    
}

//Wwise
public static Object getInstance() {
    return activity ;
}

ios:
1.在工程中添加文件

2.添加链接库

$(WWISESDK)/iOS/$(CONFIGURATION)-iphoneos/lib/libAkMusicEngine.a

其中红线框起来的是通信功能,debug模式下添加,release模式下不添加

3.添加头文件的搜索路径

4.添加.a文件的搜索路径

$(WWISESDK)/iOS/$(CONFIGURATION)-iphoneos/lib

5.添加自定义值

相关配置工作完成后,可以开始使用了

1.初始化Wwise

initWwise()
{
    cc.loader.loadRes("sounds/Init", function (err, asset) {
        let path = asset.nativeUrl;       
        WwiseAudio.init(path);             
        this.loadBnk();
    }.bind(this));
}

2.导入bnk

loadBnk()
{
    cc.loader.loadRes("sounds/PianoNote", function (err, asset) {
        let path = asset.nativeUrl;              
        WwiseAudio.loadBank(path);           
    }.bind(this));
}

3.使用(播放,停止,暂停等)

playAudio(eventName, vol)
{
    //WwiseAudio.registerGameObj(this._indexAudioObj);       
    //let audioID = WwiseAudio.postEvent(eventName, 100);
    //WwiseAudio.setVolume(this._indexAudioObj, vol);
    let audioID = WwiseAudio.playAudio(this._indexAudioObj, eventName, vol);
    this._indexAudioObj++;

    return audioID;
}

4.在update中添加

WwiseAudio.renderAudio();
5.停止

stopAudio(audioID)
{
    WwiseAudio.stopAudio(audioID, 222);
}

6.卸载

// Unregister the “Piano” game object
AK::SoundEngine::UnregisterGameObj(GAME_OBJECT_PIANO);
// Unload the sound bank
AK::SoundEngine::UnloadBank(bnkPath, NULL);

WWISE::terminate();

5赞

代码格式化一下 会更好

微信公众号那格式没问题~
我直接复制粘贴过来了····
图片都没有了,代码格式也乱了···
sorry

谢谢分享,有机会来试试

一般情况下是用不到了~
除非大型游戏或者音游····
王者荣耀也是这个音频引擎······

希望能够再详细点的流程 请问下这个Application.mk Android.mk 路径是哪个呀
还有一个是
LOCAL_SRC_FILES += \ ../../../Classes/WwiseWrapper.cpp \ ../../../Classes/WwiseAudio.cpp \ ../../../Classes/jsb_wwise_audio.cpp \

这几个脚本的内容能不能提供下 谢谢啦