前端实现文字转语音播放

1,732 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

前一阵遇到了一个关于语音播放的需求,大致功能是读出页面需要显示的文本内容,并且可以控制播放与暂停。下面总结一下能够实现文字转语音播放的几种方案。

1、Web Speech API

它可以使 Web 应用能够处理语音数据, Web Speech API 提供了多个 API ,可以进行语音识别以及语音合成等,可支持的接口列表如下:

image.png

具体的原理细节可参考文档:Web Speech API

实现方式

  1. 创建文本实例 msg ,用来配置语音播放相关的参数

  2. 创建语音 speech ,用于调用播放、暂停等方法

    let msg = new SpeechSynthesisUtterance();
    let speech = window.speechSynthesis;
    
  3. 参数配置

    • text —— 朗读的文本内容
    • pitch —— 朗读的音调,默认值:1(范围0~2,值越大越尖锐,越低越低沉)
    • rate —— 朗读的速度,默认值:1(范围0.1-10,值越大语速越快,越小语速越慢)
    • volume —— 朗读的音量
    • lang —— 朗读的语言
    msg.text = "长风破浪会有时,直挂云帆济沧海"
    msg.pitch = 1
    msg.rate = 1
    msg.volume = 10
    msg.lang = 'zh-CN' 
    
  4. 方法调用

  • 播放

    参数是前面定义的文本实例

    speech.speak(msg)
    
  • 暂停

    speech.pause()
    
  • 继续

    speech.resume()
    
  • 结束/取消

    speech.cancel()
    
  1. 切换语言 如果想要配置动态切换语言的功能,可以通过 getVoices() 方法获取,一些简单的语言需求基本都可以满足
voices = speech.getVoices()

获取到的 voices 对象如下: image.png

2、speak-tts

安装及使用:

npm install speak-tts

import Speech from 'speak-tts'

// 使用
const speech = new Speech();
speech.setLanguage('zh-CN');
speech.init()
speech.speak({text:"长风破浪会有时,直挂云帆济沧海"}).then(()=>{
    // 朗读完成
})

可配置项: image.png

其它操作可参考 speak-tts 文档

3、百度文字转语音 API

如果应用场景比较简单,前两种就可以满足使用。百度提供的接口使用场景更丰富一些,支持手机应用语音交互、语音内容分析、机器人对话等等,具体操作方法可参考官方文档: ai.baidu.com/ai-doc/SPEE…