multilingual_v2、flash_v2_5。建立连接 → 初始化 → 发送文本 → 发送空文本 → 等待 final → 断开连接wss://api.voicelibrary.co/enterprise/v1/tts/{voice_id}/websocketwss://api.us.voicelibrary.co/enterprise/v1/tts/{voice_id}/websocketwss://api.eu.voicelibrary.co/enterprise/v1/tts/{voice_id}/websocketwss://api.jp.voicelibrary.co/enterprise/v1/tts/{voice_id}/websocket{voice_id},并在 WebSocket 握手 Header 中传入:api-key: <YOUR_API_KEY>flash_v2_5、multilingual_v2;不支持 myvocal_v3dedicated_concurrency1..180en、zh;必须与所选模型实际支持的语言一致0..4294967295;相同配置下用于提升生成一致性,不保证音频逐字节相同wss://api.voicelibrary.co/enterprise/v1/tts/{voice_id}/websocket?model_id=flash_v2_5&priority=dedicated_concurrency&format=pcm_16000&idleTimeout=120&language_code=zhtext 省略时等价于单个空格。{
"text": " ",
"previous_text": "上一句,可选",
"next_text": "下一句,可选",
"voice_settings": {
"stability": 0.5,
"similarity_boost": 0.75,
"style": 0.3,
"use_speaker_boost": true
},
"generation_config": {
"synthesisSchedule": [120, 160, 250, 290]
}
}stability、similarity_boost、style 的取值范围均为 0..1。generation_config.synthesisSchedule 为正整数数组,用于控制文本累计触发节奏;请根据实际延迟和音质测试选择,不要把示例值当作固定服务端默认值。{
"text": "Hello world.",
"earlyGeneration": false
}{
"text": ""
}isFinal=true 或 is_final=true,表示本轮合成完成。{
"text": "",
"flush": true
}flush=true 用于输出已缓冲文本,可能只返回音频而不返回 final。要结束本轮合成,请按上一步发送 {"text":""} 并等待 final。{
"audio": "BASE64_AUDIO_DATA",
"isFinal": false
}{
"audio": "",
"isFinal": true
}audio 为 Base64 音频;启用直接流式时也可能收到二进制帧。directStreaming=true,当前服务仍可能返回 JSON Base64 音频;必须按实际收到的帧类型处理。isFinal 和 is_final 都应兼容。audio 可以为空、缺失或为 null,仍表示本次事务成功完成。isFinal=null 不是完成信号。timestamps、alignment、normalizedAlignment 或 normalized_alignment。error 和 message。客户端应能处理未列出的错误码,并保留错误信息用于排查。connect -> initialize -> send text fragment(s) -> {"text":""} -> wait final -> disconnectisFinal=true 或 is_final=true 是本轮合成成功的边界。1006,也可能不再发送规范 Close Frame;已经完成的合成仍然有效。Finish 已成功后,如果后续 Close 返回底层连接已关闭的清理错误,不代表本轮合成失败,也不要因此重放文本。