NDK—QQ变声环境搭建

2017-11-02  本文已影响0人  Lypop

说起QQ变声效果大家并不陌生,这是用的啥技术呢?其实它使用到了fmod的东西,现在我们就来研究一下变声技术

fmod 官网:https://www.fmod.com/studio

QQ截图20171102222041.png

是不是很炫,以前想都不敢想能实现这效果,现在就能实现了,来代码搞起。。

这里呢,我们先来搭建一下QQ变声效果的开发环境做一个播放声音的进而开发变声效果。

正文

image

先进入官网去下载Android的开发包,如图,我们接下来就搞这个目录里面的东西,因为是刚上手当然是低级别的,哈哈

image

我们来说一下这三个目录是啥东西,example是开发的示例文件,inc是需要引入的.h文件,lib是需要加入的jar包

好,现在我们做的仅仅是先将声音播放出来,变不变声先不管,开发环境是Eclipse,之后会介绍AS的开发步骤

进入example目录找到play_sound.cpp、inc目录导入Eclipse jni目录,play_sound.cpp需要包含common.h(因为fmod.hpp是inc里面的只需要指定一下就可以)

image

为什么还有hpp格式的文件呢?是因为在hpp格式文件里面既包含h文件的声明又包含cpp的实现,所以才命名为hpp格式,这里我们不仅要导入common.h还需要导入实现common.cpp文件

common.h

image

这里我们看到我们还需要导入common_platform.h,当然也需要导入相应的.cpp文件了

然后我们执行下面的操作生成Android.mk文件

image

接着我们导入example里面提供的MainActivity文件,记住包名不要改变,接着我们利用javah工具得到.h文件,那这.h文件让哪个文件来包含进来呢?经过查看看到common_platform.cpp里面有相应的实现代码

到这里我们还少些什么呢,那就是.so文件需要导入进来,因为作者将inc里面的声明实现都放在了so文件里面,所以需要将so文件加入jni文件里面

之后我们需要配置一下Android.mk

LOCAL_PATH := $(call my-dir)

#编译libfmod.so文件
include $(CLEAR_VARS)
LOCAL_MODULE := fmod
LOCAL_SRC_FILES := libfmod.so
include $(PREBUILT_SHARED_LIBRARY)

#编译libfmodL.so文件
include $(CLEAR_VARS)
LOCAL_MODULE := fmodL
LOCAL_SRC_FILES := libfmodL.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE    := voicer_change   #生成so文件的名字
##编译相应的cpp文件,都需要编译不让会出现找不到类的情况
LOCAL_SRC_FILES := play_sound.cpp common.cpp common_platform.cpp
LOCAL_SHARED_LIBRARIES := fmod fmodL   #编译的时候要依赖的共享库
LOCAL_LDLIBS := -llog  #打印Log
include $(BUILD_SHARED_LIBRARY)

至此我们就可以进行build了,当然会报错#include<string.h>找不到,因为需要提供C++标准库支持

image

这时候我们需要新建一个Application.mk

APP_ABI := armeabi  #编译与调试的CPU架构
APP_STL := stlport_static
APP_STL := gnustl_static  #支持 C++异常处理,标准模板块
APP_CPPFLAGS +=-std=c++11 #允许使用c++11的函数等功能

进行build还会发生so生成失败,这时候我们需要引入下面的这些路径才可以

image

前面的三个是有关jni.h jni_md.h的路径
后面的是有关C++标准库相关的路径,所以需要引用,当时就是没有引入就报了一堆错误,擦擦,所以要想build成功就需要进行引入

最后进行build,当在build成功之后不能运行,需要close project之后在open然后在运行,这样就可以运行了哦,当然在运行之前需要将声音资源加入到assets目录下面,具体的界面如下:

image

至此,QQ变声的NDK环境就搭建好了,接下来我们将在这基础上开发QQ变声的功能,O(∩_∩)O谢谢

上一篇下一篇

猜你喜欢

热点阅读