Android ndk开发之QQ变声

要做出QQ变声的效果,用Android系统自带的MediaPlayer是无法实现的,只能另想他法了。听说汤姆猫是用SoundTouch实现的,而QQ是用FMOD实现的,就根据网上的教程,自己捣鼓ndk好几天,终于实现了,但是效果不是很理想。
FMOD是老外为游戏开发者准备的革命性音频引擎,说它支持很多功能,包括音效的处理,声道变化,音调等,,去fmod官网下载,首先得先注册一个账户,国内用户注册不了,需要翻墙才能注册,下载后解压,把需要的c文件放到jni目录下如图:配置Android.mk,写个native方法用来播放音频。中间会遇到各种问题,这里就不一一列举了,下面贴出源码。

  • 1.本地native方法
public class TestNdk {static {System.loadLibrary("fmod");System.loadLibrary("fmodL");System.loadLibrary("voicer");}public static final int MODE_NORMAL = 0;public static final int MODE_LUOLI = 1;public static final int MODE_DASHU = 2;/*** 音效处理* @param path sd卡上音频路径* @param mode 音效模式*/public static native void fix(String path, int mode);}
  • Android.mk
LOCAL_PATH := $(call my-dir)
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)
LOCAL_MODULE    := voicer
LOCAL_SRC_FILES := voicer.cpp
LOCAL_C_INCLUDES  += $(LOCAL_PATH)/inc
LOCAL_LDLIBS := -llog
LOCAL_CPP_FEATURES :=exceptions
LOCAL_SHARED_LIBRARIES := fmod fmodLinclude $(BUILD_SHARED_LIBRARY)
  • voicer.cpp
#include "com_daqiang_voicer_TestNdk.h"
#include <stdlib.h>
#include "jni.h"
#include <fmod.hpp>
#include <android/log.h>
#include <unistd.h>//unix 标准头文件,这里用到了sleep函数using namespace FMOD;//宏定义
#define LOGI(FORMAT,...) __android_log_print(ANDROID_LOG_INFO,"daqiang",FORMAT,##__VA_ARGS__)
#define LOGE(FORMAT,...) __android_log_print(ANDROID_LOG_ERROR,"daqiang",FORMAT,##__VA_ARGS__)#define MODE_NORMAL  0
#define MODE_LUOLI 1
#define MODE_DASHU 2
/** Class:     com_daqiang_json_voicer_TestNdk* Method:    fix* Signature: (Ljava/lang/String;I)V*/
JNIEXPORT void JNICALL Java_com_daqiang_voicer_TestNdk_fix(JNIEnv *env,jclass jcls, jstring path, jint mode) {System *system;Sound *sound;void *extradriverdata; //Driver specific data that can be passed to the output plugin. For example the filename for the wav writer plugin. See FMOD_OUTPUTTYPE for what each output mode might take here. Optional. Specify 0 or NULL to ignore.Channel *channel;bool isPlaying = true; //是否正在播放,默认为trueDSP *dsp; //音效try {//初始化System_Create(&system);//maxchannels:最多使用的频道数 这里32system->init(32, FMOD_INIT_NORMAL, extradriverdata);//要播放声音,先创建声音const char* path_cstr = env->GetStringUTFChars(path, NULL);system->createSound(path_cstr, FMOD_DEFAULT, NULL, &sound);LOGI("路径:%s", path_cstr);switch (mode) {case MODE_NORMAL: //正常system->playSound(sound, 0, false, &channel);break;case MODE_LUOLI: //萝莉//音效system->createDSPByType(FMOD_DSP_TYPE_PITCHSHIFT, &dsp);//指定音效的参数 (Type:float) - Pitch value.  0.5 to 2.0.  Default = 1.0. 0.5 = one octave down, 2.0 = one octave up.  1.0 does not change the pitch.dsp->setParameterFloat(FMOD_DSP_PITCHSHIFT_PITCH, 2);system->playSound(sound, 0, false, &channel);channel->addDSP(0, dsp);break;case MODE_DASHU: //大叔//音效system->createDSPByType(FMOD_DSP_TYPE_PITCHSHIFT, &dsp);//指定音效的参数 (Type:float) - Pitch value.  0.5 to 2.0.  Default = 1.0. 0.5 = one octave down, 2.0 = one octave up.  1.0 does not change the pitch.dsp->setParameterFloat(FMOD_DSP_PITCHSHIFT_PITCH, 0.5);system->playSound(sound, 0, false, &channel);channel->addDSP(0, dsp);break;}} catch (...) {LOGE("%s", "异常");goto end;}//更新,没有更新是不会播放声音的system->update();//播放声音异步,如果没有播放完,// 等待播放完成while (isPlaying) {channel->isPlaying(&isPlaying);//休眠,单位:微秒usleep(1000 * 1000); //1秒}end:LOGI("%s", "播放结束");system->close();system->release();}

android studio 3.0 重新编译了代码:源码下载地址地址(只是简单的界面,几个按钮,音效处理):https://download.csdn.net/download/u014389362/10753612

安卓java代写

java安卓程序代做,安卓程序代做,专业程序代写,有需要请加QQ: 2103752102

我的淘宝店铺

仿QQ变声功能的实现相关推荐

  1. 自学体验使用fmod 以及 仿QQ变声 fmod

    模块一 体验使用fmod 到 https://www.fmod.com/download 上下载fmod android版本的 这里我们用的是别人生成的so库 libfmod.so库 libfmodL ...

  2. Android 开发之 QQ变声功能实现

    1.简介 在QQ中我们使用到的一个功能就是变声,QQ是使用FMOD实现的,那么同样的我们也使用FMOD让自己的应用可以变音 2.FMOD简介 fmod Ex 声音系统是为游戏开发者准备的革命性音频引擎 ...

  3. android fmod,Android利用Fmod仿QQ变声音效

    看到QQ一些变声音效,这些声音效果可以采用SoundTouch,Fmod去处理.这篇文章我们用Fmod去实现变声音效的处理.fmod官网https://www.fmod.com/,fmod Ex 声音 ...

  4. NDK开发(四):仿QQ变声

    效果 相关资料:fmod官网https://www.fmod.com/download下载需要的资源库 构建项目 首先构建支持C++的android工程,将需要的c库考入工程 这里只需要inc文件下的 ...

  5. NDK开发—仿QQ变声器

    1.实现功能前的准备 这是我学习NDK的一个练手项目.虽然最后实现的结果并不是非常专业,但是确实能改变声音的音色,这是非常适合NDK新手的项目. 1.1.主要原理 通过修改声音的属性来实现声音音色的变 ...

  6. 08.Eclipse下Ndk开发(使用fmod实现QQ变声功能)

    (创建于2017/12/30) 1.编写native package org.fmod.example;public class EffectUtils {//音效的类型public static f ...

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

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

  8. 每日辣评:快手和抖音、爱奇艺巨亏、搜狗输入法变声功能、贝佐斯

    文/王易见 知名科技KOL,四川创业者联盟发起人 QQ:543415188,微信:543415188,广告.约稿.公关.营销.欢迎合作 [快手和抖音谁更能带货?]利用短视频带货已经不是什么新鲜事儿,快 ...

  9. AU变声功能音频调节

    变声功能与音频调节 今天再分享一些关于AU调整音频的方法,变声功能与音频调节. 一.变声功能方法1 说实话我感觉这个功能用于恶搞比较多,男声变女声,女声变娃娃音之类的,现在qq也有类似的语音变声功能, ...

最新文章

  1. GC rich的区域不易测序的原因
  2. 电动三轮司机被撞身亡担主责 警方书面回应家属质疑
  3. TensorFlow官方入门实操课程-卷积神经网络
  4. js实现webSocket客户端
  5. 永洪报表工具_该怎么选BI工具
  6. python 生产者和消费者模式_Python爬虫:生产者和消费者模式
  7. Mysql更新计数器_MySQL实现计数器如何在高并发场景下更新并保持数据正确性
  8. window10设置文件夹备注
  9. vue项目中vue-router的使用
  10. gd32f103驱动TLC59116(模拟i2c)
  11. 生科实验室仪器维护保养,一篇就够了!
  12. 如何使用PAUP4、MrBayes、TNT构建系统发育树
  13. 死亡测试 - GoogleTest(五)
  14. 第六届“蓝帽杯”全国大学生网络安全技能大赛-初赛Writeup
  15. pubwin操作记录
  16. 我们来试着解答一下下面的题目(8)(DP/多重部分和)
  17. 开发APP的java工具_app傻瓜式开发工具_app开发工具
  18. java俄罗斯方块七中图形类_用shell写俄罗斯方块
  19. 【前端小白的每日一点】
  20. 大数据风控必看,挖掘学历数据中暗藏的还款意愿及还款能力

热门文章

  1. 电子商务网站互联网安全防御攻略
  2. Java面试基础篇之java基础语法之五:数组
  3. javascript 算法相关,如何利用指针特性求数组并集与交集
  4. 【调剂】青岛大学2020年硕士研究生招生预调剂通知
  5. nodejs之MySQL插入数据
  6. ios解锁动态图片_升级iOS10后的解锁界面 正确的打开方式是这样!(图)
  7. 问卷星复制问卷题目和选项文本方法
  8. 关于FSC认证的3种标签
  9. 明道云技术路径选择及与LCDP的比较
  10. 965七年我失去了什么?得到了什么?