web网页h5想要实现文本转换语音,如果使用阿里云的语音合成服务,
可以使用这个文档介绍的api:
https://help.aliyun.com/zh/isi/developer-reference/restful-api-3
接口地址: 上海:nls-gateway-cn-shanghai.aliyuncs.com/stream/v1/tts 北京:nls-gateway-cn-beijing.aliyuncs.com/stream/v1/tts 深圳:nls-gateway-cn-shenzhen.aliyuncs.com/stream/v1/tts
在web网页跨域使用阿里云语音合成的技巧
浏览器是有同源安全策略的限制的,如果你先使用 ajax 请求这些借口,你是没法使用阿里云的语音合成http接口。
但是有个技巧接近跨域问题:
拼接url,url中含有 text 是要转换的文本,token从自己的业务服务器获取,
构造一个url: nls-gateway-cn-shanghai.aliyuncs.com/stream/v1/tts?appkey=11&text=测试@token=myToken
把url放在audio 标签的 src 属性中,就可以播放了。
而且,使用token请求阿里云tts,也不会泄露公司的key和私钥这些重要信息。
这样解决了浏览器的跨域问题,因为浏览器对 audio src音频来自不同域名,是没限制的,浏览器只是限制 ajax 请求的跨域问题。
浏览器对 js/css 来自不同域名,也是没什么限制的,所以有一直跨域的方式是 jsonp,通过加载外部域名的js 来实现跨域交互。
除了 Audio src 方式解决跨域,另一个方法,就是使用阿里云的 WebSocket 实现流式的语音识别。但是 ws 协议的对接,带来的问题是:播放mp3/wav等音频片段的分片,在iOS是有兼容问题,安卓/PC使用 MediaSource 播放音频,但是 MediaSource 播放音频,在iOS上,有兼容问题。
对了 MiniMax 这家公司的文本转换语音的http接口,是支持 跨域调用的,直接在浏览器可使用,也还不错。
阿里云语音合成的http 接口,能通过技巧解决跨域问题,但是腾讯云的语音合成接口,无法使用这个技巧。
原因参考文档: https://cloud.tencent.com/document/product/1073/37995
tts.tencentcloudapi.com 接口请求后,
腾讯云返回的数据是json,不是mp3文件流。
阿里云的返回是mp3文件流,Audio标签能直接播放,所以,能使用这个技巧。
豆包、火山的 语音合成接口 https://openspeech.bytedance.com/api/v1/tts 也不支持跨域调用。
参考文档, 大模型语音合成API: https://www.volcengine.com/docs/6561/1257584?lang=zh