语音AI语⾳合成时,使用原生 js ws 发送的报文是怎样的?https://help.aliyun.com/document_detail/84435.html?spm=a2c4g.84425.0.0.1fcc142anBzqt6表示里的数据是传在 header 里还是 payload 里
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
语音合成请求需要使用WebSocket协议进行发送。在发送请求时,语音合成数据是通过WebSocket的payload传输的,即发送的报文内容需要写入WebSocket消息的payload中,而不是header中。具体的报文格式可以参考文档中的示例代码:
var crypto = require('crypto');
function createAudioBuffer(ws, text, appkey, token) {
  var audioData = {
    "format": "pcm",
    "sample_rate": "16000",
    "voice": "xiaoyun",
    "speech": text
  };
  var audioDataString = JSON.stringify(audioData);
  var audioDataBuffer = new Buffer(audioDataString);
  var audioReqData = {
    "id": crypto.randomBytes(16).toString("hex"),
    "method": "POST",
    "url": "/synth_voice",
    "headers": {
      "content-type": "application/json",
      "authorization": "Bearer " + token,
      "x-appkey": appkey,
      "x-sdk-version": "2.0.0",
      "x-request-id": crypto.randomBytes(16).toString("hex")
    },
    "body": audioDataBuffer
  };
  var audioReqDataString = JSON.stringify(audioReqData);
  var audioReqDataBuffer = new Buffer(audioReqDataString);
  var audioHeaderBuffer = new Buffer(2);
  audioHeaderBuffer[0] = 0x82;
  audioHeaderBuffer[1] = audioReqDataBuffer.length;
  var audioBuffer = Buffer.concat([audioHeaderBuffer, audioReqDataBuffer]);
  ws.send(audioBuffer);
  console.log("audio buffer length:", audioBuffer.length);
}
可以看到,在创建语音合成请求发送的Buffer时,将请求数据写入了WebSocket消息的payload中。同时,在headers中携带了请求的Authorization等信息。