cocos2d-x的音頻引擎是cocosDenshion, 它的Android版比較弱, 只能播放一個背景音樂和些許音效, 若是要實現稍微複雜一點的音頻播放, 好比同時播放幾個音軌就不能了. 這一點遠不及iOS版.android
對於普通的遊戲, 背景音樂加音效也夠用了. 可是對於音樂類遊戲, 就不行了.api
fmod音頻引擎是一個很是專業的音頻引擎, 除了能同時播放多個音軌, 還有其餘強大的功能. 緩存
使用起來也很是簡單:spa
1. 去fmod.org下載 fmod ex的android版本指針
2. 解壓縮後, 在api/inc下就是須要的頭文件, api/lib下面就是須要的庫文件遊戲
3. 打開基於cocos2d-x的工程的jni/Android.mkget
在第一句 LOCAL_PATH := $(call my-dir) 產品
後面加入it
include$(CLEAR_VARS) io
LOCAL_MODULE := fmodex
LOCAL_SRC_FILES := /YOUR_FMOD_PATH/api/lib/$(TARGET_ARCH_ABI)/libfmodex.so
LOCAL_EXPORT_C_INCLUDES := /YOUR_FMOD_PATH/api/inc
include$(PREBUILT_SHARED_LIBRARY)
注意YOUR_FMOD_PATH是你本地解壓縮fmod ex的路徑, 而後, 在
LOCAL_WHOLE_STATIC_LIBRARIES := 中最後加入fmodex
這樣就把libfmodex.so連接到工程裏了.
而後, 將頭文件的路徑加入到 LOCAL_C_INCLUDES := 中
4. 在工程中須要調用fmod的地方include "fmod.h" 和 "fmod_errors.h"等.
就能夠調用fmod來播放音頻文件了. 可使用路徑來播放, 好比/sdcard/xxx/yyy.mp3.
不過, 用fmod不能直接用路徑播放Assets文件夾下的音頻文件, 由於這些文件是打包到apk中的.
若要播放Assets中的文件, 須要先讀取成數據, 調用fmod來播放. 參考代碼以下:
FMOD_SYSTEM *gSystem = 0;
FMOD_SOUND *gSound = 0;
FMOD_CHANNEL *gChannel = 0;
FMOD_RESULT result = FMOD_OK;
result = FMOD_System_Create(&gSystem);
result = FMOD_System_Init(gSystem, 32, FMOD_INIT_NORMAL, 0);
unsigned long size = 0;
unsigned char* data = CCFileUtils::sharedFileUtils()->getFileData("5stars.ogg", "r", &size);
FMOD_CREATESOUNDEXINFO exinfo = {0};
exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
exinfo.length = size;
result = FMOD_System_CreateSound(gSystem, (const char*)data, FMOD_OPENMEMORY | FMOD_CREATESAMPLE | FMOD_HARDWARE | FMOD_LOOP_OFF, &exinfo, &gSound);
result = FMOD_System_PlaySound(gSystem, FMOD_CHANNEL_FREE, gSound, 0, &gChannel);
這裏, FMOD_System_CreateSound能夠講數據指針做爲data參數傳入, 注意後面的參數要加上FMOD_OPENMEMORY, 表示是用直接用數據播放音樂, FMOD_CREATESAMPLE表示讓FMOD來緩存音頻數據, 就能夠在隨後釋放data. 同時, 要構造一個FMOD_CREATESOUNDEXINFO結構體, 用來傳入數據的長度.
執行程序, 就能聽到美妙的音樂啦~
這是播放一個文件, 若要同時播放多個文件, 建立多個Channel便可.
另外請注意, fmod ex雖然可無償使用, 但用於商業就要license費了. 對於低於5美圓的產品, 100$仍是能夠接受的.