更新时间:2024-05-08 GMT+08:00
分享

Websocket握手请求

功能介绍

本接口提供实时流式语音合成。用户每次建立连接,发送待合成文本,服务端将合成结果响应给用户。一次连接只能发送一次文本,如果有多段文本需要合成,需要多次建立连接。实时语音合成和语音合成均属于语音合成接口,采用完全相同的计费规则,两者价格梯度可互相叠加,可参考价格计算器

工作流程

从流程图可以看出,实时语音合成只需要发送1次开始请求,会陆续收到开始响应、合成音频的分片响应、结束响应。

wss-URI

  • wss-URI格式

    wss /v1/{project_id}/rtts

  • 参数说明
    表1 参数说明

    名称

    是否必选

    说明

    project_id

    项目编号。获取方法,请参见获取项目ID

    表2 请求Header参数

    参数

    是否必选

    参数类型

    描述

    X-Auth-Token

    String

    用户Token。

    用于获取操作API的权限。获取方法请参见认证鉴权。响应消息头中X-Subject-Token的值即为Token。

    Enterprise-Project-Id

    String

    企业项目ID。SIS支持通过企业项目管理(EPS)对不同用户组和用户的资源使用,进行分账。

    获取方法:进入“企业项目管理”页面,单击企业项目名称,在企业项目详情页获取Enterprise-Project-Id(企业项目ID)。

    企业项目创建步骤请参见用户指南。

    说明:

    账户创建企业项目后,在传参时,有以下三类场景。

    • 携带正确的ID,正常使用SIS服务,账单归到企业ID对应的企业项目中。
    • 携带错误的ID,正常使用SIS服务,账单的企业项目会被分类为“default”。
    • 不携带ID,正常使用SIS服务,账单的企业项目会被分类为“default”。
  • 请求示例(伪码)
    wss://{endpoint}/v1/{project_id}/rtts
    
    Request Header:
    X-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDTALBglghkgBZQMEAgEwgguVBgkqhkiG...

    Python3语言请求代码示例

    # -*- coding: utf-8 -*-
    # 此demo仅供测试使用,强烈建议使用sdk。需提前安装websocket-client, 执行pip install websocket-client
    import websocket
    import threading
    import time
    import json
    
    
    def rtts_demo():
        url = 'wss://{{endpoint}}/v1/{{project_id}}/rtts'  # endpoint和project_id需替换
        text = '待合成文本'
        token = '用户对应region的token'
        header = {
            'X-Auth-Token': token
        }
    
        body = {
            'command': 'START',
            'text': text,
            'config': {
                'audio_format': 'pcm',
                'property': 'chinese_xiaoyu_common',
                'sample_rate': '8000'
            }
        }
    
        def _on_message(ws, message):
            if isinstance(message, bytes):
                print('receive data length %d' % len(message))
            else:
                print(message)
    
        def _on_error(ws, error):
            print(error)
    
        ws = websocket.WebSocketApp(url, header, on_message=_on_message, on_error=_on_error)
        _thread = threading.Thread(target=ws.run_forever, args=(None, None, 30, 20))
        _thread.start()
        time.sleep(1)
        ws.send(json.dumps(body), opcode=websocket.ABNF.OPCODE_TEXT)
        time.sleep(10)
        ws.close()
    
    
    if __name__ == '__main__':
        rtts_demo()
    

    Java语言请求代码示例

    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.Response;
    import okhttp3.WebSocket;
    import okhttp3.WebSocketListener;
    import okio.ByteString;
    
    /**
     * 此demo仅供测试使用, 强烈建议使用sdk
     * 使用前需已配置okhttp、okio jar包。jar包可通过下载SDK获取。
     */
    public class RttsDemo {
      public void rttsDemo() {
        try {
          // endpoint和projectId需要替换成实际信息。
          String url = "wss://{{endpoint}}/v1/{{project_id}}/rtts";
          String token = "对应region的token";
          String text = "待合成文本";
          OkHttpClient okHttpClient = new OkHttpClient();
          Request request = new Request.Builder().url(url).header("X-Auth-Token", token).build();
          WebSocket webSocket = okHttpClient.newWebSocket(request, new MyListener());
          webSocket.send("{\"command\": \"START\", \"text\":\"" + text
              + "\", \"config\": {\"audio_format\": \"pcm\", \"property\": \"chinese_xiaoyu_common\"}}");
          Thread.sleep(10000);
          webSocket.close(1000, null);
    
        } catch (Exception e) {
          e.printStackTrace();
        }
    
      }
    
      class MyListener extends WebSocketListener {
        @Override
    
        public void onOpen(WebSocket webSocket, Response response) {
          System.out.println("conneected");
        }
    
        @Override
        public void onClosed(WebSocket webSocket, int code, String reason) {
          System.out.println("closed");
        }
    
        @Override
        public void onFailure(WebSocket webSocket, Throwable t, Response response) {
          t.printStackTrace();
        }
    
        @Override
        public void onMessage(WebSocket webSocket, String text) {
          System.out.println(text);
        }
    
        public void onMessage(WebSocket webSocket, ByteString bytes) {
          byte[] data = bytes.toByteArray();
          System.out.println("receive data length is " + data.length);
        }
    
      }
    
      public static void main(String[] args) {
        RttsDemo rttsDemo = new RttsDemo();
        rttsDemo.rttsDemo();
      }
    }
    

相关文档