Seed Speech 2.0 legge una voce preimpostata per richiesta, quindi una conversazione tra due personaggi adulti è un task per battuta, uniti in un breve montaggio audio. Ogni task costa 0,072 $ ogni 1.000 caratteri di testo parlato, senza minimo, e la nota di recitazione è gratuita.
Va bene per messaggi vocali di personaggi, narrazione di audiolibri e dialoghi in cui vuoi rifare una battuta senza toccare l'altra. Se vuoi entrambe le voci e il suono di fondo in un solo file, usa invece Seed Audio 1.0.
Cosa ottieni da una richiesta
| Elemento | Seed Speech 2.0 |
|---|---|
| Campo obbligatorio | text, da 1 a 5.000 caratteri |
| Voce | Un voice_id tra 41 preimpostate; predefinito stokie_en |
| Nota di recitazione | instructions, fino a 1.000 caratteri; non viene pronunciata né fatturata |
| Output | Un MP3 mono a 24 kHz, oppure Ogg Opus (opus); nessun tempo per parola né sottotitoli |
| Durata e velocità | Circa 11 caratteri al secondo di parlato; circa 8 secondi per generare 300 caratteri |
| Conservazione | Conservato 14 giorni, quindi scaricalo |
| Costo | 0,072 $ ogni 1.000 caratteri; 5.000 caratteri costano 0,36 $; un task scaduto non viene addebitato |
| Non disponibile | Caricamento di una voce di riferimento, array multi-speaker |
Scegli una voce preimpostata e prova una battuta nella pagina del task Seed Speech 2.0. Clonazione vocale, streaming e riconoscimento vocale della famiglia Seed Speech più ampia di BytePlus non fanno parte di questo task. Per ascoltare prima la voce, ascolta il messaggio vocale notturno pubblicato; usa stokie_en con una nota di recitazione morbida e intima.
Prova prima le due battute nel Playground
In quella pagina usa la scheda Playground. Per ogni battuta di due adulti fittizi dopo un appuntamento:
- Incolla in Text solo le parole da ascoltare. Non scrivere nomi di chi parla («Anna:») né indicazioni di scena («sorride»): vengono lette ad alta voce, e se metti entrambi i personaggi in una richiesta, una sola voce legge le due battute insieme ai nomi.
- Scegli un nome in Voice (Stokie · English per impostazione predefinita).
- Scrivi la recitazione in Delivery instructions; non viene pronunciata né fatturata.
- Lascia Language su Auto, avvia, ascolta il risultato e scarica l'MP3.
Battute e istruzioni restano in inglese perché Stokie e Tim sono voci preimpostate inglesi.
| Battuta | Voce | Text | Delivery instructions |
|---|---|---|---|
| 1 | Stokie (stokie_en) | "You don't have to go yet. Stay for another coffee? I like talking to you when we're not watching the clock." | Warm and slightly playful. Speak quietly to one adult listener, with a natural question rather than a sales pitch. |
| 2 | Tim (tim_en) | "Then I'll stay. I was hoping you would give me a reason." | Low, relaxed and amused. Answer an invitation naturally; do not sound like an announcer. |
Unisci i due download in un qualsiasi editor audio, lasciando una breve pausa. Per automatizzare l'unione, usa lo script qui sotto.
Poi scrivi uno script per l'intero scambio
Installa l'SDK Python (pip install spicyapi) e ffmpeg, imposta SPICY_API_KEY ed esegui questo script. Invia un task per battuta, scarica ogni MP3, poi li unisce con 0,35 secondi di silenzio dopo ogni battuta e con i livelli uniformati.
import subprocess, urllib.request
from spicyapi import SpicyClient, output_assets
client = SpicyClient() # reads SPICY_API_KEY from the environment
GAP = 0.35 # seconds of silence after each turn
TURNS = [
{"text": "You don't have to go yet. Stay for another coffee? I like talking to you when we're not watching the clock.",
"voice_id": "stokie_en",
"instructions": "Warm and slightly playful. Quiet, to one adult listener."},
{"text": "Then I'll stay. I was hoping you would give me a reason.",
"voice_id": "tim_en",
"instructions": "Low, relaxed and amused. Answer naturally, not like an announcer."},
]
files = []
for i, turn in enumerate(TURNS, 1):
task = client.create_task(
model="bytedance/seed-speech-2.0/text-to-speech",
input_data=dict(turn, language="en", output_format="mp3"),
idempotency_key=f"dialogue-take-1-turn-{i}", # new keys for a new take
)
final = client.wait_for_terminal(task["taskId"])
if final["state"] != "succeeded":
raise RuntimeError(f"Turn {i} ended as {final['state']}")
files.append(f"turn-{i:02d}.mp3")
urllib.request.urlretrieve(output_assets(final)[0]["url"], files[-1])
cmd = ["ffmpeg", "-y"] + [x for f in files for x in ("-i", f)]
chains = [f"[{i}:a]loudnorm=I=-18,apad=pad_dur={GAP}[a{i}]" for i in range(len(files))]
graph = ";".join(chains) + ";" + "".join(f"[a{i}]" for i in range(len(files))) + f"concat=n={len(files)}:v=0:a=1"
subprocess.run(cmd + ["-filter_complex", graph, "-ar", "24000", "-b:a", "128k", "dialogue.mp3"], check=True)Regola GAP finché la risposta non arriva in modo naturale. Se una battuta parte male, rigenera l'intera frase invece di rattoppare una parola, e ricostruisci il file. Attese, nuovi tentativi ed errori sono descritti nel riferimento dell'SDK Python e nella guida ai task asincroni; il ripristino su larga scala è il tema dell'articolo del blog su polling contro webhook.
Oppure lascia che lo esegua un agente
Se un assistente deve dare voce al copione, dagli la CLI o il server MCP. Entrambi mostrano il prezzo e chiedono la tua conferma prima di una chiamata a pagamento. La Skill aggiunge istruzioni sopra l'una o l'altro.
- CLI.
spicyapiesegue una battuta per chiamata (npx @spicyapi/clifunziona senza installazione). Metti l'oggettoinputdella battuta inturn-1.json:
``bash spicyapi tasks create --model bytedance/seed-speech-2.0/text-to-speech \ --input-file turn-1.json --idempotency-key dialogue-take-1-turn-1 --wait ``
- Server MCP. Aggiungi il server MCP al tuo assistente e chiedi: «Read these two lines with Seed Speech 2.0, stokieen then timen, and join them with a short gap.» Chiama
spicyapi_task_create(che si ferma per la tua conferma del prezzo) espicyapi_task_waitper ogni battuta. - Skill.
npx skills add spicyapi-ai/spicy-skillinstalla l'Agent Skill, che insegna a un assistente di programmazione a leggere lo schema attuale e a riutilizzare le chiavi di idempotenza. Non può eseguire task da sola, quindi usala con la CLI o con MCP.
Scegli voci e lingua insieme
Il suffisso di ogni ID voce indica le lingue per cui è pensata. Tra le voci inglesi ci sono stokie_en, dacey_en e tim_en. Altre coprono giapponese (minimi_ja), tedesco (sven_de), francese (usseau_fr), coreano (shane_ko) e spagnolo (felipe_es); jess_ja_es_id_pt_en_zh parla sei lingue. L'elenco non dice quali voci siano maschili o femminili, quindi fai un'audizione: la stessa battuta di 100 caratteri provata con cinque candidate costa in tutto circa 0,036 $. Conserva il voice_id e le instructions vincenti per ogni battuta successiva di quel personaggio.
language accetta zh, en, ja, es-mx, id, pt-br, ko, it, de e fr. Omettilo per il rilevamento automatico, e impostalo quando una battuta breve o in più lingue viene letta in quella sbagliata. Lo spagnolo è es-mx e il portoghese pt-br. Non traduce: scrivi la battuta nella lingua di destinazione.
Copioni per adulti e suoni non verbali
In base ai nostri test di settembre 2026, SpicyAPI non aggiunge alcun filtro di contenuto a questo modello, e brani per adulti, diretti e in stile audiolibro, sono tornati parola per parola, senza che il testo delle istruzioni venisse mai pronunciato. Un brano ricco di indicazioni ha mantenuto il suo lessico ma ha aggiunto da sé vocalizzazioni senza parole. Il task non ha un campo per i tag sonori: scrivi un suono come parola («Mm...», «Ah...») e descrivi respiro o tono in instructions. Se una scena dipende da respiri e gemiti recitati, Gemini 3.8 Flash, Grok e MiniMax interpretano come suoni le indicazioni inserite nel testo; Seed Speech no.
Impostazioni che risolvono un problema reale
| Impostazione | Intervallo | Usala quando |
|---|---|---|
speed | 0,5-2, predefinito 1 | Una battuta è affrettata: prova 0,9. Se lo è solo una frase, accorcia il periodo o aggiungi un punto |
pitch | da -12 a +12 semitoni | Per un piccolo ritocco dopo la scelta della voce; per un personaggio diverso, cambia voce preimpostata |
volume | 0,5-2, predefinito 1 | Una battuta sostitutiva è più forte o più debole delle vicine |
sample_rate | da 8.000 a 48.000 Hz | Il tuo progetto di montaggio richiede una frequenza diversa da 24 kHz |
output_format | mp3 oppure opus | Opus per file più piccoli se il tuo player gestisce Ogg Opus; il WAV non è offerto, quindi converti in locale |
Una battuta che suona teatrale ha di solito un'istruzione troppo lunga: sostituiscila con «Quiet, natural conversational delivery.» Una voce con il carattere di base sbagliato richiede un'altra voce preimpostata prima di toccare il pitch. Un nome insolito a volte viene pronunciato male e non esiste un dizionario di pronuncia, quindi scrivilo in text come suona.
Per i sottotitoli serve allineare il testo al file finito, perché il task non restituisce timestamp.
Calcola il budget del copione, revisioni comprese
Il prezzo segue i caratteri di text, compresi spazi, punteggiatura e a capo; instructions è gratuito e il preventivo mostrato prima di un'esecuzione è definitivo. Una battuta di 200 caratteri costa 0,0144 $ e corrisponde a circa 18 secondi di parlato; una scena di 2.000 caratteri tra i due personaggi costa 0,144 $, e tre riprese complete costano 0,432 $. Due voci non comportano supplementi. Sostituire una risposta di 200 caratteri costa 0,0144 $, molto meno che rigenerare la scena, quindi mantieni la stessa voce preimpostata e le stesse impostazioni per la ripresa.
Scegli Seed Speech per voci preimpostate economiche e battute che puoi rifare una alla volta; scegli Seed Audio 1.0 quando vuoi entrambe le voci e l'ambiente in un solo file.






