将科大讯飞的语音合成(流式版)功能引入vue项目中

 官方并没有给出加入vue文件的案例,但是并没有那么复杂,因为官方给了js的demo

1.首先在语音合成(流式版)WebAPI 文档 | 讯飞开放平台文档中心这个链接中选择js版本的demo进行下载,下载后打开文件夹是下图这样的.

2.将其中的dist文件夹,以及example目录下的两个js文件都直接拉到vue项目的public中,(最好是放在pubilc中,方便后续在html文件中的引入)如下图所示

3.在vue项目的index.html文件中将js进行引入

4.最后在你需要提供语音播报的.vue文件中添加以下代码即可

注意:将其中的appid,api_secret,api_key等全部替换成自己的

const audioPlayer = new AudioPlayer("dist/");
let ttsWS = ''
const APPID = "你的APPID ";
const API_SECRET = "你的 API_SECRET";
const API_KEY = "你的API_KEY";
function getWebSocketUrl(apiKey, apiSecret) {
  var url = "wss://tts-api.xfyun.cn/v2/tts";
  var host = location.host;
  var date = new Date().toGMTString();
  var algorithm = "hmac-sha256";
  var headers = "host date request-line";
  var signatureOrigin = `host: ${host}\ndate: ${date}\nGET /v2/tts HTTP/1.1`;
  var signatureSha = CryptoJS.HmacSHA256(signatureOrigin, apiSecret);
  var signature = CryptoJS.enc.Base64.stringify(signatureSha);
  var authorizationOrigin = `api_key="${apiKey}", algorithm="${algorithm}", headers="${headers}", signature="${signature}"`;
  var authorization = btoa(authorizationOrigin);
  url = `${url}?authorization=${authorization}&date=${date}&host=${host}`;
  return url;
}
function encodeText(text, type) {
  if (type === "unicode") {
    let buf = new ArrayBuffer(text.length * 4);
    let bufView = new Uint16Array(buf);
    for (let i = 0, strlen = text.length; i < strlen; i++) {
      bufView[i] = text.charCodeAt(i);
    }
    let binary = "";
    let bytes = new Uint8Array(buf);
    let len = bytes.byteLength;
    for (let i = 0; i < len; i++) {
      binary += String.fromCharCode(bytes[i]);
    }
    return window.btoa(binary);
  } else {
    return Base64.encode(text);
  }
}
function connectWebSocket() {
  const url = getWebSocketUrl(API_KEY, API_SECRET);
  if ("WebSocket" in window) {
    ttsWS = new WebSocket(url);
  } else if ("MozWebSocket" in window) {
    ttsWS = new MozWebSocket(url);
  } else {
    alert("浏览器不支持WebSocket");
    return;
  }

  ttsWS.onopen = (e) => {
    audioPlayer.start({
      autoPlay: true,
      sampleRate: 16000,
      resumePlayDuration: 1000
    });
    var text = "我现在要进行测试";
    var tte = "UTF8";
    var params = {
      common: {
        app_id: APPID,
      },
      business: {
        vcn: 'aisjiuxu',
        aue: "raw",
        auf: "audio/L16;rate=16000",
        vcn: 'xiaoyan',
        speed: 50,
        volume: 50,
        pitch: 50,
        bgs: 0,
        tte,
      },
      data: {
        status: 2,
        text: encodeText(text, tte),
      },
    };
    ttsWS.send(JSON.stringify(params));
  };
  ttsWS.onmessage = (e) => {
    let jsonData = JSON.parse(e.data);
    // 合成失败
    if (jsonData.code !== 0) {
      console.error(jsonData);
      changeBtnStatus("UNDEFINED");
      return;
    }
    audioPlayer.postMessage({
      type: "base64",
      data: jsonData.data.audio,
      isLastData: jsonData.data.status === 2,
    });
    if (jsonData.code === 0 && jsonData.data.status === 2) {
      ttsWS.close();
    }
  };
  ttsWS.onerror = (e) => {
    console.error(e);
  };
  ttsWS.onclose = (e) => {
    // console.log(e);
  };
}
connectWebSocket();

还有一个最重要的问题!!!   如何按上述操作没有声音的话

运行后一定要修改页面的声音进行打开,下面是页面声音打开方式,如何运行直接可以播报就可以跳过啦

1.按下述图片,先点击小感叹号,再点击网站设置

2.进入网站设置后,找到声音这个选项,将自动(默认)修改为允许即可

3.最后再返回页面,刷新一下应该就听到AI播报的声音了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值