Websocket握手请求
功能介绍
本接口提供实时流式合成。用户建立连接、发送开始消息、发送合成文本消息、发送结束消息、断开连接。其中合成文本消息支持多次发送,可用于大模型输出实时播报等场景。
注意事项
- 同一个会话中,单次合成不超过300字符,总计不超过10万字符,其中汉字、英文字母、标点或空格均算作字符。
- 服务侧收到流式合成文本后缓存,并按照句子分割后合成。文本合成依赖句子的完整性,确保合成文本包含正确标点(尤其是文本末尾标点),否则文本可能长时间缓存而未合成。
- 会话中如果出现错误或严重的错误,系统会舍弃待合成的文本,只计费已合成的文本。
工作流程
从流程图可以看出,一次完整的流程为:建立连接、发送消息(开始)、发送消息(文本)、发送消息(结束)、断开连接。

URI
wss /v1/{project_id}/vcs/voices/clone
|
名称 |
是否必选 |
说明 |
|---|---|---|
|
project_id |
是 |
项目编号。获取方法,请参见获取项目ID。 |
- 请求示例(伪码)
wss://{endpoint}/v1/{project_id}/vcs/voices/clone Request Header: X-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDTALBglghkgBZQMEAgEwgguVBgkqhkiG...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 VcsDemo { public void vcsDemo() { try { // endpoint和projectId需要替换成实际信息。 String url = "wss://{{endpoint}}/v1/{{project_id}}/vcs/voices/clone"; String token = "对应region的token"; OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder().url(url).header("X-Auth-Token", token).build(); WebSocket webSocket = okHttpClient.newWebSocket(request, new MyListener()); // ONLY模式 String text = "欢迎使用华为云语音合成服务。"; webSocket.send("{\"command\":\"START\",\"text\":\"" + text + "\", \"text_pieces\": \"ONLY\", \"config\":{\"audio_format\":\"pcm\",\"sample_rate\":\"16000\",\"voice_name\":\"chinese_huaxiaotian_common\"}}"); // MULTI模式,支持多次发送文本 // 开始 // webSocket.send("{\"command\":\"START\",\"config\":{\"audio_format\":\"pcm\",\"sample_rate\":\"16000\",\"voice_name\":\"chinese_huaxiaotian_common\"}}"); // 合成 // String text = "欢迎使用华为云语音合成服务。"; // webSocket.send("{\"command\":\"MSG\", \"text\":\"" + text + "\"}"); // webSocket.send("{\"command\":\"MSG\", \"text\":\"" + text + "\"}"); // 结束 // webSocket.send("{\"command\": \"END\"}"); 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("connected"); } @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) { VcsDemo vcsDemo = new VcsDemo(); vcsDemo.vcsDemo(); } }