鸿蒙 语音识别组件SpeechRecognizer
鸿蒙系统的SpeechRecognizer组件提供语音转文本功能,支持实时和离线两种识别模式。核心功能包括多语言支持、静音检测和自定义唤醒词。开发流程包含:1)创建识别器实例;2)初始化参数;3)调用start/stop控制识别;4)通过回调获取结果。高级功能可实现离线识别和自定义唤醒词。使用需申请麦克风权限,页面销毁时要释放资源。示例代码展示了基本的语音识别交互实现。该组件为鸿蒙应用提供了完整的
·
本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新
鸿蒙系统的SpeechRecognizer组件提供了将语音转换为文本的能力,支持实时语音识别和离线语音识别两种模式。
一、核心功能
| 功能 | 说明 |
|---|---|
| 实时语音识别 | 将麦克风输入的语音实时转换为文本 |
| 离线语音识别 | 不依赖网络服务的本地识别 |
| 多语言支持 | 支持中英文等多种语言 |
| 静音检测 | 自动检测语音开始和结束 |
| 识别结果回调 | 实时返回识别中间结果和最终结果 |
| 自定义唤醒词 | 设置特定唤醒短语 |
二、基本使用
1. 导入模块
import speechRecognizer from '@ohos.speech.recognizer';
2. 创建识别器实例
// 获取语音识别器实例
let recognizer = speechRecognizer.createRecognizer({
mode: speechRecognizer.RecognizerMode.SHARE // 使用共享模式
});
3. 初始化参数设置
// 设置识别参数
recognizer.init({
lang: 'zh-CN', // 识别语言
nbest: 1, // 返回最佳结果数
scene: speechRecognizer.SpeechScene.SPEECH_RECOGNIZE // 识别场景
}, (err) => {
if (err) {
console.error('初始化失败: ' + JSON.stringify(err));
return;
}
console.log('语音识别器初始化成功');
});
三、核心API
1. 语音识别控制
开始识别
recognizer.start({
onBegin: () => {
console.log('检测到语音开始');
},
onEnd: () => {
console.log('检测到语音结束');
},
onResult: (result) => {
console.log('识别结果: ' + JSON.stringify(result.result));
},
onError: (err) => {
console.error('识别错误: ' + JSON.stringify(err));
}
});
停止识别
recognizer.stop();
2. 识别参数调节
实时调整参数
recognizer.setParameter(
speechRecognizer.RecognizerParam.LANGUAGE,
'en-US', // 切换为英语
(err) => {
// 回调处理
}
);
支持调整的参数
| 参数 | 类型 | 可选值 | 说明 |
|---|---|---|---|
| LANGUAGE | string | 'zh-CN', 'en-US'等 | 识别语言 |
| SCENE | number | SPEECH_RECOGNIZE等 | 识别场景 |
| NBEST | number | 1-5 | 返回结果数量 |
3. 状态监听
添加状态监听器
recognizer.on('stateChange', (state) => {
switch (state) {
case speechRecognizer.RecognizerState.READY:
console.log('识别器准备就绪');
break;
case speechRecognizer.RecognizerState.RECOGNIZING:
console.log('正在识别中');
break;
case speechRecognizer.RecognizerState.BUSY:
console.log('识别器繁忙');
break;
}
});
四、高级功能实现
1. 离线语音识别
// 创建离线识别器
let offlineRecognizer = speechRecognizer.createRecognizer({
mode: speechRecognizer.RecognizerMode.EXCLUSIVE,
engine: speechRecognizer.RecognizerEngine.OFFLINE
});
// 检查离线资源是否可用
speechRecognizer.isSupportOffline((err, result) => {
if (result) {
console.log('支持离线识别');
}
});
2. 自定义唤醒词
recognizer.setParameter(
speechRecognizer.RecognizerParam.WAKEUP_WORD,
'你好小华', // 自定义唤醒词
(err) => {}
);
recognizer.on('wakeupWord', (word) => {
console.log('检测到唤醒词: ' + word);
});
五、示例代码
@Entry
@Component
struct SpeechRecognitionExample {
private recognizer: speechRecognizer.Recognizer = speechRecognizer.createRecognizer({
mode: speechRecognizer.RecognizerMode.SHARE
});
@State recognitionResult: string = '点击开始说话';
aboutToAppear() {
// 初始化识别器
this.recognizer.init({
lang: 'zh-CN',
scene: speechRecognizer.SpeechScene.SPEECH_RECOGNIZE
}, (err) => {
if (err) return;
// 添加状态监听
this.recognizer.on('stateChange', (state) => {
// 处理状态变化
});
});
}
build() {
Column() {
Text(this.recognitionResult)
.fontSize(20)
.margin(20)
Button('开始识别')
.onClick(() => {
this.recognizer.start({
onResult: (result) => {
this.recognitionResult = result.result[0];
},
onError: (err) => {
this.recognitionResult = '识别错误';
}
});
})
Button('停止识别')
.onClick(() => this.recognizer.stop())
}
}
onDestroy() {
// 释放资源
this.recognizer.off('stateChange');
this.recognizer.destroy();
}
}
六、注意
- 权限申请:
// 在config.json中添加
"reqPermissions": [
{
"name": "ohos.permission.MICROPHONE"
},
{
"name": "ohos.permission.RECORD_AUDIO"
}
]
-
资源释放:
- 页面销毁时调用
destroy()方法 - 移除所有事件监听器
- 页面销毁时调用
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)