跳转到内容

文字转语音播放

刀刀

1/8/2025

0 字

0 分钟

文字语音播放功能最主要的是转为音频数据给 aduio 标签播放。

文字转音频数据

主要有两个方法:

  • web api 兼容性问题
  • 第三方库,以讯飞为例

主要实现步骤为:

  1. 浏览器把文本传给服务器,服务器通过 web socket 调用讯飞相应API
  2. 讯飞返回 bytes 给服务器,服务器转 base64 给浏览器,浏览器赋值给 aduiosrc

注意:这里不可以直接让浏览器把文本传给讯飞第三方调用,原因有两个:

  1. 会造成跨域问题
  2. 调用第三方接口都需要 APPID、APP_Select、Ouath2,这些放到客户端会有安全隐患

优化

一段文本内容可能会很长,一次性传过去等待音频转换完毕可能会需要一段时间,如何优化也是重中之重。可以从以下几个方面入手。

断句

把一个长文本通过标点符号分割,使用栈来接收,如果遇到双引号或者双括号这种还需要去通过上下文去分割句子。

并发

从栈中三个三个的传过去,等待执行完毕后再传后续三个。而并发的数量也可以自行控制或通过网络速度来控制。

缓存

有一些相同的文字可以设置缓存减少接口请求消耗,而 localstorage 需要键和值。值为 base64 ,键为相应的文字,通过转 md5 来控制文字长度相等。