在鸿蒙设备上,用嘴巴代替手指,完成文本输入、语音笔记甚至命令识别,是 AI 产品最核心的落地能力之一。
本篇带你从 0 实现一个「实时语音转文字」功能,涵盖:
✅ 原生语音识别模块初始化
✅ 实时识别中文语音 → 展示为文字
✅ 错误处理与状态监听
✅ 可拓展成语音笔记、搜索助手、语音控制器等
✅ 所需模块
能力 | 模块名 |
---|---|
语音识别(ASR) | @ohos.ai.asr |
麦克风权限 | 配置权限 + 动态授权 |
🧱 效果预览
-
用户点击“开始识别”按钮
-
说话的内容实时变成文字显示在页面
-
点击“停止”按钮终止识别
📦 Step1:配置权限
在 config.json
添加麦克风权限:
"reqPermissions": [
{
"name": "ohos.permission.MICROPHONE"
}
]
动态请求:
import { requestPermissionsFromUser } from '@ohos.abilityAccessCtrl'
await requestPermissionsFromUser(['ohos.permission.MICROPHONE'])
📦 Step2:初始化 ASR 客户端
import asr from '@ohos.ai.asr'
let asrClient: asr.ASRClient | null = null
async function initASR() {
asrClient = await asr.createASRClient()
}
📦 Step3:绑定识别结果监听
let resultText: string = ''
asrClient?.on('recognitionResult', (res) => {
console.log('识别结果:', res.text)
resultText += res.text
})
asrClient?.on('error', (err) => {
console.error('识别失败:', err)
})
📦 Step4:开始与停止识别
async function startRecognition() {
await asrClient?.start({
language: 'zh',
audioFormat: asr.AudioFormat.PCM_16K
})
}
async function stopRecognition() {
await asrClient?.stop()
}
📦 Step5:简单 UI 示例组件
@Entry
@Component
struct ASRDemo {
@State result: string = ''
@State isListening: boolean = false
build() {
Column({ space: 20 }) {
Text(this.result).fontSize(18).lineHeight(26)
Button(this.isListening ? '停止识别' : '开始识别')
.onClick(async () => {
if (!asrClient) await initASR()
if (this.isListening) {
await stopRecognition()
} else {
resultText = ''
await startRecognition()
}
this.isListening = !this.isListening
})
}
.padding(20)
}
aboutToAppear() {
if (!asrClient) initASR()
if (asrClient) {
asrClient.on('recognitionResult', res => {
this.result += res.text
})
}
}
}
🎯 实战拓展建议
场景 | 建议做法 |
---|---|
语音笔记 | 将 result 存储至本地 TXT / JSON 文件 |
搜索助手 | 把识别结果作为关键词调用搜索接口 |
语音输入框替代 | 将文本回填至表单项中 |
语音控制器 | 使用关键词触发 UI 控制逻辑(如“返回”) |
🧩 小结
你已完成鸿蒙语音识别从初始化到实时识别的完整流程:
-
权限配置 → 模块初始化
-
启动识别 → 实时监听
-
错误处理 → 停止识别
-
结果绑定 UI 展示
这为后续 AI 功能(如语音控制、录音转文字、AI 对话)打下坚实基础。
📘 下一篇预告
第2篇:图像识别入门——使用 ArkTS 识别图片内容标签
我们将调用鸿蒙图像分类能力,上传一张图片,识别出其中包含的物体和类别,如“猫”“电脑”“风景”等。