HUAWEI ML Kit支持语音合成功能,将文字信息转换为语音输出,提供丰富的音色以及可通过调整音量、语速从而使发音达到更加真实自然的效果。
在这个codelab中,您将完成一个语音合成的demo工程。
集成HUAWEI ML Kit语音合成能力,需要完成以下准备工作:


至此,已经为创建的应用开通了"机器学习"服务。
步骤 1 在HarmonyOS应用"entry"目录下的"build.gradle"文件中添加如下编译依赖。
在文件头部声明下一行添加如下配置。
apply plugin: 'com.huawei.agconnect'
在"dependencies"中添加如下编译依赖。
dependencies {
implementation 'com.huawei.hms:ml-computer-harmony-voice-tts-model-bolt:3.4.0.305'
}
步骤 2 - 在工程级的"build.gradle"文件的"dependencies"中添加如下编译依赖。
dependencies {
classpath 'com.huawei.agconnect:agcp-harmony:1.2.2.300'
}
—-结束
点击右上角"Sync Now",完成"build.gradle"文件的同步,将相关依赖下载到本地。
开发者需要在config.json文件中的"reqPermissions"字段中声明访问网络的权限。详情参见权限开发指导。
{
"module": {
"reqPermissions": [
{
"name": "ohos.permission.INTERNET"
}
]
}
}
// 使用自定义参数配置创建语音合成引擎。
MLTtsConfig mlTtsConfig = new MLTtsConfig()
// 设置合成文本为中文。
.setLanguage(MLTtsConstants.TTS_ZH_HANS)
// 设置中文发音音色。
.setPerson(MLTtsConstants.TTS_SPEAKER_FEMALE_ZH)
// 设置发音速度。范围:(0.01-20.00),1.0表示正常语速。
.setSpeed(1.0f)
// 设置音量。范围:(0-1.0),1.0表示正常音量。
.setVolume(1.0f);
// 引擎运行中更新配置。
MLTtsEngine mlTtsEngine = new MLTtsEngine(mlTtsConfig);
mlTtsEngine.updateConfig(mlTtsConfig);
MLTtsCallback callback = new MLTtsCallback() {
@Override
public void onError(String taskId, MLTtsError err) {
// 语音合成失败处理。
}
@Override
public void onWarn(String taskId, MLTtsWarn warn) {
// 告警处理(不影响业务逻辑)。
}
@Override
public void onRangeStart(String s, int i, int i1) {
}
@Override
// taskId: 该音频对应的语音合成任务Id。
// audioFragment: 音频数据。
public void onAudioAvailable(String taskId, MLTtsAudioFragment mlTtsAudioFragment, int i, Pair pair, PacMap bundle){
// Tts合成音频流回调接口,通过此接口将音频合成数据返回给App。
}
@Override
public void onEvent(String taskId, int eventId, PacMap bundle) {
// 合成事件回调方法。eventId为事件名称。
switch (eventId) {
case MLTtsConstants.EVENT_PLAY_START:
// 播放开始回调。
break;
case MLTtsConstants.EVENT_PLAY_STOP:
// 播放停止回调。
boolean isInterrupted = bundle.getBooleanValue(MLTtsConstants.EVENT_PLAY_STOP_INTERRUPTED);
break;
case MLTtsConstants.EVENT_PLAY_RESUME:
// 播放恢复回调。
break;
case MLTtsConstants.EVENT_PLAY_PAUSE:
// 播放暂停回调。
break;
}
}
};
mlTtsEngine.setTtsCallback(callback);
/**
*第一个参数:sourceText表示需要合成的文本信息,支持最长500个字符的输入(包含500)。
*第二个参数为合成模式设置,设置格式为:configA | configB | configC。
*configA支持设置:
* MLTtsEngine.QUEUE_FLUSH:清空模式,立即停止正在进行的语音合成任务以及播放,立即执行此次语音合成任务并播放。
*configB支持设置:
* MLTtsEngine.OPEN_STREAM:实时流输出模式,将文本合成的语音数据流通过onAudioAvailable回调输出。
*configC支持设置:
* MLTtsEngine.EXTERNAL_PLAYBACK:外部播放模式,屏蔽SDK自带播放器,需要自行处理onAudioAvailable回调接口输出的音频,此时回调接口中播放相关接口将会失效,仅能监听语音合成相关回调接口。
*/
// 语音合成,使用SDK内置播放器播放语音。
String id = mlTtsEngine.speak(sourceText, MLTtsEngine.QUEUE_FLUSH);
mlTtsEngine.speak(sourceText, MLTtsEngine.QUEUE_FLUSH | MLTtsEngine.OPEN_STREAM);
// 暂停播放。
mlTtsEngine.pause();
// 恢复播放。
mlTtsEngine.resume();
// 停止播放。
mlTtsEngine.stop();
开发完成后,点击图标 (
),运行HUAWEI DevEco Studio工程打包生成HAP,并安装在测试手机上。
干得好,您已经成功完成了codelab并学到了: