开发者社区> 问答> 正文

语音AI语⾳合成时,使用原生 js ws 发送的报文是怎样的?https://help.aliyun

语音AI语⾳合成时,使用原生 js ws 发送的报文是怎样的?https://help.aliyun.com/document_detail/84435.html?spm=a2c4g.84425.0.0.1fcc142anBzqt6表示里的数据是传在 header 里还是 payload 里

展开
收起
真的很搞笑 2023-05-31 22:45:07 116 0
2 条回答
写回答
取消 提交回答
  • 您抓下我们官网网页试用那里看下,此回答整理自钉群“阿里语音AI【5群】”

    2023-05-31 23:14:28
    赞同 展开评论 打赏
  • 语音合成请求需要使用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等信息。

    2023-05-31 22:54:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载