多角色對話
一次請求送出整份對話腳本,系統會依輸入順序逐段合成、 自動串接成一段完整語音。適合劇情演出、訪談模擬、廣播劇。
運作方式
你提供一個 dialogue 陣列,每一筆是一句台詞,
各自指定配音員、風格與模型版本。系統合成後串接為單一音檔回傳,
不會回傳分段檔案。
audio_config 是逐句設定的,不指定就用預設值。
想讓某個角色講快一點,只要在那幾句加上 speed 即可。
端點
Request body
input.dialogue
array
必填
對話陣列,依序合成。
voai_script_text
string
必填
該角色的台詞,上限 1000 字。支援
[:秒數] 停頓標籤(最多 5 秒)。
voice
object
必填
name(配音員)、style(風格)、
version(模型版本)。
注意這裡欄位叫 version,不是 model。
audio_config
object
選填
speed [0.5, 1.5]、
pitch_shift [-5, 5]、
style_weight [0, 1](僅 Classic)、
breath_pause [0, 10]。
curl --location '{{BASE_URL}}/TTS/generate-dialogue' \
--header 'x-api-key: your-api-key' \
--header 'x-output-format: wav' \
--header 'Content-Type: application/json' \
--data '{
"input": {
"dialogue": [
{
"voai_script_text": "今天的進度會議[:1.5]你準備好了嗎?",
"voice": { "name": "佑希", "style": "聊天", "version": "Neo" },
"audio_config": {
"speed": 1,
"pitch_shift": 0,
"style_weight": 0.5,
"breath_pause": 0
}
},
{
"voai_script_text": "差不多了,我剛把簡報做完。",
"voice": { "name": "子墨", "style": "預設", "version": "Classic" }
},
{
"voai_script_text": "等你們兩個一起上場,就沒問題了!",
"voice": { "name": "雨榛", "style": "輕鬆", "version": "Neo" }
},
{
"voai_script_text": "我先去把會議室開好。",
"voice": { "name": "佑希", "style": "聊天", "version": "Neo" }
}
]
}
}' \
--output dialogue.wav
import requests
dialogue = [
{
"voai_script_text": "今天的進度會議[:1.5]你準備好了嗎?",
"voice": {"name": "佑希", "style": "聊天", "version": "Neo"},
"audio_config": {
"speed": 1,
"pitch_shift": 0,
"style_weight": 0.5,
"breath_pause": 0,
},
},
{
"voai_script_text": "差不多了,我剛把簡報做完。",
"voice": {"name": "子墨", "style": "預設", "version": "Classic"},
},
{
"voai_script_text": "等你們兩個一起上場,就沒問題了!",
"voice": {"name": "雨榛", "style": "輕鬆", "version": "Neo"},
},
{
"voai_script_text": "我先去把會議室開好。",
"voice": {"name": "佑希", "style": "聊天", "version": "Neo"},
},
]
resp = requests.post(
"{{BASE_URL}}/TTS/generate-dialogue",
headers={"x-api-key": "your-api-key", "x-output-format": "wav"},
json={"input": {"dialogue": dialogue}},
timeout=300,
)
resp.raise_for_status()
with open("dialogue.wav", "wb") as f:
f.write(resp.content)
採樣率的取捨
對話裡可以混用不同模型版本,但採樣率是整段共用的, 因此上限取決於當中限制最嚴的模型:
- 含
Neo— 最高 32000 - 含
Sota+— 最高 24000 - 未指定時:有
Classic用 44100;有Neo用 32000;只有Sota+用 24000
多角色對話的合成時間會隨句數線性增加。 client 端 timeout 請放寬,長對話建議抓 5 分鐘以上。
錯誤
400
對話格式錯誤、參數超出範圍、免費版使用 pcm,或額度不足
401
未提供或無效的 API Key
529
併發數量已達上限,請退避後重試
500
伺服器內部錯誤
更深入的角色配置技巧與效果調整,可參考 對話進階說明。