接到文字转语音的工作,探索了三种实现方案。
一、科大讯飞的API文档
语音合成(流式版)WebAPI 文档 | 讯飞开放平台文档中心
基础版:150万次访问,收费4000多。
二、speechSynthesis
<template>
<div>
<button @click="playVoice">playVoice</button>
</div>
</template>
<script setup lang="ts">
const synth = window.speechSynthesis //创建语音
const msg = new SpeechSynthesisUtterance() //文本实例
const playVoice = () => {
handleSpeak('树上有香蕉,请到3号科室就诊') // 传入需要播放的文字
}
// 语音播报的函数
const handleSpeak = (text) => {
msg.text = text // 文字内容: 树上有香蕉,请到3号科室就诊
msg.lang = 'zh-CN' // 使用的语言:中文
msg.volume = 2 // 声音音量:1
msg.rate = 1 // 语速:1
msg.pitch = 1 // 音高:1
synth.speak(msg) // 播放
setTimeout(() => {
handleStop()
}, 10000)
}
// 语音停止
const handleStop = () => {
synth.cancel()
}
</script>
SpeechSynthesisUtterance
- text属性,类型为DOMString
该属性指定该话语要合成和朗读的文本。这可以是纯文本,也可以是完整的、格式良好的 SSML 文档。最大长度, 32,767 个字符。
- lang属性,类型为DOMString
此属性使用有效的 BCP 47 语言标签指定话语的语音合成的语言。[BCP47]如果未设置,则在获取脚本时仍保持未设置状态,但将默认使用html 文档根元素和关联层次结构的语言。当输入请求打开与识别服务的连接时,将计算并使用此默认值。
- voice属性,类型为SpeechSynthesisVoice,可为 null
该属性指定 Web 应用程序希望使用的语音合成语音。当SpeechSynthesisUtterance创建对象时,该属性必须初始化为 null。如果在方法调用时speak(),此属性已设置为SpeechSynthesisVoice返回的对象之一getVoices(),则用户代理必须使用该语音。如果在方法调用时此属性未设置或为空speak(),则用户代理必须使用用户代理默认语音。用户代理默认语音应该支持当前语言(请参阅参考资料lang),并且可以是本地或远程语音服务,并且可以通过用户代理提供的界面(例如浏览器配置参数)合并最终用户的选择。
- volume属性,类型为float
该属性指定话语的说话音量。它的范围在 0 和 1 之间(包括 0 和 1),其中 0 是最低音量,1 是最高音量,默认值为 1。如果使用 SSML,则该值将被标记中的 prosody 标签覆盖。
- rate属性,类型为float
该属性指定话语的语速。它与该语音的默认速率相关。 1是语音合成引擎或特定语音支持的默认速率(应对应于正常说话速率)。 2 的速度是原来的两倍,0.5 的速度是原来的一半。严格禁止低于 0.1 或高于 10 的值,但语音合成引擎或特定语音可能会进一步限制最小和最大速率,例如,即使您指定大于 3 的值,特定语音实际上可能不会比正常说话速度快 3 倍. 如果使用 SSML,则该值将被标记中的 prosody 标签覆盖。
- pitch属性,类型为float
该属性指定说话的音高。它的范围在 0 到 2 之间(包括 0 和 2),其中 0 是最低音高,2 是最高音高。 1对应于语音合成引擎或特定语音的默认音高。语音合成引擎或语音可能进一步限制最小和最大速率。如果使用 SSML,则该值将被标记中的韵律标签覆盖。
三、speak-tts 的node包