版权声明:转载必须注明本文转自张鹏辉的博客: 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

这里写图片描述

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

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

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

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

这里写图片描述

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

3.拷贝资源文件到 Android Studio

这里写图片描述

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

src 目录下的java代码

assets 目录下的音频资源

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

lib 目录下的fmod包

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

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

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

这里写图片描述

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

这里写图片描述

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也拷过来,如下图

这里写图片描述

这里写图片描述

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

这里写图片描述

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

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直接上图了:

这里写图片描述

可以编译安装玩一玩了

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

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

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

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

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

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

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

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

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

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

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

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

项目源码下载地址:

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

觉得不错请点一个star蛤!

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

android变声后的文件,仿QQ语音变声功能实现(二)---移植到android studio 并解决部分问题...相关推荐

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

    版权声明:转载必须注明本文转自张鹏辉的博客: http://blog.csdn.net/qingtiangg 大家好,距离上一篇博客半年过去了,关于上一篇博客很多人加我QQ留言问了几个问题,最近不忙决 ...

  2. 仿QQ语音变声功能实现

    版权声明:转载必须注明本文转自张鹏辉的博客: http://blog.csdn.net/qingtiangg 大家好,这是我从业以来第一篇博客,给大家拜个晚年,祝大家鸡年大吉,幸福美满.事业有成.好了 ...

  3. android人脸识显示头像自定义,Android 仿QQ头像自定义截取功能

    看了Android版QQ的自定义头像功能,决定自己实现,随便熟悉下android绘制和图片处理这一块的知识. 先看看效果: 思路分析: 这个效果可以用两个View来完成,上层View是一个遮盖物,绘制 ...

  4. Android特效专辑(六)——仿QQ聊天撒花特效,无形装逼,最为致命

    Android特效专辑(六)--仿QQ聊天撒花特效,无形装逼,最为致命 我的关于特效的专辑已经在CSDN上申请了一个专栏--http://blog.csdn.net/column/details/li ...

  5. Android仿微信小视频录制功能(二)

    Android仿微信小视频录制功能(二) 接着上一篇,在完成了录制功能后,伟大的哲学家沃兹基索德曾经说过:"有录就有放.",那么紧接着就来实现播放功能,按照国际惯例,先上下效果图: ...

  6. android qq语音按钮,科技教程:如何在手机QQ中使用新版QQ语音进度条功能?

    如今越来越多的小伙伴对于如何在手机QQ中使用新版QQ语音进度条功能?这方面的问题开始感兴趣,看似平静的每一天,在每个人身上都在发生着各种各样的故事,因为大家现在都是想要了解到此类的信息,那么既然现在大 ...

  7. QQ语音进度条功能怎么用?附qq语音进度条使用方法

    摘要: 手机QQ迎来了最新版本8.0.0.  手机QQ迎来了最新版本8.0.0.其中新增的一个功能就是QQ语音进度条功能,非常的便捷实用.而qq语音进度条功能怎么用呢?跟着小编一起详细了解. QQ语音 ...

  8. Android仿QQ消息拖拽效果(二)

    前言 本文参考辉哥贝塞尔曲线 - QQ消息汽包拖拽,前面我们使用二阶贝塞尔曲线绘制了拖拽圆点效果Android仿QQ消息拖拽效果(一)(二阶贝塞尔曲线使用),这里我们在此基础之上实现仿QQ消息拖拽爆炸 ...

  9. android弹窗使用总结,高仿QQ空间操作弹窗

    android弹窗一共有两种方式,一种是dialog及其子类,另一种是popupwindow:Dialog及其子类尤其AlertDialog是最常用的,也是最自由的一种. **Popupwindow与 ...

最新文章

  1. 理解C#值类型与引用类型(摘录)
  2. php 获取路由参数,路由参数 · ThinkPHP5.0完全开发手册 · 看云
  3. 禁止微信内置浏览器调整字体大小
  4. Python爬虫利器五Selenium用法
  5. Qt工作笔记-QML界面与QWidgets界面相互交互
  6. AD RMS高可用(四)添加rms成员服务器
  7. WebApiThrottle限流框架
  8. QT学习之自定义信号
  9. Linux学习笔记总结
  10. 计量经济学第六版伍德里奇计算机答案,求伍德里奇计量经济学答案第六版
  11. vmware 安装报错:failed to install hcmon drivers 完美解决(含VMware15激活码)
  12. 比勤奋更能决定人生的,是复利思维
  13. 蓝牙核心规范(V5.2)3.2-深入详解之数据传输架构
  14. jsp异常 The JSP specification requires that an attribute name is preceded by whitespace
  15. 北大韦神等十人获奖,均分1000万元,达摩院2021青橙奖出炉
  16. SkeyeVSS实现RTSP、Onvif监控摄像头网页无插件化直播监控解决方案
  17. v2ex 非计算机专业,计算机的在职研究生值得考吗?
  18. 什么是 10x 程序员?
  19. 《花开半夏》--4 生死之间的吻(1)
  20. 八位二进制数能表示数的范围以及原码、反码和补码含义

热门文章

  1. implode() 函数
  2. 河北省计算机专业最好的单招学校有哪些,河北省计算机专业哪些学校比较好
  3. 画论07 僧彦悰《後画录》
  4. Machine-learning-ex3
  5. leecode.799. 香槟塔
  6. 第五十二章 SQL函数 DEGREES
  7. 铁腕治水交亮眼成绩单 2018年浙江27项治水工作超额完成
  8. 逢节必火,礼盒产品缘何持续上热门?
  9. cs224w(图机器学习)2021冬季课程学习笔记2: Traditional Methods for ML on Graphs
  10. 联想rd650怎么装系统win7_联想系统重装win7图解教程