教你在“狼人杀”中实现变声效果
source link: https://segmentfault.com/a/1190000040794222
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
教你在“狼人杀”中实现变声效果
上一期我们介绍了如何使用华为音频编辑服务实现歌曲伴奏的分离,这一期我们将为大家介绍如何在社交游戏App中实现变声效果。
在狼人杀游戏中,如果用户可以选择自己想要的声音进行变声处理,不仅给游戏发言环节增加了趣味性,同时满足了部分用户不想曝光自己真实声音的需求。
我们来看一段狼人杀游戏中上警环节的发言变声。
发言台词:我是预言家,昨天晚上验了3号,TA是狼人,警徽给我,我来带队。
查看Demo演示请移步华为开发者联盟网站HMS Core论坛:
https://developer.huawei.com/...
华为音频编辑服务(Video Editor Kit)支持根据指定的声音类型(大叔、萝莉、女声、男声、怪物等)对音频素材做变声处理。
下面我们就一起来实操一下如何接入华为音频编辑服务,实现变声效果。
1.1项目级build.gradle里配置Maven仓地址
buildscript { repositories { google() jcenter() // 配置HMS Core SDK的Maven仓地址。 maven {url 'https://developer.huawei.com/repo/'} } dependencies { ... // 增加agcp插件配置。 classpath 'com.huawei.agconnect:agcp:1.4.2.300' } } allprojects { repositories { google() jcenter() // 配置HMS Core SDK的Maven仓地址。 maven {url 'https://developer.huawei.com/repo/'} } }
1.2 文件头增加配置
apply plugin: 'com.huawei.agconnect'
1.3 应用级build.gradle里配置SDK依赖
dependencies{ implementation 'com.huawei.hms:audio-editor-ui:{version}' }
1. 4在AndroidManifest.xml文件中申请如下权限
<!--震动权限--> <uses-permission android:name="android.permission.VIBRATE" /> <!--麦克风权限--> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!--写存储权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--读存储权限--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!--网络权限--> <uses-permission android:name="android.permission.INTERNET" /> <!--网络状态权限--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--网络状态变化权限--> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
2.代码开发
2.1创建您应用自定义的activity界面,用于选择音频,并将该音频文件路径用如下方式返回给音频编辑SDK。
// 将音频文件路径List返回给音频编辑页面 private void sendAudioToSdk() { // 获取到的音频文件路径 filePath String filePath = "/sdcard/AudioEdit/audio/music.aac"; ArrayList<String> audioList = new ArrayList<>(); audioList.add(filePath); // 将音频文件路径返回给音频编辑页面 Intent intent = new Intent(); // 使用sdk提供的HAEConstant.AUDIO_PATH_LIST intent.putExtra(HAEConstant.AUDIO_PATH_LIST, audioList); // 使用sdk提供的HAEConstant.RESULT_CODE为结果CODE this.setResult(HAEConstant.RESULT_CODE, intent); finish(); }
2.2在UI界面导入音频时,SDK会发送一个action值为com.huawei.hms.audioeditor.chooseaudio的intent以跳转到该activity。因此,该activity“AndroidManifest.xml”中的注册形式如下。
<activity android:name="Activity "> <intent-filter> <action android:name="com.huawei.hms.audioeditor.chooseaudio"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
2.3启动音频编辑页面,点击“添加音频”,SDK会主动调用2.1定义的activity。添加完音频,就可以进行音频编辑、特效添加等操作,完成后导出编辑的音频。
HAEUIManager.getInstance().launchEditorActivity(this);
2.4音频格式转换。
调用transformAudioUseDefaultPath接口进行音频格式转换,转换后的音频文件导出到默认路径。 // 音频格式转换接口 HAEAudioExpansion.getInstance().transformAudioUseDefaultPath(context,inAudioPath, audioFormat, new OnTransformCallBack() { // 进度回调(0-100) @Override public void onProgress(int progress) { } // 转换失败 @Override public void onFail(int errorCode) { } // 转换成功 @Override public void onSuccess(String outPutPath) { } // 取消转换 @Override public void onCancel() { } }); // 取消转换任务接口 HAEAudioExpansion.getInstance().cancelTransformAudio();
调用transformAudio接口进行音频格式转换,转换后的音频文件导出到目标路径。
// 音频格式转换接口 HAEAudioExpansion.getInstance().transformAudio(context,inAudioPath, outAudioPath, new OnTransformCallBack(){ // 进度回调(0-100) @Override public void onProgress(int progress) { } // 转换失败 @Override public void onFail(int errorCode) { } // 转换成功 @Override public void onSuccess(String outPutPath) { } // 取消转换 @Override public void onCancel() { } }); // 取消转换任务接口 HAEAudioExpansion.getInstance().cancelTransformAudio();
2.5 调用文件接口实现变声功能
private ChangeSoundCallback callBack = new ChangeSoundCallback() { @Override public void onSuccess(String outAudioPath) { // 处理成功 } @Override public void onProgress(int progress) { // 进度回调处理 } @Override public void onFail(int errorCode) { // 处理失败 } @Override public void onCancel() { // 取消处理 } };
• 调用applyAudioFile接口进行变声。
// 变声 HAEChangeVoiceFile haeChangeVoiceFile = new HAEChangeVoiceFile(); // 设置变声的类型 haeChangeVoiceFile.changeSoundTypeOfFile(SoundType.AUDIO_TYPE_SEASONED); // 调用接口 haeChangeVoiceFile.applyAudioFile(inAudioPath, outAudioDir, outAudioName, callBack); // 取消变声任务 haeChangeVoiceFile.cancel();
2.6调用流式接口实现音频文件的变声处理,最终结果需要开发者自行设置。
// 变声 HAEChangeVoiceStream haeChangeVoiceStream = new HAEChangeVoiceStream(); // 设置音频的格式参数,返回设置结果res(注:当res为HAEErrorCode.SUCCESS时才可进行后续操作) int res = haeChangeVoiceStream.setAudioFormat(BIT_DEPTH, CHANNEL_COUNT, SAMPLE_RATE); //设置变声类型,返回设置结果changeRes(注:当res为HAEErrorCode.SUCCESS时才可进行后续操作) int changeRes = haeChangeVoiceStream.changeSoundType(SoundType.AUDIO_TYPE_SEASONED); // 对pcm数据(buffer)进行变声操作,返回变声后的pcm数据(resultByte) while(buffer!=null){ byte[] resultByte = haeChangeVoiceStream.applyPcmData(buffer); } // 变声结束后释放资源 haeChangeVoiceStream.release();
往期回顾:
华为音频编辑服务带你一键伴奏分离!
如您想了解更多详情,请参考:
获取开发指导文档:
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~
Recommend
-
29
饭局狼人杀:马东的“饭局"诱惑出了胡天宇的“狼人杀”_推荐_i黑马 饭局狼人杀:马东的“饭局"诱惑出了胡天宇的“狼人杀” ...
-
103
本文约2300字,建议阅读8分钟。 本文将详细介绍文本分类问题并用Python实现这个过程。 引言 文本分类是商业问题中常见的自然语言处理任务,目标是自动将文本文件分到一个或多个已定义好的类别中。文本分类的一些例…
-
54
邱陆陆 原创 2018/06/24 PM 3:46 现实版柯南「蝴蝶结变声器」:谷歌发布从声纹识别到多重声线语音...
-
41
即使是在生活中完全没有交集的两个陌生人,也可以在短短几个小时内,体验一场电影般的快意人生,这或许就是这个游戏最大的魅力。
-
2
AE渲染成视频第一句语音渲染变声问题 frontend 2020-06-30 16:01:31 最近在玩AE做动画,导到ME,然后渲染生成视频, 视频有配音是AI合成的。...
-
4
js 实现 bind 的这五层,你在第几层?最近在帮朋友复习 JS 相关的基础知识,遇到不会的问题,她就会来问我。这不是很简单?三下五除二,分分钟解决。function bind(fn, obj, ...arr) { return fn.apply(obj, arr) }
-
6
搜狗输入法-语音变声斗图表情 4+ AI语言专家
-
2
如何基于声网“实时声纹变声”实现对声音的“克隆” 说到声音变声,很多人最早的记忆是《名侦探柯南》中柯南的领结变声器,小时候还曾幻想拥有这样一款神器,那一定很酷。而在
-
2
《成长势能》让你在2022年实现能力翻倍
-
1
MorphVOX Pro是什么?MorphVOX Pro 是 Screaming Bee 旗下的一款非常出色的变声器软件,MorphVOX Pro上手容易,功能强大,深得国内直播爱好者的喜爱。MorphVOX Pr...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK