import CryptoJS from 'crypto-js'
import { fromByteArray } from 'base64-js'
import { Buffer } from 'buffer'
const config = {
hostUrl: 'wss://tts-api.xfyun.cn/v2/tts',
host: 'tts-api.xfyun.cn',
appid: '',
apiSecret: '',
apiKey: '',
uri: '/v2/tts'
}
function getAuthStr(date) {
let signatureOrigin = `host: ${config.host}\ndate: ${date}\nGET ${config.uri} HTTP/1.1`
let signatureSha = CryptoJS.HmacSHA256(signatureOrigin, config.apiSecret)
let signature = CryptoJS.enc.Base64.stringify(signatureSha)
let authorizationOrigin = `api_key="${config.apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${signature}"`
let authStr = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(authorizationOrigin))
return authStr
}
const readText = ()=>{
if(!tip){
return
}
let date = (new Date().toUTCString())
let wssUrl = config.hostUrl + "?authorization=" + getAuthStr(date) + "&date=" + date + "&host=" + config.host
let ws = new WebSocket(wssUrl)
console.log(ws)
//连接建立完毕,读取数据识别
let buff = []
let nowAudio = 0;
let innerAudioContext = uni.createInnerAudioContext();
ws.addEventListener('open',()=>{
console.log("websocket connect!")
// send(text) //传输数据
let frame = {
"common": {
"app_id": config.appid
},
// 填充business
"business": {
"aue": "lame",
"auf": "audio/L16;rate=16000",
"vcn": "xiaoyan",
"tte": "UTF8",
"sfl": 1
},
// 填充data
"data": {
"text": Buffer.from(tip).toString('base64'),
"status": 2
}
}
ws.send(JSON.stringify(frame))
ws.addEventListener('message',(data,err)=>{
if(err){
return;
}
let res_data = JSON.parse(data.data)
// console.log(res_data.data)
// 解码音频数据
let audioData = res_data.data.audio;
buff.push(audioData)
if (res_data.code == 0 && res_data.data.status == 2) {
//状态为2才表示合成结束,需要合并
ws.close()
playAudio(0); //开始播放音频
}
})
})
function playAudio(cur) {
if (cur >= buff.length) {
innerAudioContext.stop()
return;
}
innerAudioContext.src = 'data:audio/mp3;base64,' + buff[cur];
innerAudioContext.onCanplay(()=>{
innerAudioContext.play()
innerAudioContext.onEnded(()=>{
playAudio(cur+1); //递归调用下一次播放
})
})
}
}
uniapp对接科大讯飞实现语音合成
最新推荐文章于 2024-05-14 17:29:52 发布