简介
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上运行起来了。如果想了解更多,需要细心的阅读示例程序代码。