Seed Speech 2.0は1回のリクエストでプリセット音声1つを読み上げるため、成人キャラクター2人の会話は「1行につき1タスク」で作り、短い音声編集でつなぎます。 各タスクの料金は読み上げテキスト1,000文字あたり0.072ドル、最低料金はなく、演技指示は無料です。
キャラクターのボイスメッセージ、オーディオブックのナレーション、片方の台詞だけを録り直したい会話に向いています。2人の声と環境音を1つのファイルにまとめたい場合は、代わりにSeed Audio 1.0を使ってください。
1回のリクエストで得られるもの
| 項目 | Seed Speech 2.0 |
|---|---|
| 必須フィールド | text、1〜5,000文字 |
| 音声 | 41種のプリセットからvoice_idを1つ。デフォルトはstokie_en |
| 演技指示 | instructions、最大1,000文字。読み上げられず、課金もされません |
| 出力 | 24 kHzのモノラルMP3、またはOgg Opus(opus)。単語タイミングや字幕はなし |
| 長さと速度 | 音声はおよそ1秒あたり11文字。300文字の生成に約8秒 |
| 保存期間 | 14日間保存されるので、ダウンロードしてください |
| 料金 | 1,000文字あたり0.072ドル。5,000文字で0.36ドル。期限切れのタスクには課金されません |
| 非対応 | 参照音声のアップロード、複数話者の配列 |
プリセットを選び、Seed Speech 2.0のタスクページで1行試してみましょう。BytePlusのより広いSeed Speechファミリーにある音声クローン、ストリーミング、音声認識は、このタスクには含まれません。先に声を聞きたい場合は、公開されている深夜のボイスメモを再生してください。stokie_enに、やわらかく親密な演技指示を付けています。
まずPlaygroundで2つの台詞を試す
そのページでPlaygroundタブを開きます。デート後の架空の成人2人の台詞ごとに、次の手順で行います。
- Textには、聞こえる言葉だけを貼り付けます。話者名(「Anna:」)やト書き(「彼女は微笑む」)は書かないでください。そのまま読み上げられますし、2人分を1リクエストに入れると、1つの声が両方の台詞と名前を読むことになります。
- Voiceで名前を選びます(デフォルトはStokie · English)。
- Delivery instructionsに演技の指示を書きます。読み上げられず、課金もされません。
- LanguageはAutoのまま実行し、結果を再生してMP3をダウンロードします。
StokieとTimは英語のプリセットなので、台詞と指示は英語のままにしています。
| 台詞 | 音声 | 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. |
ダウンロードした2つのファイルを、短い間を空けて好きな音声エディタでつなぎます。つなぎを自動化するには、下のスクリプトを使います。
次に、やり取り全体をスクリプト化する
Python SDK(pip install spicyapi)とffmpegをインストールし、SPICY_API_KEYを設定して、次のコードを実行します。台詞ごとに1タスクを送信し、各MP3をダウンロードして、各台詞の後に0.35秒の無音を入れ、音量をそろえて結合します。
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)返答が自然に入るまでGAPを調整してください。1行の出だしがぎこちない場合は、単語だけを直すのではなく文全体を再生成し、ファイルを組み直します。待機、再試行、エラーについてはPython SDKリファレンスと非同期タスクのガイドを参照してください。大規模な運用での復旧は、ポーリングとWebhookを比較したブログ記事の主題です。
エージェントに実行させる場合
アシスタントに台本を音声化させたいなら、CLIかMCPサーバーを渡します。どちらも料金を表示し、有料の呼び出しの前に確認を求めます。Skillはそのどちらの上にも指示を追加します。
- CLI。
spicyapiは1回の呼び出しで1つの台詞を実行します(npx @spicyapi/cliならインストール不要)。その台詞のinputオブジェクトをturn-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 ``
- MCPサーバー。 MCPサーバーをアシスタントに追加し、「Read these two lines with Seed Speech 2.0, stokieen then timen, and join them with a short gap.」と依頼します。台詞ごとに
spicyapi_task_create(料金確認のため停止します)とspicyapi_task_waitを呼び出します。 - Skill。
npx skills add spicyapi-ai/spicy-skillでAgent Skillをインストールすると、コーディングアシスタントが最新のスキーマを読み、idempotency keyを再利用するようになります。単独ではタスクを実行できないため、CLIまたはMCPと組み合わせてください。
声と言語をあわせて選ぶ
各voice IDの末尾は、その声が想定している言語を示します。英語のプリセットにはstokie_en、dacey_en、tim_enがあります。ほかに日本語(minimi_ja)、ドイツ語(sven_de)、フランス語(usseau_fr)、韓国語(shane_ko)、スペイン語(felipe_es)などがあり、jess_ja_es_id_pt_en_zhは6言語を話します。一覧には男声か女声かが書かれていないので、オーディションをしましょう。100文字の同じ台詞を5つの候補で試しても、合計で約0.036ドルです。採用したvoice_idとinstructionsは、そのキャラクターの以降の台詞すべてに使い続けてください。
languageにはzh、en、ja、es-mx、id、pt-br、ko、it、de、frを指定できます。省略すると自動検出になり、短い台詞や多言語の台詞が違う言語で読まれるときに指定します。スペイン語はes-mx、ポルトガル語はpt-brです。翻訳はされないので、台詞は対象言語で書いてください。
成人向けの台本と非言語の音
2026年9月のテストでは、SpicyAPIはこのモデルにコンテンツフィルターを追加しておらず、直接的な成人向けの文章もオーディオブック調の文章も一語一句そのまま返り、指示文が読み上げられることは一度もありませんでした。演出指示を多く含む文章では、語彙は保たれたものの、言葉にならない声が自然に加わりました。このタスクには効果音タグのフィールドがないので、音は「Mm...」「Ah...」のように言葉として書き、息づかいやトーンはinstructionsに記述します。演じられた息づかいや声が場面の要になるなら、Gemini 3.8 Flash、Grok、MiniMaxは本文中のキューを音として演じます。Seed Speechにはできません。
実際の問題を解決する設定
| 設定 | 範囲 | 使う場面 |
|---|---|---|
speed | 0.5〜2、デフォルト1 | 台詞が急いで聞こえるとき:0.9を試します。1つのフレーズだけなら、文を短くするか句点を足します |
pitch | -12〜+12半音 | キャスティング後の小さな微調整。別のキャラクターにするならプリセットを変えます |
volume | 0.5〜2、デフォルト1 | 差し替えた台詞が前後より大きい、または小さいとき |
sample_rate | 8,000〜48,000 Hz | 編集プロジェクトが24 kHz以外の周波数を必要とするとき |
output_format | mp3またはopus | プレーヤーがOgg Opusに対応しているなら、小さいファイルにできるOpus。WAVはないので、ローカルで変換します |
芝居がかって聞こえる台詞は、たいてい指示が長すぎます。「Quiet, natural conversational delivery.」に置き換えてください。根本の性格が合わない声は、ピッチをいじる前に別のプリセットが必要です。珍しい名前は読み間違えられることがあり、発音辞書もないので、textには聞こえ方どおりに綴ってください。
タスクはタイムスタンプを返さないため、字幕は完成したファイルに合わせて自分で位置合わせする必要があります。
修正分を含めて台本の予算を立てる
料金はtextの文字数(スペース、句読点、改行を含む)で決まります。instructionsは無料で、実行前に表示される見積もりが最終額です。200文字の台詞は0.0144ドルで約18秒、2人分合わせて2,000文字のシーンは0.144ドル、それを3テイク分まるごと作っても0.432ドルです。話者が2人でも追加料金はありません。200文字の返答1つを差し替えるのは0.0144ドルで、シーン全体を再生成するよりずっと安く済むため、撮り直しでは同じプリセットと設定を使い続けてください。
手頃なプリセット音声で、台詞を1つずつ作り直したいならSeed Speech、2人の声と環境音を1つのファイルにしたいならSeed Audio 1.0を選びます。






