最初尝试使用讯飞语音合成方式,能获取到语音数据,但是数据是base64格式的,在安卓端无法播放,网上有说通过转成blob格式的url可以播放,但是uniapp不支持转换的api;于是后面又想其他办法,使用安卓插件播报原生安卓语音播报插件 - DCloud 插件市场
方案一(讯飞语音合成)
1.在讯飞后台注册登录获得APPID等信息 讯飞语音合成控制台
2.在项目根目录使用npm安装crypto-js
npm i crypto-js
3.新建xunfei.js文件,替换讯飞的APPID等3个配置
// 讯飞语音合成api文档 https://www.xfyun.cn/doc/tts/online_tts/API.html
import CryptoJS from 'crypto-js'
import {Base64} from './base64.js';
const APPID = "替换自己的APPID";
const API_SECRET = "替换自己的API_SECRET";
const API_KEY = "替换自己的API_KEY";
const URL = "wss://tts-api.xfyun.cn/v2/tts"
const HOST = "tts-api.xfyun.cn"
function getWssUrl(date) {
date = date||(new Date().toGMTString())
let signatureOrigin = `host: ${HOST}\ndate: ${date}\nGET /v2/tts HTTP/1.1`
let signatureSha = CryptoJS.HmacSHA256(signatureOrigin, API_SECRET)
let signature = CryptoJS.enc.Base64.stringify(signatureSha)
let authorizationOrigin = `api_key="${API_KEY}", algorithm="hmac-sha256", headers="host date request-line", signature="${signature}"`
let authStr = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(authorizationOrigin))
return URL + "?authorization=" + authStr + "&date=" + date + "&host=" + HOST
}
const wssUrl=getWssUrl()
// console.log("讯飞语音合成wssUrl",wssUrl)
export const speak = (word) => {
if (!word) {return}
const socketTask=uni.connectSocket({
url: wssUrl,
success: res=> {
console.log("讯飞websocket连接成功",res);