一、功能简介
本篇讲解如何在 HarmonyOS 中使用语音识别(ASR)模块实现“语音转文字”功能,适用于实时录入、语音搜索、语音笔记、听写系统等场景。
二、能力说明与限制
当前支持方式:
-
方式 A:调用系统语音输入法启动语音识别(最稳妥)
-
方式 B:接入华为 HiAI/ML Kit SDK(需接入原生端)
-
方式 C:借助 WebView 使用浏览器级
SpeechRecognition API
(仅部分设备支持)
本篇优先介绍「方式 A」,调用系统语音输入框实现语音转文字
三、页面结构
entry/src/main/ets/pages/SpeechToTextDemo.ets
四、代码演示(系统输入法识别调用)
@Entry
@Component
struct SpeechToTextDemo {
@State result: string = ''
@State message: string = ''
async startSystemVoiceInput() {
try {
// 使用系统方式唤起语音输入(输入法内长按语音图标可触发)
prompt.showToast({
message: '请点击输入框并使用系统语音输入法'
})
} catch (err) {
this.message = '语音启动失败:' + JSON.stringify(err)
}
}
build() {
Column() {
Text('语音转文字(语音输入)')
.fontSize(20)
.margin({ bottom: 16 })
TextArea({
text: this.result,
onChange: val => this.result = val
})
.placeholder('点击输入框 → 使用语音输入法开始识别')
.height(140)
.borderRadius(8)
.padding(10)
.backgroundColor('#f5f5f5')
.fontSize(16)
.margin({ bottom: 12 })
Button('启动语音输入提示')
.onClick(() => this.startSystemVoiceInput())
If(this.message !== '', () => {
Text(this.message)
.fontSize(14)
.fontColor(Color.Red)
.margin({ top: 12 })
})
}
.width('100%')
.padding(20)
}
}
五、运行效果
-
点击按钮提示 → 用户手动点击输入框;
-
启动系统输入法(如华为、小米、讯飞输入法)长按语音图标;
-
自动转化语音为文字填入 TextArea。
六、常见易错点与解决方案
易错点 | 表现 | 原因 | 解决方案 |
---|---|---|---|
无法自动识别 | 没反应 | 无调用麦克风权限 | 使用系统语音输入法代替直接调用 |
输入法不支持语音 | 无入口 | 系统输入法功能限制 | 使用支持语音的输入法(如讯飞、百度、华为) |
想实现自动识别 | 用户必须点输入法 | 无原生 API 开放 | 如需自动识别,请接入华为 ML Kit 或使用 WebView 接入 SpeechRecognition |
七、进阶建议
-
使用 WebView + JavaScript 调用浏览器 API 实现实时语音识别(后续将演示);
-
接入 ML Kit 实现多语言识别、语音分段、命令识别;
-
结合
TextArea
实现“边说边录”“听写回放”等功能。