向Cocos2d-x SimpleAudioEngine

时间:2015-06-10 21:55:49

标签: java android c++ audio cocos2d-x

在Cocos2d-x(3.6)中我试图为SimpleAudioEngine添加增强的功能。具体来说,关于Android的SoundPool(SimpleAudioEngine基于Android,至少对于Android),我试图添加一些尚未实现但在Android Developer网站上记录的方法。

例如,SoundPool的play方法包含一个int类型的循环变量,而在SimpleAudioEngine中它的类型为bool(Java端的boolean)。如果我可以用循环变量实现一个新方法作为int类型,我将能够在调用playEffect方法时直接控制重复次数。

我已经找到了大部分所需的更改,包括各种C ++标头和.cpp文件(cocos / audio / include / SimpleAudioEngine.h,cocos / audio / android / cddSimpleAudioEngine.cpp,cocos / audio / android / jni / cddandroidAndroidJavaEngine.h,和cocos / audio / android / jni / cddandroidAndroidJavaEngine.cpp)以及Cocos2dxSound.java文件,但我仍然收到错误消息,说我的新方法(我称之为playEffectN)无法找到。

我可以看到可能需要添加某些内容的唯一其他位置是cocos / audio / openal / SimpleAudioEngineOpenAL.cpp文件,但我不太确定如何修改它以添加我的新方法。

为了将这些额外的功能添加到SimpleAudioEngine,有人能指出我还需要做些什么吗?如果我成功,我将很乐意分享结果。 (如果成功,我还可以在SoundPool中添加一些其他未实现的方法,例如setLoop,setPriority,setRate和setVolume,用于已经分配了soundID的声音。)

1 个答案:

答案 0 :(得分:0)

首先,在:

中添加c ++ apis
cocos/audio/include/AudioEngine.h 

虽然cddSimpleAudioEngine.cpp中没有实现,但仍需要在AudioEngine.h中声明函数

然后,c ++和java之间的桥梁:

cocos/audio/android/jni/cddandroidAndroidJavaEngine.h
cocos/audio/android/jni/cddandroidAndroidJavaEngine.cpp

这里,在cddandroidAndroidJavaEngine.h中声明并在cddandroidAndroidJavaEngine.cpp中实现,如

 void AndroidJavaEngine::playEffectN(int times) {
        cocos2d::JniMethodInfo methodInfo;

        if (! getJNIStaticMethodInfo(methodInfo, "playEffectN", "(I)V")) {
            return ;
        }

        methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID, times);
        methodInfo.env->DeleteLocalRef(methodInfo.classID);
    }

然后在java

cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java

添加如下功能:

public static void playEffectN(int times) {

}

最后是你的java工具,在

cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxMusic.java