• 基于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$还是可以接受的.

  • 相关阅读:
    Struts2的HelloWorld
    javaScript 避免使用eval
    javaScript 全局变量注意
    NET下的XML序列化 5
    通过aps.net创建web services 3
    XML web Service标准2
    webServices简介笔记1
    批量更新
    物理数据模型(PDM)->概念数据模型 (CDM)->面向对象模型 (OOM):适用于已经设计好数据库表结构了。
    json时间格式的互换
  • 原文地址:https://www.cnblogs.com/dqshll/p/3440061.html
Copyright © 2020-2023  润新知