当前位置:首页 > VUE

vue实现语音识别

2026-02-19 07:55:56VUE

实现语音识别的核心方法

使用Web Speech API中的SpeechRecognition接口,这是浏览器原生支持的语音识别功能。需要在Vue项目中引入并封装相关逻辑。

创建一个语音识别服务模块:

// speechRecognition.js
export const initSpeechRecognition = (lang = 'zh-CN') => {
  const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition
  if (!SpeechRecognition) throw new Error('浏览器不支持语音识别')

  const recognition = new SpeechRecognition()
  recognition.lang = lang
  recognition.interimResults = true

  return recognition
}

在Vue组件中的使用示例

创建可复用的语音识别组件:

<template>
  <div>
    <button @click="toggleRecognition">
      {{ isListening ? '停止录音' : '开始录音' }}
    </button>
    <p>{{ transcript }}</p>
  </div>
</template>

<script>
import { initSpeechRecognition } from './speechRecognition'

export default {
  data() {
    return {
      isListening: false,
      transcript: '',
      recognition: null
    }
  },
  methods: {
    toggleRecognition() {
      if (this.isListening) {
        this.stopRecognition()
      } else {
        this.startRecognition()
      }
    },
    startRecognition() {
      this.recognition = initSpeechRecognition()
      this.recognition.onresult = (event) => {
        const transcript = Array.from(event.results)
          .map(result => result[0])
          .map(result => result.transcript)
          .join('')
        this.transcript = transcript
      }
      this.recognition.start()
      this.isListening = true
    },
    stopRecognition() {
      this.recognition.stop()
      this.isListening = false
    }
  },
  beforeDestroy() {
    if (this.recognition) {
      this.recognition.stop()
    }
  }
}
</script>

处理兼容性和错误情况

添加错误处理和兼容性检查:

startRecognition() {
  try {
    this.recognition = initSpeechRecognition()
    this.recognition.onerror = (event) => {
      console.error('语音识别错误:', event.error)
      this.isListening = false
    }
    this.recognition.onend = () => {
      if (this.isListening) {
        this.recognition.start()
      }
    }
    // ...其他事件处理
    this.recognition.start()
    this.isListening = true
  } catch (error) {
    alert(error.message)
  }
}

添加语音反馈功能

扩展功能实现语音反馈:

methods: {
  speak(text) {
    const utterance = new SpeechSynthesisUtterance(text)
    utterance.lang = 'zh-CN'
    window.speechSynthesis.speak(utterance)
  },
  handleRecognitionResult(transcript) {
    this.transcript = transcript
    if (transcript.includes('你好')) {
      this.speak('您好,有什么可以帮您?')
    }
  }
}

第三方库集成方案

对于更复杂的需求,可以考虑第三方库如:

npm install annyang vue-voice-recognition

使用示例:

vue实现语音识别

import annyang from 'annyang'

export default {
  mounted() {
    if (annyang) {
      annyang.addCommands({
        '你好': () => {
          this.$emit('speech', '您好')
        },
        '搜索 *term': (term) => {
          this.$emit('search', term)
        }
      })
    }
  },
  methods: {
    startListening() {
      annyang.start({ autoRestart: true, continuous: true })
    }
  }
}

标签: 语音识别vue
分享给朋友:

相关文章

vue实现皮肤切换

vue实现皮肤切换

实现皮肤切换的基本思路 在Vue中实现皮肤切换功能,通常涉及动态修改CSS变量或类名。核心是通过状态管理当前主题,并在组件中应用对应的样式。 使用CSS变量实现主题切换 CSS变量(自定义属性)是实…

vue实现关键词轮播

vue实现关键词轮播

Vue 实现关键词轮播 基础实现方案 使用 Vue 的 v-for 和 setInterval 实现基础轮播效果: <template> <div class="keyword…

vue实现下拉刷新组件

vue实现下拉刷新组件

实现下拉刷新组件的核心思路 下拉刷新功能通常通过监听触摸事件、滚动位置和动画效果实现。Vue中可以利用自定义指令或封装组件完成,以下为两种常见实现方式。 基于自定义指令的实现 创建指令监听触摸事件,…

vue实现遮罩

vue实现遮罩

Vue 实现遮罩层的方法 在 Vue 中实现遮罩层可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-show 或 v-if 控制显示 通过 Vue 的指令动态控制遮罩层的显示与隐藏。…

vue实现表白

vue实现表白

Vue 实现表白页面 使用 Vue 可以快速创建一个动态、交互式的表白页面。以下是一个简单的实现方案: 基础结构 创建一个 Vue 项目或单文件组件,包含以下核心部分: <template&…

vue实现开关

vue实现开关

Vue 实现开关组件的方法 使用原生HTML和Vue数据绑定 通过v-model绑定复选框的checked状态,结合CSS样式实现开关效果: <template> <label…