Vue.js实现文本转语音(TTS)功能的完整代码

 更新时间:2026年04月21日 08:25:01   作者:学亮编程手记  
本文介绍了使用Vue.js实现文本转语音(TTS)的几种方案,包括直接使用Web Speech API、集成第三方Vue库、调用云端API、使用离线TTS和构建桌面应用,每种方案都有各自优缺点,适用于不同场景,需要的朋友可以参考下

使用 Vue.js 完全能实现文本转语音(TTS)。实现起来也比较简单,主要通过浏览器的原生 API 或集成第三方服务,这里介绍几种常见的方法。

方案一:最直接的方法——使用浏览器原生 Web Speech API

这是最直接、无需额外依赖的方案。它直接调用浏览器内置的语音合成引擎。优点是简单快速,缺点是语音质量和音色由操作系统和浏览器决定,可能比较单一。

实现思路

  1. 在 Vue 组件中,创建一个 SpeechSynthesisUtterance 实例,并传入要朗读的文本。
  2. 通过其属性,可以配置语速(rate)、音调(pitch)、音量(volume)和语言(lang)。
  3. 最后,调用 window.speechSynthesis.speak() 方法来播放语音。

示例代码

<template>
  <div>
    <textarea v-model="text" placeholder="输入要转换的文字"></textarea>
    <button @click="speak">播放语音</button>
    <button @click="stop">停止播放</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      text: '',
      utterance: null,
      voices: [],
    };
  },
  mounted() {
    // 获取可用的语音列表并筛选出中文语音
    this.voices = window.speechSynthesis.getVoices();
    const zhVoice = this.voices.find(v => v.lang.includes('zh'));
    if (zhVoice) {
      this.selectedVoice = zhVoice;
    }
  },
  methods: {
    speak() {
      if (!this.text.trim()) return;
      // 创建一个新的语音请求对象
      this.utterance = new SpeechSynthesisUtterance(this.text);
      // 配置语音参数
      this.utterance.lang = 'zh-CN'; // 设置语言为中文
      this.utterance.rate = 1;       // 语速,范围 0.1 到 10
      this.utterance.pitch = 1;      // 音调,范围 0 到 2
      this.utterance.volume = 1;     // 音量,范围 0 到 1
      if (this.selectedVoice) {
        this.utterance.voice = this.selectedVoice;
      }
      // 播放语音
      window.speechSynthesis.speak(this.utterance);
    },
    stop() {
      // 停止播放
      window.speechSynthesis.cancel();
    },
  },
  beforeDestroy() {
    // 组件销毁前停止播放
    window.speechSynthesis.cancel();
  },
};
</script>

方案二:更省心的选择——使用成熟的 Vue 语音合成库

如果想用更丰富的功能,可以集成一些专门为 Vue 设计的 TTS 库,比如 speak-ttsvue-text-to-speech。优点是封装好、功能多,能弥补原生API的一些短板。

speak-tts 集成示例

// 1. 安装:npm install speak-tts
import Speech from 'speak-tts';

export default {
  data() {
    return {
      speech: null,
    };
  },
  mounted() {
    this.speech = new Speech();
    // 初始化并配置语音参数
    this.speech.init({
      volume: 1,
      lang: 'zh-CN',
      rate: 1,
      pitch: 1,
      // 可以选择特定的声音,如 'Microsoft Yaoyao - Chinese (Simplified, PRC)'
      // voice: 'Microsoft Yaoyao - Chinese (Simplified, PRC)',
    }).then(() => {
      console.log('语音引擎已就绪');
    }).catch(e => {
      console.error('初始化失败', e);
    });
  },
  methods: {
    speak() {
      this.speech.speak({
        text: '你的文本内容',
      }).then(() => {
        console.log('播放成功');
      }).catch(e => {
        console.error('播放失败', e);
      });
    },
  },
};

方案三:追求高质量和稳定性——调用云端 API

如果对音质、语种和稳定性有更高要求,可以接入云服务商的专业 TTS 服务(如百度AI、微软Azure、阿里云等)。优点是音质自然、稳定,缺点是依赖网络、有使用成本,集成稍复杂。通常需要先在后端获取 access_token,然后前端调用云端 API 获取音频并播放。

方案四:处理敏感数据——使用本地离线 TTS

对于内部系统或对数据隐私要求极高的场景,可以选择离线 TTS 方案,例如 tts-vue。它能在本地完成转换,无需联网,数据安全无泄露风险。但本地引擎的语音质量可能不如云端,且需要下载语音包(单个约200-500MB)。

方案五:构建桌面应用——将 TTS 封装成客户端

如果需要构建独立于浏览器的桌面应用,可以使用 Electron 或 Tauri 将 Vue 项目打包。这样就能调用更底层的系统语音API,如微软的Speech SDK,获得更好的性能和稳定性。

总结与选型建议

可以根据你的具体项目需求,参考下面的表格来选择最适合的方案。

实现方案优点缺点推荐场景
Web Speech API无需安装,代码简单,免费语音质量依赖系统,功能较单一简单的、非核心的语音提示
第三方 Vue 库功能丰富,使用方便,免费本质上仍依赖Web Speech API,无法解决其固有限制追求开发效率的中小型项目
云端 API音质最佳,语言/音色选择多,稳定需付费,依赖网络,集成稍复杂对音质和体验要求高的商业产品
离线 TTS数据安全,无需网络,隐私性强语音质量一般,需下载语音包,占用存储处理敏感数据的内部系统
桌面应用性能和稳定性最好,可深度集成开发成本高,需安装作为独立桌面软件发布的专业产品

注意事项

  • 浏览器兼容性:虽然大多数现代浏览器都支持,但最好在开发前检查一下,或对旧版浏览器做降级处理。
  • 用户授权:某些浏览器(尤其是移动端)可能需要用户与页面互动后才能播放语音。

以上就是Vue.js实现文本转语音(TTS)功能的完整代码的详细内容,更多关于Vue文本转语音(TTS)功能的资料请关注脚本之家其它相关文章!

相关文章

  • vue中install方法介绍

    vue中install方法介绍

    这篇文章主要给大家分享了 vue中install方法介绍,vue提供install可供我们开发新的插件及全局注册组件等,感兴趣的小伙伴请和小编一起进入文章了解具体内容吧

    2021-11-11
  • 在uni-app中使用element-ui的方法与报错解决

    在uni-app中使用element-ui的方法与报错解决

    我们在开web开发的时候,经常会使用到element或者uview-ui,下面这篇文章主要给大家介绍了关于在uni-app中使用element-ui的方法与报错解决的相关资料,需要的朋友可以参考下
    2022-04-04
  • vitejs预构建理解及流程解析

    vitejs预构建理解及流程解析

    这篇文章主要为大家介绍了vitejs预构建理解及流程解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Vue vant使用ImagePreview实现预览图片

    Vue vant使用ImagePreview实现预览图片

    这篇文章主要介绍了Vue vant使用ImagePreview实现预览图片,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • vue 页面加载进度条组件实例

    vue 页面加载进度条组件实例

    下面小编就为大家分享一篇vue 页面加载进度条组件实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • elementUI多选框反选的实现代码

    elementUI多选框反选的实现代码

    这篇文章主要介绍了elementUI多选框反选的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 前端vue a链接下载文件失败的问题(未发现文件)

    前端vue a链接下载文件失败的问题(未发现文件)

    这篇文章主要介绍了前端vue a链接下载文件失败的问题(未发现文件),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Element中Select选择器的实现

    Element中Select选择器的实现

    本文主要介绍了Element中Select选择器的实现,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • vue parseHTML 函数拿到返回值后的处理源码解析

    vue parseHTML 函数拿到返回值后的处理源码解析

    这篇文章主要为大家介绍了vue parseHTML 函数拿到返回值后的处理源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Vue3实现计算属性的代码详解

    Vue3实现计算属性的代码详解

    计算属性对于前端开发来说算是经常使用的一个能力了,本文将从代码层面来给大家介绍下Vue3是如何实现计算属性的,需要的朋友可以参考下
    2023-07-07

最新评论