Skip to content

警报提示文字太单薄了!3种前端TTS实现方案,附可直接运行源码,覆盖90%朗读场景

之前开发的鸡场科技大屏项目已经增加了雷达扫描和扩撒墙效果,但是还缺一个强有力的提示信息效果。

其实屏幕闪烁那种效果挺不错的,类似于游戏界面残血时候的效果,但是时间关系没做上去,回头做一下。

今天先搞一下语音提示效果。

实现方案

一般语音提示方案基本上两种:

  • 提前录制语音包
  • TTS文字转语音

这里简单探索了一下前端文字转语音(TTS),整理三套最实用的前端TTS实现方案。

前两种直接附完整可运行Demo代码,复制到HTML文件打开就能用,第三种适合追求高音质、定制化音色的场景,全程干货,新手也能快速上手。

浏览器原生 Speech API

Web Speech API 是浏览器内置的标准语音合成接口,属于W3C标准规范,纯前端本地运行。

无需依赖任何第三方库、无需联网、不调用后端接口,也不需要申请任何密钥。

核心原理是通过浏览器自带的语音合成引擎,将文本字符串转化为语音流,直接调用设备扬声器播放,全程在本地完成,不产生任何网络请求,隐私性和安全性拉满。

兼容性方面 Chrome、Edge、Safari、Firefox等现代主流浏览器全面支持,移动端浏览器也基本都适配。

并且支持调节语速、音调、音量、语言类型,适配中英文等多语种。

实现代码

html
<!DOCTYPE html>
<html lang="zh-CN">
<body>
  <h3>浏览器原生TTS朗读</h3>
  <textarea id="ttsText" rows="5" placeholder="请输入要朗读的文字内容">
    你好,这是浏览器原生Web Speech API实现的文字转语音功能,全程本地运行,无需联网,支持中英文朗读,还能调节语速和音调,非常适合轻量级前端项目使用。
  </textarea>
  <br/>
  <button onclick="startSpeak()">开始朗读</button>
  <button onclick="stopSpeak()">停止朗读</button>

  <script>
    // 获取语音合成实例
    const synth = window.speechSynthesis;
    // 防止重复朗读
    let currentUtter;

    function startSpeak() {
      const text = document.getElementById('ttsText').value.trim();
      if(!text) return alert('请输入朗读内容');

      // 终止当前正在朗读的语音
      if(synth.speaking) {
        synth.cancel();
      }

      // 创建朗读实例
      currentUtter = new SpeechSynthesisUtterance(text);
      // 配置参数
      currentUtter.lang = 'zh-CN'; // 语言:中文
      currentUtter.rate = 1; // 语速 0.1-10,数值越大语速越快
      currentUtter.pitch = 1; // 音调 0-2
      currentUtter.volume = 1; // 音量 0-1

      // 启动朗读
      synth.speak(currentUtter);
    }

    // 停止朗读
    function stopSpeak() {
      if(synth.speaking) {
        synth.cancel();
      }
    }
  </script>
</body>
</html>

开源前端 TTS 库

这类开源前端TTS库,本质是对浏览器原生Web Speech API的深度封装,同时兼容部分浏览器的语音差异,优化了中文发音效果和调用逻辑,免去原生API的繁琐配置步骤。

以最常用的ResponsiveVoice.js为例,通过CDN引入库文件后,一行代码即可实现文本朗读,底层还是调用浏览器本地语音引擎,部分扩展版本也支持对接云端语音接口,兼顾了易用性和兼容性。

相比原生API,开源库做了音色分类、语言适配、异常处理等优化,中文朗读的流畅度和清晰度更优,还预设了男女声、粤语等多种音色,调用逻辑更简洁,适合快速开发。

实现代码

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <!-- 引入开源库CDN(备用镜像,防止原链接失效) -->
  <script src="https://cdn.jsdelivr.net/npm/responsivevoice@1.0.0/responsivevoice.min.js"></script>
</head>
<body>
  <h3>开源TTS库 文字转语音</h3>
  <textarea id="voiceText" rows="5" placeholder="请输入要朗读的文字内容">
    这是基于ResponsiveVoice开源库实现的文字转语音功能,发音更自然,支持中文女声,调用方式超级简单,适合快速开发各类需要语音朗读的前端页面。
  </textarea>
  <br/>
  <button onclick="playVoice()">播放朗读</button>
  <button onclick="stopVoice()">停止朗读</button>

  <script>
    // 先判断库是否加载完成,防止未初始化就调用
    function checkResponsiveVoiceLoaded() {
      return typeof responsiveVoice !== 'undefined' && responsiveVoice.available;
    }

    // 播放语音
    function playVoice() {
      // 第一步:校验库是否加载成功
      if(!checkResponsiveVoiceLoaded()) {
        alert('ResponsiveVoice库加载失败,请检查网络或更换CDN链接');
        return;
      }
      const text = document.getElementById('voiceText').value.trim();
      if(!text) return alert('请输入朗读内容');

      // 核心朗读代码,支持自定义语速、音量、音调
      responsiveVoice.speak(
        text,
        "Chinese Female", // 音色:中文女声,可切换Chinese Male/US English Female
        {
          rate: 1, // 语速
          volume: 1, // 音量
          pitch: 1, // 音调
          onstart: () => console.log('开始朗读'),
          onend: () => console.log('朗读完成'),
          onerror: (err) => console.error('朗读报错:', err)
        }
      );
    }

    // 停止语音
    function stopVoice() {
      if(checkResponsiveVoiceLoaded() && responsiveVoice.isPlaying()) {
        responsiveVoice.cancel();
      }
    }
  </script>
</body>
</html>

第三方TTS接口(前端+后端联动)

第三方TTS接口属于云端语音合成方案,主流服务商有阿里云智能语音、腾讯云语音合成、百度AI、科大讯飞等。

实现上分为前后端联动两种模式:

  • 后端对接:后端接收前端传递的文本内容,携带服务商提供的API密钥请求云端TTS接口,云端服务器将文本合成为MP3、WAV等音频文件,返回音频URL或二进制流,后端再将音频地址返回给前端,前端通过audio标签播放。

  • 前端直连(需跨域配置):前端直接请求第三方TTS接口,获取音频流后播放,适合轻量级项目,但安全性较低,一般推荐后端对接模式,隐藏密钥更安全。

调用第三方音质极致自然,接近真人发音:支持情感朗读、多风格音色、方言、童声等,远超本地浏览器引擎效果。

并且功能丰富,支持语速、停顿、多音字矫正、背景音乐合成、语音转字幕等高级功能。

缺点就是花钱

总结

追求零成本、离线使用、轻量级项目:选原生Web Speech API

追求易用性、中文发音更优、快速开发:选开源TTS库

追求真人音质、高级功能、企业级项目:选第三方TTS接口

不过第三方TTS接口大多有免费调用额度,超出后按量计费,适合对音质有高要求、正式商用的项目。

我还是建议个人轻量级项目优先选前两种免费方案。