基於cocos2d-x的Android遊戲中使用fmod音頻引擎

cocos2d-x的音頻引擎是cocosDenshion, 它的Android版比較弱, 只能播放一個背景音樂和些許音效, 如果要實現稍微複雜一點的音頻播放, 比如同時播放幾個音軌就不能了. 這一點遠不及iOS版.

對於普通的遊戲, 背景音樂加音效也夠用了. 但是對於音樂類遊戲, 就不行了.

fmod音頻引擎是一個非常專業的音頻引擎, 除了能同時播放多個音軌, 還有其他強大的功能. 

使用起來也非常簡單:

1. 去fmod.org下載 fmod ex的android版本

2. 解壓縮後, 在api/inc下就是需要的頭文件, api/lib下面就是需要的庫文件

3. 打開基於cocos2d-x的工程的jni/Android.mk

在第一句 LOCAL_PATH :$(call my-dir) 

後面加入

include$(CLEAR_VARS) 

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$還是可以接受的.


轉載:http://www.cnblogs.com/dqshll/p/3440061.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章