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 3中使用OpenLayers读取WKB数据并显示图形效果

    在Vue 3中使用OpenLayers读取WKB数据并显示图形效果

    WKB作为一种紧凑的二进制格式,在处理和传输空间数据时具有明显优势,本文介绍了如何在Vue 3中使用OpenLayers读取WKB格式的空间数据并显示图形,感兴趣的朋友一起看看吧
    2024-12-12
  • Vue编译报错内存溢出问题解决方式

    Vue编译报错内存溢出问题解决方式

    这篇文章主要为大家介绍了Vue编译报错内存溢出问题解决方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Vue打包后页面出现空白解决办法

    Vue打包后页面出现空白解决办法

    本文主要介绍了Vue打包后页面出现空白解决办法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • vue elementUI实现自定义正则规则验证

    vue elementUI实现自定义正则规则验证

    本文主要介绍了vue elementUI实现自定义正则规则验证,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • vue2项目使用sass的示例代码

    vue2项目使用sass的示例代码

    本篇文章主要介绍了vue项目使用sass的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 解决axios post 后端无法接收数据的问题

    解决axios post 后端无法接收数据的问题

    今天小编就为大家分享一篇解决axios post 后端无法接收数据的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • vue项目在env文件中设置的变量无效问题及解决

    vue项目在env文件中设置的变量无效问题及解决

    这篇文章主要介绍了vue项目在env文件中设置的变量无效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Vue声明式导航与编程式导航示例分析讲解

    Vue声明式导航与编程式导航示例分析讲解

    这篇文章主要介绍了Vue中声明式导航与编程式导航,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-11-11
  • vue-next/runtime-core 源码阅读指南详解

    vue-next/runtime-core 源码阅读指南详解

    这篇文章主要介绍了vue-next/runtime-core 源码阅读指南详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Vue3中Composition的API用法详解

    Vue3中Composition的API用法详解

    这篇文章主要为大家详细介绍了Vue3中Composition的一些常见API的用法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06

最新评论