在开始API开发工作之前,您需要完成必要的开发准备工作,同时请确保您的工程中已经配置HMS Core SDK的maven仓地址,并且完成了本服务的SDK集成。
1. 创建语音合成引擎。可以通过语音合成自定义参数类MLTtsConfig创建语音合成引擎。
- // 使用自定义参数配置创建语音合成引擎。
- MLTtsConfig mlConfigs = new MLTtsConfig()
- // 设置合成文本为中文。支持设置:
- // MLTtsConstants.TTS_EN_US:转换文本为英文;
- // MLTtsConstants.TTS_ZH_HANS:转换文本为中文;
- // MLTtsConstants.TTS_LAN_ES_ES:转换文本为西班牙语;
- // MLTtsConstants.TTS_LAN_FR_FR:转换文本为法语。
- .setLanguage(MLTtsConstants.TTS_ZH_HANS)
- // 设置中文发音音色。支持设置:
- // MLTtsConstants.TTS_SPEAKER_FEMALE_ZH: 中文女声;
- // MLTtsConstants.TTS_SPEAKER_MALE_ZH: 中文男声。
- // 设置英文发音音色。支持设置:
- // MLTtsConstants.TTS_SPEAKER_FEMALE_EN: 英文女声;
- // MLTtsconstants.TTS_SPEAKER_MALE_EN: 英文男声。
- // MLTtsConstants.TTS_SPEAKER_FEMALE_FR: 法语女声;
- // MLTtsconstants.TTS_SPEAKER_FEMALE_ES: 西班牙语女声。
- .setPerson(MLTtsConstants.TTS_SPEAKER_FEMALE_ZH)
- // 设置发音速度。范围:0-2,1.0表示正常语速。
- .setSpeed(1.0f)
- // 设置音量。范围0-2,1.0表示正常音量。
- .setVolume(1.0f);
- MLTtsEngine mlTtsEngine = new MLTtsEngine(mlConfigs);
- //引擎运行中更新配置
- mlTtsEngine.updateConfig(mlTtsConfig);
2. 新建语音合成回调,用于处理语音合成结果。
- MLTtsCallback callback = new MLTtsCallback() {
- @Override
- public void onError(String taskId, MLTtsError err) {
- // 语音合成失败处理。
- }
- @Override
- public void onWarn(String taskId, MLTtsWarn warn) {
- // 告警处理(不影响业务逻辑)。
- }
- @Override
- // 返回当前播放分片和文本对应关系。start表示音频分片在输入文本中的起始位置,end表示音频分片在输入文本中的结束位置(不包含)。
- public void onRangeStart(String taskId, int start, int end) {
- // 当前播放分片和文本对应关系处理。
- }
- @Override
- // taskId 该音频对应的语音合成任务Id。
- // audioFragment 音频数据。
- // offset 一个语音合成任务会对应一个音频合成数据队列,该字段表示本次传输的音频分片在该队列中的偏移量。
- // range 本次传输的音频分片所在的文本区域,range.first为起始位置(包含的),range.second为结束位置(不包含的)。
- public void onAudioAvailable(String taskId, MLTtsAudioFragment audioFragment, int offset, Pair<Integer, Integer> range,
- Bundle bundle){
- // Tts合成音频流回调接口,通过此接口将音频合成数据返回给App。
- }
- @Override
- public void onEvent(String taskId, int eventId, Bundle bundle) {
- // 合成事件回调方法。eventId为事件名称。
- switch (eventId) {
- case MLTtsConstants.EVENT_PLAY_START:
- // 播放开始回调。
- break;
- case MLTtsConstants.EVENT_PLAY_STOP:
- // 播放停止回调。
- boolean isInterrupted = bundle.getBoolean(MLTtsConstants.EVENT_PLAYSTOP_INTERRUPTED);
- break;
- case MLTtsConstants.EVENT_PLAY_RESUME:
- // 播放恢复回调。
- break;
- case MLTtsConstants.EVENT_PLAY_PAUSE:
- // 播放暂停回调。
- break;
- }
- //以下回调事件类型是在不使用内部播放器播放,只关注合成音频数据时,需要关注的回调接口。
- case MLTtsConstants.EVENT_SYNTHESIS_START:
- // 语音合成开始的回调。
- break;
- case MLTtsConstants.EVENT_SYNTHESIS_END:
- // 语音合成结束的回调。
- break;
- case MLTtsConstants.EVENT_SYNTHESIS_COMPLETE:
- // 语音合成完成,同时合成的语音流全部传给App了。
- boolean isInterrupted = bundle.getBoolean(MLTtsConstants.EVENT_SYNTHESIS_INTERRUPTED);
- break;
- default:
- break;
- }
- }
3. 将语音合成回调传入第1步中新建的语音合成引擎中,进行语音合成。
- mlTtsEngine.setTtsCallback(callback);
- /**
- *第一个参数:sourceText表示需要合成的文本信息,支持最长500个字符的输入(包含500)。
- *第二个参数为合成模式设置,设置格式为:configA | configB | configC。
- *configA支持设置:
- * MLTtsEngine.QUEUE_APPEND:排队模式,如果当前正在播放,则将任务放在队列中顺序执行;如果当前处于播放暂停状态,则恢复播放,再将任务放入队列中顺序执行;如果当前无播放任务,则立即执行。
- * MLTtsEngine.QUEUE_FLUSH:清空模式,立即停止正在进行的语音合成任务以及播放,并清空正在排队的语音合成任务,立即执行此次语音合成任务并播放。
- *configB支持设置:
- * MLTtsEngine.OPEN_STREAM:实时流输出模式,将文本合成的语音数据流通过onAudioAvailable回调输出。
- *configC支持设置:
- * MLTtsEngine.EXTERNAL_PLAYBACK:外部播放模式,屏蔽SDK自带播放器,需要开发者对onAudioAvailable回调接口输出的音频进行自行处理,此时回调接口中播放相关接口将会失效,仅能监听语音合成相关回调接口。
- */
- // 排队模式进行语音合成,使用SDK内置播放器播放语音。
- String id = mlTtsEngine.speak(sourceText, MLTtsEngine.QUEUE_APPEND);
- // 排队模式进行语音合成,将合成的语音流通过onAudioAvailable回调输出,同时使用SDK内置播放器播放语音。
- // String id = mlTtsEngine.speak(sourceText, MLTtsEngine.QUEUE_APPEND | MLTtsEngine.OPEN_STREAM);
- // 排队模型进行语音合成,将合成的语音流通过onAudioAvailable回调输出,输出语音流不播放,由开发者控制。
- // String id = mlTtsEngine.speak(sourceText, MLTtsEngine.QUEUE_APPEND | MLTtsEngine.OPEN_STREAM | MLTtsEngine.EXTERNAL_PLAYBACK);
4. 播放控制(仅在使用内部播放器时生效)。
- // 暂停播放。
- mlTtsEngine.pause();
- // 恢复播放。
- mlTtsEngine.resume();
5. 停止当前正在执行的语音合成任务,并清空队列中的所有任务,如果有任务正在播放,也实时停止,调用内部播放器时此方法有效。
- mlTtsEngine.stop();
6. 合成结束后,释放资源。
- if (mlTtsEngine!= null) {
- mlTtsEngine.shutdown();
- }