簡介
fmod API 是一種客戶端遊戲
和Unity3D頁遊
常用的跨平臺的音訊引擎,在過去15年中已經使用了超過2000個遊戲。
官網:https://www.fmod.com/
使用者可以到官網下載Studio使用,開發者可以下載程式設計師API,整合和外掛,進行開發。其支援的平臺非常之多:windows,linux,Android等等。

下載
進入官網必須要註冊賬號。我已經註冊賬號了,直接到download
目錄下下載相對應平臺的 FMOD API
即可。

我是基於Android平臺的ndk開發的,直接下載Android版本即可。
下載解壓得到的檔案:

在Android平臺執行示例程式。
1)、新建一個Android工程。
2)、我需要執行示例的聲音效果,可以看到api\lowlevel\examples
目錄下有effects.cpp
檔案,這就是示例聲音效果的檔案。

3)、專案中新建JNI目錄,將effects.cpp
檔案複製到JNI下,並且將lowlevel
目錄下的inc
檔案複製到JNI目錄,開啟lib
目錄,將fmod.jar
複製到專案的lib
下。
將libfmod.so
和libfmodL.so
同樣複製到JNI目錄。

4)、專案右鍵-------->Android Tools-------->add native support,並且將MainActivity.java檔案替換成FMOD示例的MainActivity.java檔案,且要更改包名。
5)、Android.mk配置

include $(CLEAR_VARS)
LOCAL_MODULE := fmod
LOCAL_SRC_FILES := libfmod.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := fmodL
LOCAL_SRC_FILES := libfmodL.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
複製程式碼
6)、開啟effect.cpp
,將需要的標頭檔案以及標頭檔案的實現檔案進入到JNI目錄下。

如下我已經將需要的標頭檔案加入到JNI目錄下了

但是還是報錯:

將需要的標頭檔案再NDK目錄下找到,並把路徑新增進來。專案右鍵----->properties:


以下是我加入的路徑:
E:\ndk\android-ndk-r14b-windows-x86_64\android-ndk-r14b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\lib\gcc\arm-linux-androideabi\4.9.x\include
E:\ndk\android-ndk-r14b-windows-x86_64\android-ndk-r14b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\lib\gcc\arm-linux-androideabi\4.9.x\include-fixed
E:\ndk\android-ndk-r14b-windows-x86_64\android-ndk-r14b\platforms\android-21\arch-arm\usr\include
複製程式碼
再Android.mk檔案加入common_platform.cpp
和common.cpp
編譯

重新build下專案還是錯誤:

原因,專案中沒有加入C++ STL標準庫。
新建Application.mk
檔案,加入STL標準庫
再NDK開發文件說明,使用C++ STL需要再JNI目錄下新建Application.mk
,加入STL標準庫

同樣需要再C/C++ general中加入檔案路徑:

我加入的檔案路徑是:
E:\ndk\android-ndk-r14b-windows-x86_64\android-ndk-r14b\sources\cxx-stl\stlport\stlport
複製程式碼
讀者也可以參考這篇文章Android學習筆記——NDK中C++標準庫、STL的配置;Include其他標頭檔案
重新build專案,報了這個錯誤clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)

原因:沒有生成mip64架構的so檔案,再obj目錄下找不到這個so庫

解決方法:再Application.mk加入APP_ABI

#####支援C++異常處理,標準莫板塊
APP_STL := gnustl_static
APP_ABI := armeabi armeabi-v7a #必須指定生成mip64架構的so檔案,否則出錯
複製程式碼
關於這個問題,可以參考 Error:error: linker command failed with exit code 1 (use -v to see invocation)這篇文章。
然後執行Android專案,沒問題了,並且能夠執行起來了。


也可以使用播放聲音的play_sound.cpp
檔案來執行試一下效果,只需要Android.mk替換下effects.cpp就可以了。

至此,整個FMOD示例在Android上執行起來了。如果想了解更多,需要細心的閱讀示例程式程式碼。