HarmonyOS鸿蒙Next中openHarmony如何使用文字转语音功能?

HarmonyOS鸿蒙Next中openHarmony如何使用文字转语音功能? DevStudio: 5.0.3.910,

OpenHarmony SDK :12,

build-profile.json5中"runtimeOS": “OpenHarmony”。

测试机器版本:OpenHarmony 5.0.1.111(13)

目前需要实现 text-to-speech,文字转语音的功能(离线)。官方提供的@kit.CoreSpeechKit-->TextToSpeech在"runtimeOS": "OpenHarmony"时无法使用,查阅资料说需要OpenHarmony SDK 18以上 才可以用。

所以想请教一下:该如何实现 “文字转语音的功能(离线)” 让其在 OpenHarmony 5.0.1.111(13)机器上可以正常运行。


更多关于HarmonyOS鸿蒙Next中openHarmony如何使用文字转语音功能?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

如果目标设备固定在 OpenHarmony 5.0.1 / API 13,且 CoreSpeechKit 的 TextToSpeech 需要更高 API 或 HarmonyOS 侧能力,那就不能直接依赖这个 Kit 来实现离线 TTS。

可行路线一般是两条:

  1. 升级系统/SDK 到支持 TTS 能力的版本,再使用系统 Kit。
  2. 保持当前系统版本,集成第三方离线 TTS 推理库和模型,例如已适配 OpenHarmony 的 sherpa-onnx 方向。

走第三方离线模型时,重点评估:模型大小、首句延迟、CPU 占用、内存峰值、音频输出格式和授权协议。小设备上不要一开始就选大模型,先用官方 demo 的最小模型跑通,再替换业务音色或多语种模型。

更多关于HarmonyOS鸿蒙Next中openHarmony如何使用文字转语音功能?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


如果系统不能升级,只能通过移植第三方离线 TTS 引擎来实现文字转语音。可以使用 sherpa-onnx 三方库。

sherpa-onnx 是 next-gen Kaldi 团队开源的语音推理部署框架(Apache 2.0 协议),支持离线 TTS、ASR 等多种语音能力,已经移植到 OpenHarmony 并上架到 OpenHarmony 三方库中心仓2。这是目前 OpenHarmony 社区中实现离线 TTS 最成熟、最广泛采用的方案。

https://gitcode.com/GitHub_Trending/sh/sherpa-onnx

cke_2593.png

Core Speech Kit支持将一篇不超过10000字符数的中英文文本(简体中文、繁体中文、数字、英文)合成为语音,并以选定音色进行播报。

开发者可对播报的策略进行设置,包括单词播报、数字播报、静音停顿、汉字发音策略。

参考地址

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/texttospeech-guide

首先@kit.CoreSpeechKit的 TextToSpeech接口是华为闭源服务,仅适用于 HarmonyOS(runtimeOS: “HarmonyOS”),在 OpenHarmony 上不可用的。

OpenHarmony 社区目前没有官方的 TTS 系统能力,不存在“升级到某个 SDK 版本就能用”的方案

你的目标设备是 OpenHarmony 5.0.1.111,需要离线 TTS 功能,因此,在 OpenHarmony 上实现离线文字转语音,只能采用第三方离线 TTS 引擎的方案。

比如你可以离线集成 Sherpa-ONNX,这是一个开源的、基于 ONNX Runtime 的语音合成框架,支持离线运行,已在 OpenHarmony 社区有适配实践。

我现在用的就是 Sherpa-ONNX 这个方法,我下载了他github上面提供的demo,但是不知道为什么,他合成语音的时间很长。一般在6s,简单的一句话要20s,字数越多合成的时间越长。不知道该怎么解决?

你用的什么模型?不同模型速度应该不一样的Sherpa官方好像有其他模型的,你可以替换仓库里面的模型再试试。另外你机器的配置也影响速度的

用的 vits-melo-tts-zh_en 这个模型,按照他提供的demo SherpaOnnxTts 做的。

按您给的组合看,不建议再往 @kit.CoreSpeechKit 方向排查。您现在是 OpenHarmony SDK 12、runtimeOS 为 OpenHarmony、设备 OpenHarmony 5.0.1.111(API13),如果 import @kit.CoreSpeechKit 编译或运行不可用,基本就是当前系统镜像没有 TextToSpeech 对应的 Kit 实现;HarmonyOS 文档里的 TextToSpeech 依赖 @kit.CoreSpeechKit,并不等于所有 OpenHarmony 发行版都内置离线 TTS 引擎。

我这边建议分两条路处理:

  1. 如果产品允许升级:升级到明确支持 TextToSpeech 的 SDK/系统版本,再按官方方式创建 TextToSpeechEngine。
  2. 如果必须运行在 OpenHarmony 5.0.1.111:把离线 TTS 当作自研/合规引入的 Native 能力集成,链路建议是 ArkTS -> Node-API -> native tts engine(.so + model) -> 输出 PCM -> AudioRenderer 播放。

ArkTS 侧可以先把接口封成这种形式:

import tts from 'libentry.so';
import { audio } from '[@kit](/user/kit).AudioKit';

const pcm: ArrayBuffer = tts.synthesize('测试播报'); // native 返回 16k/16bit PCM
await audioRenderer.start();
await audioRenderer.write(pcm);
await audioRenderer.drain();

重点检查三项:模型文件放 rawfile 或沙箱并能被 native 读取;so 的 ABI 与设备匹配;合成耗时不要阻塞 UI 线程,长文本建议放到异步任务或 native 工作线程。也就是说,API13 的 OpenHarmony 上没有一个官方 ArkTS 开关可以直接得到离线 TTS,可落地方案是升级官方 Kit,或者走 NDK/Node-API 自带离线引擎。

参考:

在 HarmonyOS NEXT(OpenHarmony)中,文字转语音可通过系统 TTS 服务实现。使用 @ohos.speechEngine 模块的 createEngine 创建引擎,调用 speak 方法播放文本,通过 on('error') 监听异常。需在模块中声明 ohos.permission.USE_TTS 权限。

主要 API:

  • TextToSpeech 类(@ohos.speechEngine
  • speak(text, options)
  • stop()

在 OpenHarmony 5.0.1.111(SDK 12)环境下,@kit.CoreSpeechKit 的 TextToSpeech 依赖更高版本 SDK(18+),当前无法直接使用。系统也未内置离线 TTS 服务,因此需在应用内自行集成离线 TTS 引擎。

常见实现路径:

  1. 接入开源轻量级 TTS 引擎,如 espeak-ngflite。它们提供 C/C++ 接口,可通过 OpenHarmony NAPI 封装后供 ArkTS 调用,合成出的 PCM 音频用 AudioRenderer 播放。
  2. 使用本地神经网络 TTS 模型(如 VITS),配合 ONNX Runtime 等推理框架,将模型和声码器打包进应用,输出音频流播放,语音自然度更高但资源占用较大。
  3. 将上述引擎编译为 .so 库,通过 import 或 NAPI 集成到工程,注意用 runtimeOSOpenHarmony 的 SDK 编译对齐。

上述方案均可完全离线运行,无需系统 TTS 支持。

回到顶部