仿QQ变声功能的实现
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变声功能的实现相关推荐
- 自学体验使用fmod 以及 仿QQ变声 fmod
模块一 体验使用fmod 到 https://www.fmod.com/download 上下载fmod android版本的 这里我们用的是别人生成的so库 libfmod.so库 libfmodL ...
- Android 开发之 QQ变声功能实现
1.简介 在QQ中我们使用到的一个功能就是变声,QQ是使用FMOD实现的,那么同样的我们也使用FMOD让自己的应用可以变音 2.FMOD简介 fmod Ex 声音系统是为游戏开发者准备的革命性音频引擎 ...
- android fmod,Android利用Fmod仿QQ变声音效
看到QQ一些变声音效,这些声音效果可以采用SoundTouch,Fmod去处理.这篇文章我们用Fmod去实现变声音效的处理.fmod官网https://www.fmod.com/,fmod Ex 声音 ...
- NDK开发(四):仿QQ变声
效果 相关资料:fmod官网https://www.fmod.com/download下载需要的资源库 构建项目 首先构建支持C++的android工程,将需要的c库考入工程 这里只需要inc文件下的 ...
- NDK开发—仿QQ变声器
1.实现功能前的准备 这是我学习NDK的一个练手项目.虽然最后实现的结果并不是非常专业,但是确实能改变声音的音色,这是非常适合NDK新手的项目. 1.1.主要原理 通过修改声音的属性来实现声音音色的变 ...
- 08.Eclipse下Ndk开发(使用fmod实现QQ变声功能)
(创建于2017/12/30) 1.编写native package org.fmod.example;public class EffectUtils {//音效的类型public static f ...
- 仿QQ语音变声功能实现
版权声明:转载必须注明本文转自张鹏辉的博客: http://blog.csdn.net/qingtiangg 大家好,这是我从业以来第一篇博客,给大家拜个晚年,祝大家鸡年大吉,幸福美满.事业有成.好了 ...
- 每日辣评:快手和抖音、爱奇艺巨亏、搜狗输入法变声功能、贝佐斯
文/王易见 知名科技KOL,四川创业者联盟发起人 QQ:543415188,微信:543415188,广告.约稿.公关.营销.欢迎合作 [快手和抖音谁更能带货?]利用短视频带货已经不是什么新鲜事儿,快 ...
- AU变声功能音频调节
变声功能与音频调节 今天再分享一些关于AU调整音频的方法,变声功能与音频调节. 一.变声功能方法1 说实话我感觉这个功能用于恶搞比较多,男声变女声,女声变娃娃音之类的,现在qq也有类似的语音变声功能, ...
最新文章
- GC rich的区域不易测序的原因
- 电动三轮司机被撞身亡担主责 警方书面回应家属质疑
- TensorFlow官方入门实操课程-卷积神经网络
- js实现webSocket客户端
- 永洪报表工具_该怎么选BI工具
- python 生产者和消费者模式_Python爬虫:生产者和消费者模式
- Mysql更新计数器_MySQL实现计数器如何在高并发场景下更新并保持数据正确性
- window10设置文件夹备注
- vue项目中vue-router的使用
- gd32f103驱动TLC59116(模拟i2c)
- 生科实验室仪器维护保养,一篇就够了!
- 如何使用PAUP4、MrBayes、TNT构建系统发育树
- 死亡测试 - GoogleTest(五)
- 第六届“蓝帽杯”全国大学生网络安全技能大赛-初赛Writeup
- pubwin操作记录
- 我们来试着解答一下下面的题目(8)(DP/多重部分和)
- 开发APP的java工具_app傻瓜式开发工具_app开发工具
- java俄罗斯方块七中图形类_用shell写俄罗斯方块
- 【前端小白的每日一点】
- 大数据风控必看,挖掘学历数据中暗藏的还款意愿及还款能力