音声合成(TTS)
テキストを自然な音声に変換 — 単一ボイスによる手軽な読み上げ、または台本から複数話者の対話を生成します。
テキストまたは URL の内容を、自然な響きの音声に変換します。Skill は渡された内容に応じて 2 つの経路のいずれかを選びます:単一のボイスが最初から最後まで読み上げるか、1 行ずつ話者を付けた台本を複数の話者が演じ分けるかです。
トリガー
/tts でこの Skill を呼び出すか、次のいずれかのフレーズを使用します:
| フレーズ | 言語 |
|---|---|
read aloud / read this aloud | 英語 |
TTS / text to speech | 英語 |
voice narration | 英語 |
朗读这段 | 中国語 |
配音 / 语音合成 | 中国語 |
ListenHub Skills のインストールが必要です — はじめに を参照してください。
簡単な例
Read this article aloud: https://en.wikipedia.org/wiki/PodcastSkill がコンテンツを取得し、ボイスを選び、自然な音声を生成します。
クイックモードとスクリプトモード
Skill は何かを尋ねる前に、2 つのモードのどちらを使うかを決めます。どちらもストリーミング再生やダウンロードができる MP3 を生成しますが、使うボイスの数と、1 行ごとにどこまで制御できるかが異なります。
| クイックモード | スクリプトモード | |
|---|---|---|
| CLI フラグ | --mode direct | --mode smart |
| ボイス数 | 1 つ | キャラクターごとに 1 つ |
| 速度 | 高速・低レイテンシ(約 1–2 分) | 中程度(約 2–3 分) |
| 適した用途 | 記事の読み上げ、手軽な TTS、単一ナレーター | 対話、オーディオブック、複数キャラクターの台本コンテンツ |
| 制御の粒度 | テキストを 1 つのまとまりとして読み上げ | 各セグメントを割り当てた話者が読み上げ |
クイックモードは 1 つのテキスト(または URL)を受け取り、単一のボイスで最初から最後まで読み上げます。同期的に実行され、音声リンクをすぐに返します。
スクリプトモードは各行に話者を付けた台本を受け取り、キャラクターごとに異なるボイスを割り当て、各セグメントを 1 本の音声トラックにつなぎます。長い台本はバックグラウンドで実行されます — Skill はジョブを送信し、完了するまでポーリングします。
CLI の tts create コマンドはデフォルトで --mode smart を使います。Skill は下記のモード判定に従ってフラグを自動で選ぶため、手動で指定することはほとんどありません。
モードの判定方法
Skill は質問を始める前にあなたのリクエストを読み取り、自動的にモードへ振り分けます:
| 入力に含まれる手がかり | モード |
|---|---|
| "多角色"、"脚本"、"对话"、"script"、"dialogue"、"multi-speaker" | スクリプト |
| 複数のキャラクターが名前や役割で示されている | スクリプト |
A: ... / B: ... のような構造化されたセグメント | スクリプト |
| キャラクターの目印がない単一段落のテキスト | クイック |
| "read this"、"TTS"、"朗读" にプレーンテキストを添えた指示 | クイック |
| 判断がつかない場合 | クイック(デフォルト) |
振り分けが正しくないと感じたら、そう伝えてください — たとえば「複数話者の台本として作って」と言えば、Skill はモードを切り替えます。
台本を書く(スクリプトモード)
スクリプトモードでは、各行に話者を付けてセリフを渡します。いちばん簡単な形式は、1 つの発話につき 1 行の Speaker: text です:
Alex: Hello everyone, welcome to the show.
Sam: Thanks for having me!
Alex: Let's get into today's topic.Skill は各 Speaker: の目印を 1 つのセグメントとして解析し、登場するキャラクター(Alex、Sam)を集めて、それぞれにボイスを割り当てます。この目印は最終的に内部の /v1/flow-speech/episodes/tts リクエストに渡されます。API を直接呼び出す場合、このエンドポイントは明示的な scripts 配列も受け付けます:
{
"scripts": [
{ "content": "Hello everyone, welcome to the show.", "speakerId": "cozy-man-english" },
{ "content": "Thanks for having me!", "speakerId": "travel-girl-english" }
]
}各セグメントは、割り当てられた話者によって順番に読み上げられます。
台本作成のヒント
- 自然な発話の区切りで分けてください — 1 行につき 1 文か短い段落にします。
- 話者を交互にすると対話らしくなります。
- すべての話者を同じ言語で揃えてください。
- API を直接呼び出す場合、各
speakerIdは speakers エンドポイント が返す有効な ID である必要があります。
ボイスの選択と保存された設定
ボイスを自分で選ぶ必要はありません。Skill は次の順序で決定します:
保存された設定。 判定された言語のデフォルトボイスを保存している場合、Skill はそれを黙って使用します。
組み込みのデフォルト。 それ以外の場合は、その言語の組み込みデフォルトボイスにフォールバックします — 英語では中立的なナレーター、中国語では複数キャラクターの台本向けにメインとサブの 2 つのボイスが用意されています。
明示的な変更。 ボイスの変更を依頼したときだけ、Skill は話者リストを表示して選ばせます。
新しいボイスを選んだとき(デフォルトが使われたときは対象外)、Skill はそれを記憶するか尋ねます:
- クイックモード —「これを
{language}のデフォルトボイスとして保存しますか?」 - スクリプトモード —「このボイスの割り当てを今後のセッションでも使えるよう保存しますか?」
保存された設定は、作業ディレクトリの .listenhub/tts/config.json にある、言語をキーとした defaultSpeakers の下に置かれます。クイックモードは 1 つのボイスを、スクリプトモードはそのセッションで割り当てたボイス一式を保存します。「いいえ」を選ぶと、そのボイスは今回の実行にだけ使われ、設定ファイルは変更されません。
設定は作業ディレクトリごとに分かれています。別のプロジェクトで Skill を実行すると、また組み込みデフォルトから始まります。
パラメータ
| パラメータ | 選択肢 | デフォルト |
|---|---|---|
| 入力 | テキストまたは URL | — |
| モード | direct(クイック)、smart(スクリプト) | 自動判定 |
| 言語 | en、zh、ja | テキストから自動判定 |
| 話者 | ボイス名または speakerId | 保存された設定、なければ組み込みデフォルト |
音声合成とポッドキャストの使い分け
どちらの Skill も複数話者の音声を作れますが、目的が異なります:
| 用途 | Skill |
|---|---|
| トピックにもとづく、自然な会話の流れのディスカッション | ポッドキャスト |
| 1 行ごとのセリフと話者を精密に制御したい | 音声合成(スクリプトモード) |
| 記事やテキストを読み上げたい | 音声合成(クイックモード) |
制限
- FlowTTS のテキスト入力:最大 10,000 文字。
- これより長いコンテンツは URL で渡してください — API が自動で取得して処理します。
- プレーンな
textソースは 10 文字以上必要です。
クレジット
生成にはクレジットを消費します。コストは長さ、モード、ボイスによって変わるため、大きなジョブの前には固定価格を前提にせず、該当する estimate-credits エンドポイントで確認してください。見積もり用のエンドポイントは FlowSpeech API リファレンス を参照してください。
出力
生成が完了すると:
- 試聴リンク — ListenHub 上で音声を再生します。
- 字幕 — スクリプトモードでは、利用できる場合に字幕 URL も返されます。
- ダウンロード —「音声をダウンロード」と伝えると、MP3 がトピックにもとづくファイル名でカレントディレクトリに保存されます。
API リファレンス
/v1/flow-speech/episodes、/v1/flow-speech/episodes/tts、および /v1/speech のテキスト読み上げインターフェースについては、FlowSpeech API リファレンス を参照してください。