-
-
[原创]超简单集成!手把手教你实现音频编辑能力
-
发表于: 2021-7-21 16:34 3385
-
如今短视频当道,BGM无处不在,用户在每个能秀的地方都想要加上个性表达的音频。作为一个开发者,需不断探索和迎合用户的行为喜好,音频编辑功能成为用户在编辑个人信息、内容创作、生活分享等场景下的必需品。
华为音频编辑服务(Audio Editor kit)是华为面向全球开发者提供的音频处理能力集合,拥有音频基础编辑,音频提取,添加音频效果,流式双麦降噪等功能,并且支持多种变声风格以及四种格式转换,可以广泛应用于音乐创作,播客,游戏等场景。一起来看看该怎样集成华为Audio Editor kit吧!
Demo效果
开发准备
1、项目级build.gradle里配置Maven仓地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | buildscript { repositories { google() jcenter() / / 配置HMS Core SDK的Maven仓地址。 maven {url 'affK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0Q4x3X3g2Z5N6h3q4%4k6h3W2Q4x3X3g2U0L8$3#2Q4x3V1k6J5k6i4m8G2i4K6u0r3i4K6t1%4 } } dependencies { ... / / 增加agcp插件配置。 classpath 'com.huawei.agconnect:agcp:1.4.2.300' } } allprojects { repositories { google() jcenter() / / 配置HMS Core SDK的Maven仓地址。 maven {url '98cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0Q4x3X3g2Z5N6h3q4%4k6h3W2Q4x3X3g2U0L8$3#2Q4x3V1k6J5k6i4m8G2i4K6u0r3i4K6t1%4 } } } |
2、文件头增加配置
1 | apply plugin: 'com.huawei.agconnect' |
3、 应用级build.gradle里配置SDK依赖
1 2 3 | dependencies{ implementation 'com.huawei.hms:audio-editor-ui:{version}' } |
4、在AndroidManifest.xml文件中申请如下权限
1 2 3 4 5 6 7 8 9 10 11 12 | <! - - 震动权限 - - > <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" / > |
代码开发
1、创建您应用自定义的activity界面,用于选择音频,并将该音频文件路径用如下方式返回给音频编辑SDK。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | / / 将音频文件路径 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、在UI界面导入音频时,SDK会发送一个action值为com.huawei.hms.audioeditor.chooseaudio的intent以跳转到该activity。因此,该activity“AndroidManifest.xml”中的注册形式如下。
1 2 3 4 5 6 | <activity android:name = "Activity " > <intent - filter > <action android:name = "com.huawei.hms.audioeditor.chooseaudio" / > <category android:name = "android.intent.category.DEFAULT" / > < / intent - filter > < / activity> |
3、启动音频编辑页面,点击“添加音频”,SDK会主动调用2.1定义的activity。添加完音频,就可以进行音频编辑、特效添加等操作,完成后导出编辑的音频。
1 | HAEUIManager.getInstance().launchEditorActivity(this); |
4、音频格式转换。
调用transformAudioUseDefaultPath接口进行音频格式转换,转换后的音频文件导出到默认路径。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | / / 音频格式转换接口 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接口进行音频格式转换,转换后的音频文件导出到目标路径。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | / / 音频格式转换接口 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(); |
5、调用extractAudio接口进行音频提取,从视频中提取音频文件导出到指定目录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | / / outAudioDir提取出的音频保存的文件夹路径,非必填 / / outAudioName提取出的音频名称,不带后缀,非必填 HAEAudioExpansion.getInstance().extractAudio(context,inVideoPath,outAudioDir, outAudioName,new AudioExtractCallBack() { @Override public void onSuccess(String audioPath) { Log.d(TAG, "ExtractAudio onSuccess : " + audioPath); } @Override public void onProgress( int progress) { Log.d(TAG, "ExtractAudio onProgress : " + progress); } @Override public void onFail( int errCode) { Log.i(TAG, "ExtractAudio onFail : " + errCode); } @Override public void onCancel() { Log.d(TAG, "ExtractAudio onCancel." ); } }); / / 取消音频提取任务接口 HAEAudioExpansion.getInstance().cancelExtractAudio(); |
了解更多相关内容
解决集成问题请到Stack Overflow
点击右上角头像右方的关注,第一时间了解HMS Core最新技术~
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课