当前位置:首页 > VUE

vue 实现语音播报

2026-01-18 23:47:03VUE

实现语音播报的基本方法

在Vue中实现语音播报可以通过Web Speech API完成,该API提供了语音合成(SpeechSynthesis)功能。以下是具体实现步骤:

创建语音播报组件

新建一个Vue组件(如VoiceSpeaker.vue),核心代码如下:

<template>
  <button @click="speak">播放语音</button>
</template>

<script>
export default {
  methods: {
    speak() {
      const utterance = new SpeechSynthesisUtterance();
      utterance.text = '这是要播报的内容';
      utterance.lang = 'zh-CN'; // 设置中文语音
      utterance.rate = 1; // 语速 (0.1-10)
      utterance.pitch = 1; // 音高 (0-2)

      window.speechSynthesis.speak(utterance);
    }
  }
}
</script>

浏览器兼容性处理

不同浏览器对Web Speech API的支持程度不同,需要添加兼容性检查:

mounted() {
  if (!('speechSynthesis' in window)) {
    console.warn('当前浏览器不支持语音合成API');
  }
}

语音队列管理

避免连续播报时语音重叠,可以添加队列管理:

data() {
  return {
    speechQueue: []
  }
},
methods: {
  addToQueue(text) {
    this.speechQueue.push(text);
    if (this.speechQueue.length === 1) {
      this.processQueue();
    }
  },
  processQueue() {
    if (this.speechQueue.length === 0) return;

    const utterance = new SpeechSynthesisUtterance(this.speechQueue[0]);
    utterance.onend = () => {
      this.speechQueue.shift();
      this.processQueue();
    };
    speechSynthesis.speak(utterance);
  }
}

语音控制功能

添加暂停、继续和停止功能:

methods: {
  pauseSpeech() {
    window.speechSynthesis.pause();
  },
  resumeSpeech() {
    window.speechSynthesis.resume();
  },
  cancelSpeech() {
    window.speechSynthesis.cancel();
    this.speechQueue = [];
  }
}

多语言支持

通过检测浏览器支持的语音列表实现多语言选择:

data() {
  return {
    voices: [],
    selectedVoice: null
  }
},
mounted() {
  speechSynthesis.onvoiceschanged = () => {
    this.voices = speechSynthesis.getVoices();
    this.selectedVoice = this.voices.find(voice => 
      voice.lang.includes('zh') || voice.lang.includes('en')
    );
  };
}

注意事项

  • 某些浏览器需要用户交互(如点击事件)后才能触发语音播报
  • 移动端浏览器可能对连续语音播报有限制
  • 语音质量取决于操作系统安装的语音引擎
  • 在组件销毁时应该取消所有语音:
beforeDestroy() {
  window.speechSynthesis.cancel();
}

完整组件示例

<template>
  <div>
    <input v-model="textToSpeak" placeholder="输入播报内容">
    <button @click="speak">播放</button>
    <button @click="pauseSpeech">暂停</button>
    <button @click="resumeSpeech">继续</button>
    <button @click="cancelSpeech">停止</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      textToSpeak: '',
      voices: [],
      selectedVoice: null
    }
  },
  mounted() {
    if ('speechSynthesis' in window) {
      speechSynthesis.onvoiceschanged = () => {
        this.voices = speechSynthesis.getVoices();
        this.selectedVoice = this.voices.find(voice => 
          voice.lang.includes('zh') || voice.lang.includes('en')
        );
      };
    }
  },
  methods: {
    speak() {
      if (!this.textToSpeak.trim()) return;

      const utterance = new SpeechSynthesisUtterance(this.textToSpeak);
      utterance.voice = this.selectedVoice;
      utterance.lang = 'zh-CN';
      window.speechSynthesis.speak(utterance);
    },
    pauseSpeech() {
      window.speechSynthesis.pause();
    },
    resumeSpeech() {
      window.speechSynthesis.resume();
    },
    cancelSpeech() {
      window.speechSynthesis.cancel();
    }
  },
  beforeDestroy() {
    window.speechSynthesis.cancel();
  }
}
</script>

vue 实现语音播报

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

相关文章

vue实现表格

vue实现表格

Vue 实现表格的方法 在 Vue 中实现表格可以通过多种方式完成,以下是几种常见的方法: 使用原生 HTML 表格 Vue 可以直接渲染原生 HTML 表格,通过 v-for 动态生成表格行和列。…

vue实现拼音搜索

vue实现拼音搜索

实现拼音搜索的基本思路 拼音搜索的核心是将中文转换为拼音,并在用户输入拼音时匹配对应的中文内容。Vue中可以通过集成拼音转换库(如pinyin或pinyin-pro)实现这一功能。 安装拼音转换库…

vue实现录音文件播放

vue实现录音文件播放

使用 Vue 实现录音文件播放 准备工作 确保项目中已安装必要的依赖,如 vue-audio-recorder 或原生 Web Audio API。录音文件播放通常涉及录音、存储和播放三个核心环节。…

vue实现字母添加排序

vue实现字母添加排序

实现字母添加排序的方法 在Vue中实现字母添加排序功能,可以通过以下步骤完成: 创建Vue实例并定义数据 new Vue({ el: '#app', data: { letters…

vue实现钟表

vue实现钟表

使用 Vue 实现动态钟表 以下是一个基于 Vue 3 的动态钟表实现方案,包含时分秒指针和数字时间显示。 模板部分 <template> <div class="clock-…

vue实现弹窗

vue实现弹窗

Vue 实现弹窗的常见方法 使用组件化方式封装弹窗 创建一个独立的弹窗组件(如 Modal.vue),通过 v-if 或 v-show 控制显示隐藏: <template> <…