无法操作手机或一直盯着手机看,如何及时获取信息,方便阅读?这是用耳朵聆听的好方法。华为机器学习服务语音合成服务采用深度神经网络技术,提供高度拟人化、流畅自然的语音合成服务。开发者可以将此能力集成到小说阅读、智能硬件、地图导航等应用中,为用户提供实时、可更换、多音的语音播放体验。语音合成,方便内容及时交付语音合成服务支持将文本信息在线转换为语音输出,并已在全球部署。该服务的优势是-多语言、多音色:支持中文、英文、法文、西班牙文、德文、意大利文、俄文、波兰文、泰文、马来文语音合成,并有2种标准男声发音,6有两种标准女声发音可供选择。语速和音量可调:支持多种参数配置,可根据场景需要调节发言者的语速和音量。灵活丰富的集成方式:提供离线SDK和在线SDK的快速集成,充分满足不同场景下的语音合成需求。语音合成服务可应用于阅读广播、新闻广播、虚拟广播、地图广播、信息通知等时效性强的场景。例如,用户在骑车或开车时,在路上一直盯着手机看,使用地图导航,不方便。语音合成广播,确保表达清晰,准确到达目的地;在司机端打车软件、餐厅叫号、排队软件等场景,通过语音合成播报订单,让用户轻松获取通知信息;市面上流行的电子阅读类应用,提供语音播报和收听功能。用户可以轻松“听书”。即使在锁屏状态下,也可以通过语音播报继续收听,解除地铁、公交、跑步等阅读环境的限制。一些阅读不便的老人和孩子也可以通过“听书”来解决视力不清晰、情感陪伴等问题。在智能硬件领域,语音合成服务可以集成到童话机、智能机器人、平板设备等智能设备中,让人机交互更加自然友好。对于短视频App的内容创作者,可以通过在视频应用中指定文字来合成一些音效,加快短视频的制作进程。自定义音色,满足用户个性化需求近日,华为语音合成服务即将上线自定义音色功能。用户可以将自己的声音录制合成到应用中,让平日听小说、导航等生活和学习场景变得更加有趣和友好。家里有孩子的父母,也可以用自己的声音给孩子讲故事,缓解育儿疲劳,加深亲子互动和陪伴。实际开发和开发准备,配置Maven仓库和SDK的步骤请参考开发者网站的应用开发介绍:https://developer.huawei.com/...在应用的配置集成SDK包build.gradle文件,依赖添加TTSSDK依赖://importbasicSDKimplementation'com.huawei.hms:ml-computer-voice-tts:3.3.0.274'//importofflinespeechsynthesisbeevoicepackageimplementation'com.huawei.hms:ml-computer-voice-tts-model-bee:3.3.0.274'//引入离线语音合成eagle语音包实现'com.huawei.hms:ml-computer-voice-tts-model-eagle:3.3。0.274'配置AndroidManifest。xml打开主文件夹下的AndroidManifest.xml文件,可以根据场景和使用需要配置网络和读写权限,添加代码开发(在线TTS)3.1创建应用自定义activity接口,用于Selectonlineor离线TTS,通过api_key或AccessToken设置应用认证信息状态);MLApplication.getInstance().setAccessToken("youraccesstoken");}}3.2创建TTS配置和TTS引擎,可以配置不同的参数MLTtsEnginemlTtsEngine;MLTtsConfigmlConfigs;mlConfigs=newMLTtsConfig()//设置合成语言。.setLanguage(MLTtsConstants.TTS_ZH_HANS)//设置音色。.setPerson(MLTtsConstants.TTS_SPEAKER_FEMALE_ZH)//设置语速。范围:0.2–4.01.0表示1x速度。.setSpeed)//(1.音量。范围:0.2–4.01.0表示1x音量。.setVolume(1.0f)//设置合成模式。.setSynthesizeMode(MLTtsConstants.TTS_ONLINE_MODE);mlTtsEngine=newMLTtsEngine(mlConfigs);//设置bu-inplayer的音量.mlTtsEngine.setPlayerVolume(20);setcallback(回调见3.3)//将TTS回调传给TTS引擎.mlTtsEngine.setTtsCallback(callback);3.3配置TTS回调,接收并处理语音合成结果MLTtsCallbackcallback=newMLTtsCallback(){Stringtask="";StringfileName=“audio_”+任务;@OverridepublicvoidonError(StringtaskId,MLTtsErrorerr){Stringstr=taskId+""+err;发送消息(海峡);}@OverridepublicvoidonWarn(StringtaskId,MLTtsWarnwarn){Stringstr=taskId+"提示:"+warn;发送消息(海峡);}@OverridepublicvoidonRangeStart(StringtaskId,intstart,intend){Stringstr=taskId+"onRangeStart["+start+","+end+"]";//+temp.get(taskId).substring(开始);sendMsg(taskId+"onRangeStart["+start+","+end+"]");sendMsg1(taskId,开始,结束);}@OverridepublicvoidonAudioAvailable(StringtaskId,MLTtsAudioFragmentaudioFragment,intoffset,Pairrange,Bundlebundle){if(!task.equals(taskId)){task=taskId;fileName="/sdcard/audio_"+task+".pcm";}writeTxtToFile(audioFragment.getAudioData(),fileName,true);}@OverridepublicvoidonEvent(StringtaskId,inteventId,Bundlebundle){StringBufferstringBuffer=newStringBuffer();stringBuffer.append(taskId+"");switch(eventId){caseMLTtsConstants.EVENT_PLAY_START:stringBuffer.append("onPlayStart");休息;caseMLTtsConstants.EVENT_PLAY_STOP:stringBuffer.append("onPlayStop");stringBuffer.append(bundle.getBoolean(MLTtsConstants.EVENT_PLAY_STOP_INTERRUPTED));休息;caseMLTtsConstants.EVENT_PLAY_RESUME:stringBuffer.append("onPlayResume");休息;caseMLTtsConstants.EVENT_PLAY_PAUSE:stringBuffer.append("onPlayPause");休息;caseMLTtsConstants.EVENT_SYNTHESIS_COMPLETE:stringBuffer.append("onSynthesisComplete");PCMCovWavUtil.convertWaveFile(fileN我);休息;caseMLTtsConstants.EVENT_SYNTHESIS_START:stringBuffer.append("onSynthesisStart");休息;caseMLTtsConstants.EVENT_SYNTHESIS_END:stringBuffer.append("onSynthesisEnd");休息;}Log.d(TAG,"onEvent:"+string.toString());}};3.4调用speak合成请求,播放控制Stringid=mlTtsEngine.speak(text,MLTtsEngine.QUEUE_APPEND));mlTtsEngine.pause();mlTtsEngine.resume();mlTtsEngine.stop();调用完毕,释放引擎if(mlTtsEngine!=null){mlTtsEngine.stop();mlTtsEngine.shutdown();}OfflineTTS4.1离线功能需要增加下载音箱模型包的步骤);mLocalModelManager.isModelExist(mLocalModel).addOnSuccessListener(newOnSuccessListener(){@OverridepublicvoidonSuccess(BooleanaBoolean){if(aBoolean){mlTtsEngine.speak(text,MLTtsEngine.QUEUE_APPEND)}else{downloadModel(true);}}}).addOnFailureListener(newOnFailureListener(){@OverridepublicvoidonFailure(Exceptione){Log.e(TAG,e.getMessage());}});下载模型方法为:privatevoiddownloadModel(finalbooleanneedSpeak){MLModelDownloadStrategy请求=newMLModelDownloadStrategy.Factory().needWifi().create();MLModelDownloadListenermodelDownloadListener=newMLModelDownloadListener(){@OverridepublicvoidonProcess(longalreadyDownLength,longtotalLength){showProcess(alreadyDownLength,"模型下载完成",totalLength);}};mLocalModelManager.downloadModel(mLocalModel,request,modelDownloadListener).addOnSuccessListener(newOnSuccessListener(){@OverridepublicvoidonSuccess(VoidaVoid){日志。i(TAG,"下载模型:"+mLocalModel.getModelName()+"成功");showToast("下载模型成功");更新配置();如果(需要说话){说话();}}}).addOnFailureListener(newOnFailureListener(){@OverridepublicvoidonFailure(Exceptione){Log.e(TAG,"downloadModelfailed:"+e.getMessage());showToast(e.getMessage());}});}其他用法和在线TTS一致了解更多详情>>访问华为开发者联盟官网获取开发指导文档华为移动服务开源仓库地址:GitHub、Gitee关注我们,第一时间了解最新技术HMSCore的资料~