在音乐创作、音视频剪辑、游戏等领域,为用户带来身临其境的音效体验越来越重要。开发人员如何在应用程序中创建3D环绕声效果?华为音频编辑服务6.2.0版本带来空间动态渲染功能,可将人声、乐器等音频元素渲染到指定的三维空间方位,支持静态和动态渲染模式,进一步提升音质应用中的效果。经验。开发者可以点击查看以下Demo演示,了解集成效果,上手体验功能。开发实践1.开发准备开发者提前准备好音乐素材,MP3格式最好。其他音频格式请参考“2.4”进行转换,视频格式请参考“2.5”提取音频。1.1在项目级build.gradle中配置Maven仓库地址:buildscript{repositories{google()jcenter()//配置HMSCoreSDK的Maven仓库地址。maven{url'https://developer.huawei.com/repo/'}}dependencies{...//添加agcp插件配置。classpath'com.huawei.agconnect:agcp:1.4.2.300'}}allprojects{repositories{google()jcenter()//配置HMSCoreSDK的Maven仓库地址。maven{url'https://developer.huawei.com/repo/'}}}1.2在文件头添加配置:applyplugin:'com.huawei.agconnect'1.3在应用级build.gradle配置SDK依赖:dependencies{implementation'com.huawei.hms:audio-editor-ui:{version}'}1.4在AndroidManifest.xml文件中申请如下权限:使用权限android:name="android.permission.CHANGE_NETWORK_STATE"/>2.代码开发2.1创建一个选择音频的应用自定义Activity接口,返回音频文件路径给音频编辑SDK://返回音频文件路径List给音频编辑页面privatevoidsendAudioToSdk(){//获取音频文件路径filePathStringfilePath="/sdcard/AudioEdit/audio/music.aac";ArrayListaudioList=newArrayList<>();audioList.add(文件路径);//返回音频文件路径到音频编辑页面Intentintent=newIntent();//使用sdk提供的HAEConstant.AUDIO_PATH_LISTintent.putExtra(HAEConstant.AUDIO_PATH_LIST,audioList);//使用SDK提供的HAEConstant.RESULT_CODE作为resultCODEthis.setResult(HAEConstant.RESULT_CODE,intent);finish();}2.2在UI界面导入音频时,SDK会发送一个action值com.huawei.hms.audioeditor.chooseaudiointent跳转到这个activity因此,activity“AndroidManifest.xml”中的注册表单为如下:DEFAULT"/>2.3启动音频编辑页面,点击“添加音频”,SDK会主动调用“2.1”步骤定义的activity。添加音频后,可以对音频进行编辑,添加特效等,完成后导出编辑好的音频。HAEUIManager.getInstance().launchEditorActivity(this);2.4.如果音频素材不是MP3格式,这一步可以完成音频格式转换:调用transformAudioUseDefaultPath接口转换音频格式,将转换后的音频文件导出到默认路径。//音频格式转换接口HAEAudioExpansion.getInstance().transformAudioUseDefaultPath(context,inAudioPath,audioFormat,newOnTransformCallBack(){//进度回调(0-100)@OverridepublicvoidonProgress(intprogress){}//转换失败@OverridepublicvoidonFail(interrorCode){}//转换成功@OverridepublicvoidonSuccess(StringoutPutPath){}//取消转换@OverridepublicvoidonCancel(){}});//取消转换任务接口HAEAudioExpansion.getInstance().cancelTransformAudio();调用transformAudio接口转换音频格式,将转换后的音频文件导出到目标路径。//音频格式转换接口HAEAudioExpansion.getInstance().transformAudio(context,inAudioPath,outAudioPath,newOnTransformCallBack(){//进度回调(0-100)@OverridepublicvoidonProgress(intprogress){}//转换失败@OverridepublicvoidonFail(interrorCode){}//转换成功@OverridepublicvoidonSuccess(StringoutPutPath){}//取消转换@OverridepublicvoidonCancel(){}});//取消转换任务接口HAEAudioExpansion.getInstance().cancelTransformAudio();2.5如果素材是视频格式,可以调用extractAudio接口进行音频提取,从视频中提取音频文件并导出到指定目录://outAudioDir提取音频的保存文件夹路径,非必填//outAudioName提取的音频名称,不带后缀,可选HAEAudioExpansion.getInstance().extractAudio(context,inVideoPath,outAudioDir,outAudioName,newAudioExtractCallBack(){@OverridepublicvoidonSuccess(StringaudioPath){Log.d(TAG,"ExtractAudioonSuccess:"+audioPath);}@OverridepublicvoidonProgress(intprogress){Log.d(TAG,"ExtractAudioonProgress:"+progress);}@Override复制代码publicvoidonFail(interrCode){Log.i(TAG,"ExtractAudioonFail:"+errCode);}@OverridepublicvoidonCancel(){Log.d(TAG,"ExtractAudioonCancel.");}});//取消音频提取任务接口HAEAudioExpansion.getInstance().cancelExtractAudio();2.6调用getInstruments和startSeparationTasks接口提取伴奏//获取提取出来的伴奏类型ID,然后将这个ID传给接口HAEAudioSeparationFilehaeAudioSeparationFile=newHAEAudioSeparationFile();haeAudioSeparationFile.getInstruments(newSeparationCloudCallBack>(){@OverridepublicvoidonFinish(Listresponse){//返回的数据,包括伴奏的类型ID}@OverridepublicvoidonError(interrorCode){//失败返回}});//设置要提取的伴奏参数Listinstruments=newArrayList<>();仪器。add("accompanimentid");haeAudioSeparationFile.setInstruments(instruments);//开始分离伴奏haeAudioSeparationFile.startSeparationTasks(inAudioPath,outAudioDir,outAudioName,newAudioSeparationCallBack(){@OverridepublicvoidonResult(SeparationBeanseparationBeanveride){p}voidonFinish(ListseparationBeans){}@OverridepublicvoidonFail(interrorCode){}@OverridepublicvoidonCancel(){}});//取消分离任务haeAudioSeparationFile.cancel();2.7调用applyAudioFile接口进行Orientation渲染。//空间方向渲染//固定位置HAESpaceRenderFilehaeSpaceRenderFile=newHAESpaceRenderFile(SpaceRenderMode.POSITION);haeSpaceRenderFile.setSpacePositionParams(newSpaceRenderPositionParams(x,y,z));//动态渲染HAESpaceRenderFilehaeSpaceRenderFile=newModeRenderTA.ROSpaceRenderFile(SpaceRenderTA);haeSpaceRenderFile.setRotationParams(newSpaceRenderRotationParams(x,y,z,surroundTime,surroundDirection));//扩展的HAESpaceRenderFilehaeSpaceRenderFile=newHAESpaceRenderFile(SpaceRenderhaEnMode.setExtensionParams(newVal,SpaceRender/ExtensionParam)call)InterfacehaeSpaceRenderFile.applyAudioFile(inAudioPath,outAudioDir,outAudioName,callBack);//取消空间定向渲染haeSpaceRenderFile.cancel();完成以上步骤后,您就可以获得相应的空间动态渲染效果,在应用中轻松实现2D转3D音效!该功能还可以应用在企业会议、运动康复等方面,例如展会上的沉浸式产品展示,为视障人士提供方向线索,方便日常生活。开发者可以根据自己应用的实际需要选择使用。更多详情请参考:华为开发者联盟音频剪辑服务官网;获取综合音频编辑服务指导文件。更多详情>>访问华为开发者联盟官网获取开发指导文档华为移动服务开源仓库地址:GitHub、Gitee关注我们,第一时间了解HMSCore最新技术资讯~