步骤:
1、获取百度语音token
2、将文字合成语音,获取url
3、播放url
一、获取token
getBaiDuYuYinAccessToken(body) {
return doRequest(`https://aip.baidubce.com/oauth/2.0/token`, 'POST', body, false, false, {
'content-type': 'application/x-www-form-urlencoded'
})
}
/**
* 获取语音token
* @returns {Promise<void>}
*/
async getBaiDuYuYinAccessTokenData() {
const { apiKey, secretKey, grantType } = BaiDuYuYin
const res = await baiDuYuYinService.getBaiDuYuYinAccessToken({
grant_type: grantType,
client_id: apiKey,
client_secret: secretKey
})
const { access_token } = res
useSetStorageSync('baiDuYuYinAccessToken', access_token)
useSetStorageSync('baiDuYuYinAccessTokenTime', new Date().getTime()) // 用于设置token过期
}
/**
* 初始化语音
*/
getBaiDuYuYinAccessToken() {
const baiDuYuYinAccessToken = useGetStorageSync('baiDuYuYinAccessToken') || ''
if (!baiDuYuYinAccessToken) {
this.getBaiDuYuYinAccessTokenData()
} else {
const tokenTime = useGetStorageSync('baiDuYuYinAccessTokenTime')
const limitDay = new Date(parseInt(new Date().getTime() - tokenTime) * 1000).getDay()
if (limitDay > 28) { // token28天过期重新获取
this.getBaiDuYuYinAccessTokenData()
}
}
}
二、将文字合成语音,获取url
用到的参数:
const params = {
tex: encodeURIComponent(encodeURIComponent(`查询到您已到达预约地点, 请从${enterStr}入口进入`)),
tok: baiDuYuYinAccessToken,
cuid: baiDuYuYinAccessToken,
ctp: 1,
lan: 'zh'
}
获取url的方法:
1、拼接
const url = `http://tsn.baidu.com/text2audio?tex=${params.tex}&tok=${params.tok}&cuid=${params.cuid}&ctp=${params.ctp}&lan=${params.lan}`
2、通过百度api
/**
* 合成语音
* @param body
*/
composeBaiDuYuYinVoice(body) {
return doRequest(`http://tsn.baidu.com/text2audio`, 'GET', body)
}
const res = await baiDuYuYinService.composeBaiDuYuYinVoice({
tex: encodeURIComponent(encodeURIComponent('百度你好')),
tok: baiDuYuYinAccessToken,
cuid: baiDuYuYinAccessToken,
ctp: 1,
lan: 'zh'
})
console.log('语音合成结果', res)
结果如下:
方法2获取的结果需要转成url
三、播放
const audio = Taro.createInnerAudioContext()
audio.autoplay = true
audio.src = url // url为步骤二中的结果
audio.play()