Android ndk开发:fmod语音学习(一)

简介

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值