android代码 qq语音,仿QQ语音变声功能实现(二)---移植到android studio 并解决部分问题...

版权声明:转载必须注明本文转自张鹏辉的博客: http://blog.csdn.net/qingtiangg

大家好,距离上一篇博客半年过去了,关于上一篇博客很多人加我QQ留言问了几个问题,最近不忙决定解决一下,并写几个文档总结下这半年的经验,这篇文档主要是记录下移植的过程。

统计

1:因为半年前代码用Eclipse写的,有人问我能不能移植到Android Studio 上,可以

2:变声后的文件在哪里?这么保存?问这个问题的肯定没有认真阅读我上一篇博客和看源码。(我这里提供一种解决方案,在最下面认真往下看)

开始

Android Studio NDK目前有两种玩法:

1: ndk-build 、Android.mk、 Application.mk

2: CMake

我也不介绍他俩对比了,第二个是android studio2.2之后主推的,新建ndk项目直接勾选上可以玩了。

既然要移植到android studio上我们也用第二种

开撸:

1.创建新项目(Create New Project)

勾选上 Include C++ Support

09ccc55cdce2

这里写图片描述

接下来和普通创建一样一路 ---->Next到下图这个页面

2.配置C++(Customize C++ Support)

你们 C++ Standard 这里应该是默认的Toolchain Default 默认是CMake环境,这里我们用C++11没有为什么,任性。

勾选上 Exceptions Support 、Exceptions Support让其支持C++异常处理然后Finish如下图:

09ccc55cdce2

这里写图片描述

项目创建好,把他帮我们生成的文件删掉,布局以及MainActivity里的不用代码,还有cpp目录下的.cpp文件不需要,之后我们开始做移植吧。

3.拷贝资源文件到 Android Studio

09ccc55cdce2

这里写图片描述

首先看下Eclipse工程下的目录结构:

src 目录下的java代码

assets 目录下的音频资源

jni 目录下的fmod的动态库和c++代码

lib 目录下的fmod包

res 目录下的图片及布局xml代码和一些资源文件

这些复制黏贴的活我就不贴出来了,主要看下jni目录

刚才创建完成项目后,AS自动帮创建了cpp目录,原jni目录下的inc直接拷过去就好其他不要看图:

09ccc55cdce2

这里写图片描述

在Android studio 里app->libs目录下创建armeabi平台文件夹把libfmod.so和libfmodL.so这俩包放进去看下AS的现在的结构:

09ccc55cdce2

这里写图片描述

fmod.jar放到libs下右键add进去、assets这个目录as没有我们需要自己去创建把音频文件放进去。

4.Android Studio 下生成.h头文件

现在剩下头文件和supersound.cpp这俩关键文件了,因为我包结构不一样所以需要重新生成头文件。

我看了几篇文档AS下有配置直接生成头文件的,我懒不配置了,直接命令行玩吧!

从Android Studio的Terminal里进入到, /src/main/java 目录下,一定要刀这个文件夹下来执行命令操作。

执行javah XXX.XX.XXX 即可, XXX.XX.XXX是要生成.h文件的完整路径名,包名+文件名

cd 到目录下 执行javah命令会在当前文件夹下生成.h文件F5刷新目录就有了,把他拷贝到cpp目录下,把原来的supersound.cpp也拷过来,如下图

09ccc55cdce2

这里写图片描述

09ccc55cdce2

这里写图片描述

把.h文件里的这一行代码拷贝到我们原来supersound.cpp文件里替换标红这段代码,以及修改引用头文件的目录地址#include 那里地址变了,如下图:

09ccc55cdce2

这里写图片描述

至此我们资源文件拷贝完毕

5.修改CMakeList.txt构建ndk

看下CMakeList.txt的我直接写好了,简单介绍下

# Sets the minimum version of CMake required to build the native

# library. You should either keep the default value or only pass a

# value of 3.4.0 or lower.

cmake_minimum_required(VERSION 3.4.1)

find_library( # Sets the name of the path variable.

log-lib

log )

set(distribution_DIR ${CMAKE_SOURCE_DIR}/../../../../libs)

add_library( fmod

SHARED

IMPORTED )

set_target_properties( fmod

PROPERTIES IMPORTED_LOCATION

../../../../libs/armeabi/libfmod.so )

add_library( fmodL

SHARED

IMPORTED )

set_target_properties( fmodL

PROPERTIES IMPORTED_LOCATION

../../../../libs/armeabi/libfmodL.so )

add_library( sound

SHARED

src/main/cpp/supersound.cpp )

include_directories(src/main/cpp/inc)

target_link_libraries( sound fmod fmodL

${log-lib} )

这里不介绍Cmake的使用了附上学习地址官方文档

中文翻译的简易的 CMake手册

最后一步配置build.gradle直接上图了:

09ccc55cdce2

这里写图片描述

可以编译安装玩一玩了

哈哈哈真是愉快的一下午啊

6.结束语-变声后保存解决思路

关于你们说的要保存变声后的声音

不知道你们为什么要保存下来哈哈哈

因为是在播放的时候加入的音轨就像唱歌的时候加入伴奏加入一段钢琴的声音达到变声效果,加了特效。

目前我们是在本机播放变声后的效果,有个哥们他的需求是这边发出去语音对方听到的是变声后效果。然后问我怎么保存说找不到解决方法所以来问我。

我这里给的思路就是我们本地不保存,就把原声发送给接收方,在接收方调fmod进行变声,这么说理解了吗?

发送的时候加上tag标示,这个标示代表用那种变声效果,然后对方点击播放的时候你把他变声了就好了啊!

有时候换一种思路你会发现真的很简单,没必要一直纠结

关键还是在于懒,懒得查资料,那么我们就用简单的方法

这只是一次移植的记录,所以资料我写的不是很详细,如果需要学习哪一方面可以找我,我写教程或者帮你找相关资料都可以。

边移植边查资料还要记录所以文档很乱,有问题来找我QQ:1344670918或者下面留言

项目源码下载地址:

https://github.com/CN-ZPH/

觉得不错请点一个star蛤!

有问题下面留言评论,我看到会回复。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值