简介

HUAWEI ML Kit支持语音合成功能,将文字信息转换为语音输出,提供丰富的音色以及可通过调整音量、语速从而使发音达到更加真实自然的效果。

您将建立什么

在这个codelab中,您将完成一个语音合成的demo工程。

您将会学到什么

硬件要求

软件要求

需要的知识点

HarmonyOS应用基础开发能力

在开发应用前需要在华为开发者联盟网站上注册成为开发者并完成实名认证,具体方法请参见帐号注册认证

集成HUAWEI ML Kit语音合成能力,需要完成以下准备工作:

  1. 华为开发者联盟AppGallery Connect中选择"我的项目",在项目列表中选择创建的应用,在"项目设置"页面中选择"API管理"。
  2. 打开"机器学习"服务开关。

至此,已经为创建的应用开通了"机器学习"服务。

步骤 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" } ] } }

代码示例

  1. 创建语音合成引擎。
    可以通过语音合成自定义配置类MLTtsConfig创建语音合成引擎。
    // 使用自定义参数配置创建语音合成引擎。 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);
  2. 新建语音合成回调,用于处理语音合成结果。
    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; } } };
  3. 在将语音合成回调传入新建的语音合成引擎中,进行语音合成。
    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);
  4. 播放控制(仅在使用内部播放器时生效)。
    // 暂停播放。 mlTtsEngine.pause(); // 恢复播放。 mlTtsEngine.resume(); // 停止播放。 mlTtsEngine.stop();

开发完成后,点击图标 (),运行HUAWEI DevEco Studio工程打包生成HAP,并安装在测试手机上。

干得好,您已经成功完成了codelab并学到了:

本文介绍的工程仅用于简单演示,实际开发过程中应严格遵循开发指南。demo的源码下载链接:基本能力示例代码

Code copied