目录

在开始API开发工作之前,您需要完成必要的开发准备工作,同时请确保您的工程中已经配置HMS Core SDK的maven仓地址,并且完成了本服务的SDK集成。

1. 创建语音合成引擎。可以通过语音合成自定义参数类MLTtsConfig创建语音合成引擎。

  1. // 使用自定义参数配置创建语音合成引擎。
  2. MLTtsConfig mlConfigs = new MLTtsConfig()
  3.    // 设置合成文本为中文。支持设置:
  4.    // MLTtsConstants.TTS_EN_US:转换文本为英文;
  5.    // MLTtsConstants.TTS_ZH_HANS:转换文本为中文;
  6.    // MLTtsConstants.TTS_LAN_ES_ES:转换文本为西班牙语;
  7.    // MLTtsConstants.TTS_LAN_FR_FR:转换文本为法语。
  8.    .setLanguage(MLTtsConstants.TTS_ZH_HANS)
  9.    // 设置中文发音音色。支持设置:
  10.    // MLTtsConstants.TTS_SPEAKER_FEMALE_ZH: 中文女声;
  11.    // MLTtsConstants.TTS_SPEAKER_MALE_ZH: 中文男声。
  12.    // 设置英文发音音色。支持设置:
  13.    // MLTtsConstants.TTS_SPEAKER_FEMALE_EN: 英文女声;
  14.    // MLTtsconstants.TTS_SPEAKER_MALE_EN: 英文男声。
  15.    // MLTtsConstants.TTS_SPEAKER_FEMALE_FR: 法语女声;
  16.    // MLTtsconstants.TTS_SPEAKER_FEMALE_ES: 西班牙语女声。
  17.    .setPerson(MLTtsConstants.TTS_SPEAKER_FEMALE_ZH)
  18.    // 设置发音速度。范围:0-2,1.0表示正常语速。
  19.    .setSpeed(1.0f)
  20.    // 设置音量。范围0-2,1.0表示正常音量。
  21.    .setVolume(1.0f);
  22. MLTtsEngine mlTtsEngine = new MLTtsEngine(mlConfigs);
  23. //引擎运行中更新配置
  24. mlTtsEngine.updateConfig(mlTtsConfig);

2. 新建语音合成回调,用于处理语音合成结果。

  1. MLTtsCallback callback = new MLTtsCallback() {
  2.    @Override
  3.    public void onError(String taskId, MLTtsError err) {
  4.        // 语音合成失败处理。
  5.    }
  6.    @Override
  7.    public void onWarn(String taskId, MLTtsWarn warn) {
  8.        // 告警处理(不影响业务逻辑)。
  9.    }
  10.    @Override
  11.    // 返回当前播放分片和文本对应关系。start表示音频分片在输入文本中的起始位置,end表示音频分片在输入文本中的结束位置(不包含)。
  12.    public void onRangeStart(String taskId, int start, int end) {
  13.        // 当前播放分片和文本对应关系处理。
  14.    }
  15.    @Override
  16.    // taskId 该音频对应的语音合成任务Id。
  17.    // audioFragment 音频数据。
  18.    // offset 一个语音合成任务会对应一个音频合成数据队列,该字段表示本次传输的音频分片在该队列中的偏移量。
  19.    // range 本次传输的音频分片所在的文本区域,range.first为起始位置(包含的),range.second为结束位置(不包含的)。
  20.    public void onAudioAvailable(String taskId, MLTtsAudioFragment audioFragment, int offset, Pair<Integer, Integer> range,
  21.        Bundle bundle){
  22.        // Tts合成音频流回调接口,通过此接口将音频合成数据返回给App。
  23.    }
  24.    @Override
  25.    public void onEvent(String taskId, int eventId, Bundle bundle) {
  26.       // 合成事件回调方法。eventId为事件名称。
  27.       switch (eventId) {
  28.        case MLTtsConstants.EVENT_PLAY_START:
  29.            // 播放开始回调。
  30.                break;
  31.        case MLTtsConstants.EVENT_PLAY_STOP:
  32.            // 播放停止回调。
  33.              boolean isInterrupted = bundle.getBoolean(MLTtsConstants.EVENT_PLAYSTOP_INTERRUPTED);
  34.                break;
  35.        case MLTtsConstants.EVENT_PLAY_RESUME:
  36.            // 播放恢复回调。
  37.                break;
  38.        case MLTtsConstants.EVENT_PLAY_PAUSE:
  39.            // 播放暂停回调。
  40.                break;
  41.            }
  42.        //以下回调事件类型是在不使用内部播放器播放,只关注合成音频数据时,需要关注的回调接口。
  43.        case MLTtsConstants.EVENT_SYNTHESIS_START:
  44.           // 语音合成开始的回调。
  45.                break;
  46.        case MLTtsConstants.EVENT_SYNTHESIS_END:
  47.           // 语音合成结束的回调。
  48.                break;
  49.        case MLTtsConstants.EVENT_SYNTHESIS_COMPLETE:
  50.         // 语音合成完成,同时合成的语音流全部传给App了。
  51.            boolean isInterrupted = bundle.getBoolean(MLTtsConstants.EVENT_SYNTHESIS_INTERRUPTED);
  52.                break;
  53.        default:
  54.                break;
  55.        }
  56. }

3. 将语音合成回调传入第1步中新建的语音合成引擎中,进行语音合成。

  1. mlTtsEngine.setTtsCallback(callback);
  2. /**
  3. *第一个参数:sourceText表示需要合成的文本信息,支持最长500个字符的输入(包含500)。
  4. *第二个参数为合成模式设置,设置格式为:configA | configB | configC。
  5. *configA支持设置:
  6. *    MLTtsEngine.QUEUE_APPEND:排队模式,如果当前正在播放,则将任务放在队列中顺序执行;如果当前处于播放暂停状态,则恢复播放,再将任务放入队列中顺序执行;如果当前无播放任务,则立即执行。
  7. *    MLTtsEngine.QUEUE_FLUSH:清空模式,立即停止正在进行的语音合成任务以及播放,并清空正在排队的语音合成任务,立即执行此次语音合成任务并播放。
  8. *configB支持设置:
  9. *    MLTtsEngine.OPEN_STREAM:实时流输出模式,将文本合成的语音数据流通过onAudioAvailable回调输出。
  10. *configC支持设置:
  11. *    MLTtsEngine.EXTERNAL_PLAYBACK:外部播放模式,屏蔽SDK自带播放器,需要开发者对onAudioAvailable回调接口输出的音频进行自行处理,此时回调接口中播放相关接口将会失效,仅能监听语音合成相关回调接口。
  12. */
  13. // 排队模式进行语音合成,使用SDK内置播放器播放语音。
  14. String id = mlTtsEngine.speak(sourceText, MLTtsEngine.QUEUE_APPEND);
  15. // 排队模式进行语音合成,将合成的语音流通过onAudioAvailable回调输出,同时使用SDK内置播放器播放语音。
  16. // String id = mlTtsEngine.speak(sourceText, MLTtsEngine.QUEUE_APPEND | MLTtsEngine.OPEN_STREAM);
  17. // 排队模型进行语音合成,将合成的语音流通过onAudioAvailable回调输出,输出语音流不播放,由开发者控制。
  18. // String id = mlTtsEngine.speak(sourceText, MLTtsEngine.QUEUE_APPEND | MLTtsEngine.OPEN_STREAM | MLTtsEngine.EXTERNAL_PLAYBACK);

4. 播放控制(仅在使用内部播放器时生效)。

  1. // 暂停播放。
  2. mlTtsEngine.pause();
  3. // 恢复播放。
  4. mlTtsEngine.resume();

5. 停止当前正在执行的语音合成任务,并清空队列中的所有任务,如果有任务正在播放,也实时停止,调用内部播放器时此方法有效。

  1. mlTtsEngine.stop();

6. 合成结束后,释放资源。

  1. if (mlTtsEngine!= null) {
  2.    mlTtsEngine.shutdown();
  3. }