本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

鸿蒙系统的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();
  }
}

六、注意

  1. 权限申请
   // 在config.json中添加
   "reqPermissions": [
     {
       "name": "ohos.permission.MICROPHONE"
     },
     {
       "name": "ohos.permission.RECORD_AUDIO"
     }
   ]
  1. 资源释放

    • 页面销毁时调用destroy()方法
    • 移除所有事件监听器
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐