小程序语音之文字合成语音

51 篇文章 0 订阅
8 篇文章 0 订阅

步骤:
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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Misha韩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值