Websocket握手请求
功能介绍
本接口提供实时流式语音合成。用户每次建立连接,发送待合成文本,服务端将合成结果响应给用户。一次连接只能发送一次文本,如果有多段文本需要合成,需要多次建立连接。实时语音合成和语音合成均属于语音合成接口,采用完全相同的计费规则,两者价格梯度可互相叠加,可参考价格计算器。
工作流程
从流程图可以看出,实时语音合成只需要发送1次开始请求,会陆续收到开始响应、合成音频的分片响应、结束响应。
wss-URI
- wss-URI格式
- 参数说明
表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(); } }