多角色對話

一次請求送出整份對話腳本,系統會依輸入順序逐段合成、 自動串接成一段完整語音。適合劇情演出、訪談模擬、廣播劇。

運作方式

你提供一個 dialogue 陣列,每一筆是一句台詞, 各自指定配音員、風格與模型版本。系統合成後串接為單一音檔回傳, 不會回傳分段檔案

audio_config逐句設定的,不指定就用預設值。 想讓某個角色講快一點,只要在那幾句加上 speed 即可。

端點

POST /TTS/generate-dialogue

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 伺服器內部錯誤

更深入的角色配置技巧與效果調整,可參考 對話進階說明