HarmonyOS鸿蒙Next中不联网状态下实现单词读音播放的能力吗
HarmonyOS鸿蒙Next中不联网状态下实现单词读音播放的能力吗 【问题描述】:有不联网状态下实现 单词读音播放的 能力吗;我们没有真机,因为我们最高使用的模拟器只能看api19;本Kit能力从6.0.0(20)版本开始支持模拟器。所以Core Speech Kit我们无法看效果,除了Core Speech Kit 还有其它方案实现吗
【问题现象】:需求问题
【版本信息】:api:19
【复现代码】:无
【尝试解决方案】:无
【背景知识】 语音识别可以在手机/平板等设备在无网状态下,为听障人士或不方便收听音频场景提供音频转文本能力。HarmonyOS侧提供了语音识别能力speechRecognizer,可以将一段中文音频信息(中文、中文语境下的英文;短语音模式不超过60s,长语音模式不超过8h)转换为文本,音频信息可以为pcm音频文件或者实时语音。 语音识别指南可参考官网指南,相关API可参考speechRecognizer (语音识别),完整demo可参考官网机器学习-基础语音服务。
【解决方案】 语音识别的场景有两类:实时语音识别与音频文件识别。
- 实时语音识别功能,参考如下示例代码实现:
- 在module.json5配置文件中声明麦克风权限(ohos.permission.MICROPHONE)并在业务页面中向用户申请。 注:ohos.permission.MICROPHONE不用ACL授权。
"requestPermissions": [
{
"name": "ohos.permission.MICROPHONE",
"reason": "$string:EntryAbility_desc",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "always"
}
}
],
getPermission() {
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
atManager.requestPermissionsFromUser(this.getUIContext().getHostContext(), ['ohos.permission.MICROPHONE'])
.then((data) => {
let grantStatus: Array<number> = data.authResults;
let length: number = grantStatus.length;
for (let i = 0; i < length; i++) {
if (grantStatus[i] === 0) {
// 用户授权,可以继续访问目标操作
this.createSREngine();
} else {
// 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
return;
}
}
})
.catch((err: BusinessError) => {
console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
});
}
- 创建实例、设置监听、设置对应参数并启动语音识别。
// 创建实例
async createSREngine() {
const extraParams: Record<string, Object> = {
'locate': 'CN',
'recognizerMode': 'short'
};
const initParamsInfo: speechRecognizer.CreateEngineParams = {
language: 'zh-CN', // 当前仅支持“zh-CN”中文
online: 1,
extraParams
};
try {
this.asrEngine = await speechRecognizer.createEngine(initParamsInfo);
console.info(`获取语音转文字示例成功`);
this.setListener();
} catch (e) {
console.error(`获取语音转文字实例失败 ${e.code} ${e.message}`);
}
}
// 设置回调
setListener() {
// 创建回调对象
let setListener: speechRecognizer.RecognitionListener = {
// 开始识别成功回调
onStart: (sessionId: string, eventMessage: string) => {
console.info(`onStart sessionId: ${sessionId} eventMessage: ${eventMessage}`);
},
// 事件回调
onEvent: (sessionId: string, eventCode: number, eventMessage: string) => {
console.info(
`onEvent sessionId: ${sessionId} eventCode: ${eventCode} eventMessage: ${eventMessage}`);
},
// 识别结果回调,包括中间结果和最终结果
onResult: (sessionId: string, result: speechRecognizer.SpeechRecognitionResult) => {
console.info(`onResult sessionId: ${sessionId} result: ${result.result}`);
if (result.result) {
console.info(`text= ${result.result}`);
}
},
// 识别完成回调
onComplete: (sessionId: string, eventMessage: string) => {
console.info(`onComplete sessionId: ${sessionId} eventMessage: ${eventMessage}`);
},
onError: (sessionId: string, errorCode: number, errorMessage: string) => {
console.error(
`onError sessionId: ${sessionId} errorCode: ${errorCode} errorMessage: ${errorMessage}`);
}
};
try {
// 设置回调
this.asrEngine?.setListener(setListener);
console.info(`已设置监听回调`);
} catch (e) {
console.error(`设置监听回调失败`);
}
}
// 设置参数并启动语音识别
startListener() {
const audioParam: speechRecognizer.AudioInfo = {
audioType: 'pcm',
sampleRate: 16000,
soundChannel: 1,
sampleBit: 16
};
const extraParam: Record<string, Object> = { 'maxAudioDuration': 40000, 'recognitionMode': 0 };
this.sessionId = new Date().getTime().toString();
const recognizerParams: speechRecognizer.StartParams = {
sessionId: this.sessionId,
audioInfo: audioParam,
extraParams: extraParam
};
this.asrEngine?.startListening(recognizerParams);
console.info(`已启动 startListening`);
}
结合自身业务场景启动语音识别并获取结果,结果为上述监听onResult()中返回的result.result。
更多关于HarmonyOS鸿蒙Next中不联网状态下实现单词读音播放的能力吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
您的问题可以参考以下文档:
参考文档:textToSpeech (文本转语音)-ArkTS API-Core Speech Kit(基础语音服务)-AI - 华为HarmonyOS开发者
HarmonyOS Next支持离线单词发音功能。系统内置TTS引擎可在无网络时合成语音,开发者通过@ohos.multimedia.tts接口调用speak()方法实现。需提前下载离线语音包至设备,并设置AVSession管理音频焦点。语音包包含多语言音库,支持中英文混合播报。
是的,HarmonyOS Next支持在无网络状态下实现单词或文本的语音合成(TTS)播放。除了Core Speech Kit,您还可以考虑以下方案:
1. 使用系统内置的离线TTS引擎
HarmonyOS系统通常预置了基础的离线语音合成能力。您可以通过@ohos.tts(文本转语音)系统API直接调用。该模块在无网络时,若设备已下载离线语音包,可正常工作。
关键接口示例:
import tts from '@ohos.tts';
// 1. 检查离线语音引擎是否可用
let voiceInfo = await tts.getVoiceInfo();
// 筛选出支持离线的引擎(local属性为true)
// 2. 创建TTS实例并播放
let ttsEngine = await tts.createTts({
volume: 0.8,
speed: 1.0
});
await ttsEngine.speak('Hello world');
2. 集成第三方离线TTS SDK 若系统引擎不满足需求(如音色、多语言),可集成第三方离线TTS引擎的SDK(需封装为HarmonyOS Native Kit)。这类SDK通常完全离线运行,但会增加应用体积。
3. 预置音频文件播放
对于有限词汇(如英语单词学习类应用),可预录制或生成音频文件(如MP3),通过@ohos.multimedia.audio播放:
import audio from '@ohos.multimedia.audio';
// 播放assets中的预置音频
let audioPlayer = await audio.createAudioPlayer();
audioPlayer.src = 'resource://rawfile/word_hello.mp3';
audioPlayer.play();
注意事项:
@ohos.tts的离线支持取决于设备厂商预置的语音包,建议在代码中通过getVoiceInfo()动态判断。- 模拟器限制:当前模拟器可能未预装离线语音包,此场景需真机测试。
- 若必须用API 19模拟器验证,可先用预置音频方案临时替代,真机再测试TTS方案。
两种方案均无需网络,前者灵活但依赖系统,后者稳定但需管理音频资源。

