ttscn について
ttscnは、テキストを音声に変換するコマンドラインスキルで、中国語音声や多言語ナレーションに適しています。複数のクラウドサービスとEdge TTSを利用でき、音声形式、ポーズ、発音指定、一部バックエンドでの音声クローンに対応します。
主な機能
- 0115種類のTTSバックエンドに対応
- 02WAVまたはMP3音声を生成
- 03ポーズやサウンドマーカーを使用
- 04音素指定で発音を上書き
- 05一部バックエンドで音声クローン
- 06バックエンドと音声を確認
活用シーン
- 01中国語テキストを音声に変換
- 02動画用のナレーションを作成
- 03テキストからオーディオブックやポッドキャストを作成
- 04多音字の発音を指定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agents365-ai/ 365-skills --skill ttscnインストール後、Claude Code で/ttscnを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
data/providers.jsondocs/providers.htmlproviders.mdscripts/build_docs.pyclone.pyidempotency.pymarkers.pyoutput.pyphonemes.pytts.pyscripts/backends/__init__.pyatlas.pyazure.pybaidu.pycosyvoice.pydoubao.pyedge.pyelevenlabs.pygoogle.pyminimax.pyopenai.pyqwen.pystepfun.pytencent.pyxunfei.pyzhipu.pytests/test_atlas_backend.py詳細
ttscn — マルチプラットフォーム対応の中国語 TTS スキル
概要
テキストから自然な音声を生成します。15 種類のバックエンド — 中国国内向けクラウド 11 種類と、国際向けまたは統合 API 4 種類(ElevenLabs / OpenAI / Google / Atlas Cloud)。
| # | バックエンド | 料金 | 主な強み |
|---|---|---|---|
| 1 | Edge TTS(デフォルト) | 無料 | API キー不要、あらゆる環境で動作 |
| 2 | Doubao(ByteDance) | 約 1 RMB/10K | 中国語の自然さは最高クラス(9/10) |
| 3 | CosyVoice(Alibaba) | 約 0.2 RMB/1K | 高速ストリーミング、柔軟 |
| 4 | Qwen3-TTS(Alibaba) | 約 1 RMB/10K | 10 言語対応、指示による制御 |
| 5 | StepFun(阶跃星辰) | 低コスト | OpenAI 互換、約 10 秒で音声クローン |
| 6 | GLM-TTS(Zhipu) | 低コスト | 感情制御、シンプルな REST |
| 7 | Azure(Microsoft) | 約 1 USD/M 文字 | エンタープライズ向け SSML、eastasia |
| 8 | Tencent Cloud | 0.75 RMB/10K | 最低価格、380 種類以上の音声 |
| 9 | Baidu AI | 柔軟 | 30 種類以上の音声、感情と方言に対応 |
| 10 | MiniMax | 約 $0.10/1K | 最高クラスの品質、300 種類以上の音声、音声クローン |
| 11 | iFlytek Xunfei | 約 2 RMB/10K | MOS 4.8、500 種類以上の音声、プロ品質 |
| 12 | ElevenLabs | 有料プラン($5/月~) | 最高クラスの音声品質、即時音声クローン |
| 13 | OpenAI TTS | 約 $15-30/M 文字 | 6 種類の音声、多言語対応、シンプルな REST |
| 14 | Google Cloud TTS | 約 $16/M 文字(無料枠あり) | 220 種類以上の音声、40 言語以上 |
| 15 | Atlas Cloud TTS | モデルごとの料金 | 統合非同期 API、多言語音声 |
1.4~1.6 の新機能:単語レベルのタイムスタンプ(edge/azure/doubao/minimax/cosyvoice —
ベストエフォート。境界情報が取得できない場合があります)、[PAUSE:x] + サウンドタグマーカー(全プラットフォーム)、--phonemes による発音の上書き(azure/minimax)。
1.7 の新機能:--json フラグ(--format に依存しない JSON エンベロープ)、冪等性チェックでキャッシュがヒットした場合は cached: true を報告し、キャッシュ済み音声が削除されている場合は再合成、--input f out.wav の位置引数を修正、チャンク分割で [PAUSE:x] の途中を分割しないように変更。
1.8 の新機能:MiniMax のデフォルトを speech-2.8-hd に変更(サウンドタグが最初から音声化されます)、CosyVoice v3.5-flash に対応(カスタム音声/クローン音声のみ — プリセットには cosyvoice-v3-flash が必要です)。
1.9 の新機能:Qwen3-TTS(DashScope、DASHSCOPE_API_KEY を再利用)、StepFun(STEP_API_KEY を再利用)、GLM-TTS(ZHIPUAI_API_KEY を再利用)、Atlas Cloud TTS(非同期生成、上限付きポーリング、認証情報なしでのメディアダウンロード、多言語音声プリセット)の各バックエンド — 合計 15 種類。
クロスプラットフォーム対応:Windows、macOS、Linux
このドキュメント内のすべてのパスは、このスキルのルートディレクトリ(この SKILL.md を含むディレクトリ)からの相対パスです。ルートディレクトリを基準に解決してください。
このスキルを使う場面
次の場合に、このスキルを自動的に有効化します。
- ユーザーが中国語のテキストを音声に変換したい場合
- 動画のナレーションやボイスオーバーを生成する場合
- テキストからオーディオブックやポッドキャストの音声を作成する場合
- ユーザーが TTS プロバイダーの比較、TTS バックエンドの選択、利用可能な音声の確認を求めた場合
- ユーザーが TTS の料金や機能、音声クローン/SSML/方言に対応するプロバイダーについて尋ねた場合
- ユーザーが次のいずれかに言及した場合:TTS、テキスト読み上げ、语音合成、文字转语音、Edge TTS、Doubao TTS、CosyVoice、火山引擎、阿里云语音、Azure TTS、腾讯云TTS、百度语音、MiniMax、讯飞语音、ElevenLabs、OpenAI TTS、Google Cloud TTS、Atlas Cloud TTS
- ユーザーが単語レベルのタイムスタンプ/字幕、一時停止の制御、または発音を間違えやすい中国語の漢字(多音字)の修正を必要とする場合
- 中国語テキストの音声変換が役立つあらゆるタスク
プロバイダー比較ページ
ユーザーが TTS プロバイダーを確認、比較、または選択したい場合は、必ず最初に ローカルの HTML 比較ページをブラウザーで開いてください。視覚的に確認できるフィルター付きの表で、 テキストの出力を読むよりもすばやく比較できます。
# Cross-platform (path relative to this skill's directory)
python3 -m webbrowser docs/providers.html
# …or the platform-native opener: open (macOS) / xdg-open (Linux) / start (Windows)
比較ページには、次の情報が含まれています。
- フィルター付きの表 — 無料、SSML、音声クローン、ストリーミング、方言、多言語で絞り込み
- プロバイダーごとの詳細パネル — 料金、最大文字数/長さ、クローン方法、感情、言語
- 音声カード — スタイルの説明と最適な用途のラベル付きのおすすめ音声
- API キーのリンク — 各プロバイダーのキーを取得できるコンソールへの直接リンク
このページは、すべてのプロバイダーと音声のデータを管理する唯一の情報源である
data/providers.json から自動生成されます。JSON を編集した後にページを再生成するには、
python3 scripts/build_docs.py を実行してください。同じデータは CLI からも
python3 scripts/tts.py schema backends|voices で照会できます(「スキーマの概要」を参照)。
ページを開いた後、使用したいバックエンドと音声をユーザーに尋ねてから、 ステップ 2 に進みます。
ワークフロー
ステップ 0 — 比較ページを表示する(比較/選択する場合)
ユーザーがプロバイダーを確認・比較している場合、または使用するバックエンドが決まっていない場合は、
上記のとおり docs/providers.html を開きます。ユーザーが内容を確認したら、使用したいバックエンドと
音声を尋ねます。
ステップ 1 — リクエストを把握する
ユーザーが必要としている内容を確認します。
- テキスト:直接入力するテキストですか、それともファイルですか?短文ですか、長文ですか?
- 音声スタイル:男性/女性、若々しい/成熟した、温かみのある/エネルギッシュなどですか?(下記の音声ガイドを参照)
- 速度:通常、速め(+10~20%)、遅め(-10~20%)のどれですか?
- 形式:WAV(ロスレス)ですか、MP3(圧縮)ですか?
ステップ 2 — バックエンドと音声を選ぶ
用途に基づいて選びます(バックエンド選択ガイドを参照)。決められない場合は、
Edge TTS と zh-CN-XiaoxiaoNeural(女性、温かみのある標準的な音声)をデフォルトとして使用します。選択した内容を伝えます。
ステップ 3 — 音声を合成する
テキストと選択したオプションを指定して scripts/tts.py を実行します。
ステップ 4 — 結果を報告する
出力先のパス、ファイルサイズ、音声の長さを伝えます。
バックエンド選択ガイド
すぐに選ぶ場合
| 用途 | バックエンド | 音声 | 理由 |
|---|---|---|---|
| デフォルト/一般用途 | edge | zh-CN-XiaoxiaoNeural | 無料で、セットアップ不要 |
| ショート動画/Douyin | doubao | BV001_streaming | ショート動画向けのネイティブなスタイル |
| オーディオブック/長文 | cosyvoice | longxiaochun_v3 | 高速な合成で、自然 |
| エンタープライズ/SSML | azure | zh-CN-XiaoxiaoNeural | 豊かな韻律制御 |
| 一括処理/最安 | tencent | 101001 | 1 万文字あたり 0.75 RMB |
| 感情表現/方言 | baidu | 3 or 4 | 感情を含む音声合成、広東語 |
| 最高品質/音声クローン | minimax | female-shaonv | speech-2.8-hd、音声デザイン |
| 教育/プロ向け | xunfei | xiaoyan | MOS 4.8、500 以上の音声 |
| 男性ナレーション | edge | zh-CN-YunxiNeural | エネルギッシュな男性の声 |
| ドキュメンタリー | azure | zh-CN-YunyangNeural | 深みのあるプロフェッショナルな男性の声 |
| 子ども向けコンテンツ | edge | zh-CN-XiaomengNeural | 明るく若々しい女性の声 |
| コスト重視 | edge | zh-CN-XiaoxiaoNeural | 完全無料 |
| 英語、最高品質 | elevenlabs | 21m00Tcm4TlvDq8ikWAM (Rachel) | クラス最高水準の英語音声 |
| 英語、手軽/低価格 | openai | alloy | tts-1-hd、環境変数 1 つ |
| 英語、エンタープライズ | en-US-Neural2-F | 220 以上の音声、無料枠あり | |
| 多言語/指示対応 | qwen | Cherry | 10 言語、自然言語によるスタイル制御、既存の DASHSCOPE キーを再利用 |
| マーケティング/高速 | stepfun | cixingnansheng | OpenAI 互換、既存の STEP キーを再利用 |
| シンプル/感情表現 | zhipu | tongtong | 最小限の REST、既存の ZHIPUAI キーを再利用 |
全機能と音声データ
完全な機能マトリックス(コスト、チャンクあたりの最大文字数/時間、SSML、クローン作成方法とコスト、感情、方言、言語、ストリーミング、設定の難易度)と、バックエンドごとの音声リストは、data/providers.json の1か所にまとめられています。次の方法で確認できます。
- 比較ページ(
docs/providers.html) — 人が確認するのに最適です python3 scripts/tts.py schema backends --full— バックエンドごとの全機能フィールドpython3 scripts/tts.py schema voices— スタイルの説明付き音声プリセット一覧python3 scripts/tts.py --list— ターミナルで見やすい一覧
これらの表をほかの場所で管理しないでください — JSON から再生成してください。
音声クローン(clone コマンド)
参照音声からカスタム音声を作成し、名前を付けて保存すると、--voice を受け付ける場所ならどこでもその名前を使用できます。minimax(ローカルファイル可、音声は10秒〜5分、有料:グローバルサイトでは音声1つあたり約$1.5、中国サイトでは初回使用時に¥9.9。新しいクローンは最初の実際の音声合成が行われるまでは一時的なものです — 作成から7日以内[グローバルサイト]/48時間以内[中国サイト]に使用しないと MiniMax に削除されます。プレビューは使用に含まれません。初回使用後は永続します)と、cosyvoice(登録無料、音声は公開された HTTP(S) URL である必要があり、10〜20秒、1年間未使用の場合は音声の有効期限が切れます)に組み込まれています。
# MiniMax — local file, paid, must confirm with --yes
python3 scripts/tts.py clone create --platform minimax --audio my_voice.wav --name myvoice --yes
# CosyVoice — free, but --audio must be a public URL; --target-model must
# match the synthesis model (default: $COSYVOICE_MODEL or cosyvoice-v3-flash).
# v3.5-flash has NO preset voices — it needs a custom/cloned voice created with
# the same model (voice IDs are not interchangeable across models).
python3 scripts/tts.py clone create --platform cosyvoice --audio https://example.com/my.wav --name myvoice
# Manage
python3 scripts/tts.py clone list
python3 scripts/tts.py clone delete --name myvoice [--remote] # --remote: cosyvoice only
# Use it — the stored name resolves to the platform voice_id automatically
python3 scripts/tts.py "用我的声音说这句话" out.wav --platform minimax --voice myvoice
エージェントが必ず守るべきルール:
- MiniMax での作成は有料です — ユーザーの明示的な確認なしに
clone create --platform minimaxを実行しないでください(CLI では--yesが必須です)。 - クローンを作成できるのは、ユーザー本人の音声、または使用許可を得ている音声のみです — どちらのプラットフォームも、同意なしに第三者の音声をクローンすることを契約上禁止しています。
- 参照音声:雑音のない単一話者の音声が適しています。BGM は入れず、10〜20秒が理想的です。
- 名前付き音声は
~/.ttscn.jsonのcloned_voicesに保存されます。
その他のプラットフォーム(Doubao/Tencent/Baidu/Xunfei/Azure)は、各プラットフォームのコンソールからのクローン作成に対応しています。作成された音声 ID も、そのまま --voice として使用できます。
使用方法
基本的な使い方
# Default (Edge TTS, free, Xiaoxiao voice)
python3 scripts/tts.py "你好世界" output.wav
# Specific voice
python3 scripts/tts.py --voice zh-CN-YunxiNeural "欢迎收听今天的节目" welcome.wav
# Specific backend
python3 scripts/tts.py --platform doubao "今天天气真好" weather.wav
python3 scripts/tts.py --platform minimax "高品质语音合成" hq.wav
python3 scripts/tts.py --platform atlas "统一 API 多语言语音合成" atlas.wav
# Adjust speed
python3 scripts/tts.py --rate +15% "快速播报" fast.wav
python3 scripts/tts.py --rate -10% "慢速朗读" slow.wav
ファイルから
python3 scripts/tts.py --input script.txt output.wav
出力形式
# MP3 output (compressed, smaller file)
python3 scripts/tts.py --format mp3 "你好" hello.mp3
# JSON envelope + MP3 audio at the same time
python3 scripts/tts.py --json --format mp3 "你好" hello.mp3
プレビュー(ドライラン)
# Preview without making API call — no package installs needed
python3 scripts/tts.py --dry-run "这是一段测试文本"
オプション一覧
python3 scripts/tts.py --list
表現マーカー
入力テキストには、どのプラットフォームでもマーカーを含めることができます。対応している場合はネイティブ形式で処理され、対応していない場合はすべて削除されます(読み上げられることはありません)。チャンク分割処理では、[...] マーカーの途中で分割されることはありません。
| マーカー | 構文 | azure | minimax | その他すべてのプラットフォーム |
|---|---|---|---|---|
| 間 | [PAUSE:x] — x = 秒数、0.01-99.99 | <break time="xs"/>(SSML) | <#x#> | 削除 |
| 音声タグ | (laughs) (chuckle) (sighs) (breath) (inhale) (exhale) (coughs) | 削除 | MINIMAX_MODEL が speech-2.8 で始まる場合のみ音声化(それ以外は削除され、stderr に警告が出力されます) | 削除 |
python3 scripts/tts.py --platform azure \
"大家好。[PAUSE:0.8] 今天我们聊一个新话题。" out.wav
MINIMAX_MODEL=speech-2.8-hd python3 scripts/tts.py --platform minimax \
"这也太好笑了 (laughs) 好,我们继续。" out.wav
発音の上書き(--phonemes)
多音字(多音字)の読みを、単語からスペース区切りのピンインへの対応を定義する JSON 辞書で修正します。声調番号付き(hang2 zhang3)または声調記号付き(háng zhǎng)を指定できます。_ で始まるキーはコメントです。
{
"_comment": "pronunciation overrides for bank-themed script",
"行长": "hang2 zhang3",
"重庆": "chóng qìng"
}
python3 scripts/tts.py --platform azure --phonemes phonemes.json \
"行长在重庆开会。" out.wav
プラットフォームごとの処理:azure → SSML の <phoneme alphabet="sapi"> タグ、minimax → インラインのピンイン注釈(例:重(chong2)庆(qing4)。チャンク分割の前に適用されるため、注釈もチャンクの上限文字数に含まれます)。その他すべてのプラットフォームでは、このフラグは無視されます。
必要条件
# Core (always needed)
pip install edge-tts # For Edge (default, free)
# Optional backends — install only what you use
pip install dashscope # CosyVoice
pip install requests # Doubao, MiniMax, ElevenLabs, OpenAI, Google
pip install azure-cognitiveservices-speech # Azure
pip install tencentcloud-sdk-python-tts # Tencent Cloud
pip install baidu-aip chardet # Baidu AI
pip install websocket-client # Xunfei
システム要件:ffmpeg
環境変数
# Global defaults (optional)
export TTS_BACKEND="edge"
export TTS_VOICE="zh-CN-XiaoxiaoNeural"
export TTS_RATE="+5%"
export TTS_FORMAT="wav" # wav | mp3 | json (json = JSON envelope mode)
# Backend tuning (optional)
export MINIMAX_MODEL="speech-2.8-hd" # default; sound tags need speech-2.8-*
export MINIMAX_GROUP_ID="" # required by some MiniMax accounts
export COSYVOICE_MODEL="cosyvoice-v3-flash" # or cosyvoice-v3.5-flash (custom/cloned voices only)
# ByteDance Volcano Ark (Doubao)
# v3 (recommended, no appid): API key from the new console (Ark API Key page)
export VOLCENGINE_API_KEY="your_api_key"
export VOLCENGINE_RESOURCE_ID="seed-tts-2.0" # optional; seed-tts-1.0 / seed-icl-2.0 also valid
# v1 (legacy, appid + token): only when VOLCENGINE_API_KEY is unset
export VOLCENGINE_APPID="your_app_id"
export VOLCENGINE_ACCESS_TOKEN="your_token"
# Alibaba DashScope (CosyVoice + Qwen3-TTS)
export DASHSCOPE_API_KEY="your_api_key"
export QWEN_TTS_MODEL="qwen3-tts-flash" # or qwen3-tts-instruct-flash (instructions control)
export QWEN_TTS_LANGUAGE="" # optional: Chinese / English / ... ; unset = Auto
export QWEN_TTS_INSTRUCTIONS="" # optional: natural-language style, instruct models only
# StepFun (阶跃星辰)
export STEP_API_KEY="your_api_key"
export STEPFUN_TTS_MODEL="step-tts-mini" # or step-tts-2 / stepaudio-2.5-tts
# Zhipu (智谱)
export ZHIPUAI_API_KEY="your_api_key"
export ZHIPU_TTS_MODEL="glm-tts"
# Microsoft Azure
export AZURE_SPEECH_KEY="your_key"
export AZURE_SPEECH_REGION="eastasia"
export TTS_STYLE="gentle" # optional: mstts:express-as style; unset = plain prosody
# Tencent Cloud
export TENCENT_SECRET_ID="your_secret_id"
export TENCENT_SECRET_KEY="your_secret_key"
# Baidu AI
export BAIDU_APP_ID="your_app_id"
export BAIDU_API_KEY="your_api_key"
export BAIDU_SECRET_KEY="your_secret_key"
# MiniMax
export MINIMAX_API_KEY="your_api_key"
# iFlytek Xunfei
export XUNFEI_APP_ID="your_app_id"
export XUNFEI_API_KEY="your_api_key"
export XUNFEI_API_SECRET="your_api_secret"
# ElevenLabs (international)
export ELEVENLABS_API_KEY="your_api_key"
export ELEVENLABS_MODEL="eleven_multilingual_v2" # optional, this is the default
# OpenAI TTS (international)
export OPENAI_API_KEY="your_api_key"
export OPENAI_TTS_MODEL="tts-1-hd" # optional, this is the default
# Google Cloud TTS (international)
export GOOGLE_TTS_API_KEY="your_api_key"
export GOOGLE_TTS_LANGUAGE="en-US" # optional, auto-derived from voice name
# Atlas Cloud TTS (unified API)
export ATLASCLOUD_API_KEY="your_api_key"
export ATLASCLOUD_TTS_LANGUAGE="auto" # optional, this is the default
API キーの取得先:
- Volcano Ark:https://console.volcengine.com/ark/region:ark+cn-beijing/apikey
- DashScope:https://bailian.console.aliyun.com/
- Azure:https://portal.azure.com/
- Tencent Cloud:https://console.cloud.tencent.com/tts
- Baidu AI:https://console.bce.baidu.com/ai/#/ai/speech/overview
- MiniMax:https://platform.minimaxi.com
- Xunfei:https://www.xfyun.cn
- ElevenLabs:https://elevenlabs.io/app/settings/api-keys
- OpenAI:https://platform.openai.com/api-keys
- Google Cloud:https://console.cloud.google.com/apis/credentials
- Atlas Cloud:https://www.atlascloud.ai/console/api-keys
設定ファイル(任意)
個人用のデフォルト設定には ~/.ttscn.json を、プロジェクトディレクトリ内の設定には .ttscn.json を作成します。
{
"backend": "minimax",
"voice": "female-shaonv",
"rate": "+10%"
}
優先順位(高い順):
- CLI 引数(
--platform、--voice、--rate) - 環境変数(
TTS_BACKEND、TTS_VOICE、TTS_RATE) - プロジェクト設定(現在のディレクトリにある
.ttscn.json) - ユーザー設定(
~/.ttscn.json) - 組み込みのデフォルト設定
使用例
手軽なナレーション(無料、設定不要)
python3 scripts/tts.py \
"人工智能正在改变我们的生活方式,从智能助手到自动驾驶,技术革新无处不在。" \
ai_narration.wav
Douyin スタイルのショート動画の音声
python3 scripts/tts.py \
--platform doubao --voice BV001_streaming --rate +10% \
"家人们,今天给大家推荐一个超好用的神器!" \
douyin_style.wav
台本ファイルからオーディオブックを作成(CosyVoice)
python3 scripts/tts.py \
--platform cosyvoice --voice longxiaoxia_v3 \
--input chapter1.txt chapter1.wav
最低コストで一括生成(Tencent、インライン環境変数)
TENCENT_SECRET_ID="xxx" TENCENT_SECRET_KEY="xxx" \
python3 scripts/tts.py \
--platform tencent --voice 101001 \
--input course_script.txt course_audio.wav
感情表現を加えた高品質な音声(MiniMax)
MINIMAX_API_KEY="xxx" \
python3 scripts/tts.py \
--platform minimax --voice female-shaonv \
"这是一段充满感情的语音合成演示。" premium.wav
エージェントネイティブ CLI リファレンス
ttscn は agent-native-design の契約に準拠しています。 人間(読みやすいターミナル出力)、AI エージェント(stdout 上の構造化 JSON)、オーケストレーター(個別の終了コードと冪等性)に同時に対応します。
JSON モード
# Explicit JSON envelope mode (independent of --format)
python3 scripts/tts.py --json "你好" out.wav
python3 scripts/tts.py --json --format mp3 "你好" out.mp3
# --format json is a deprecated alias for --json (kept for compatibility)
# Auto-detect: pipe to jq → JSON automatically
python3 scripts/tts.py --list | jq .data.backends[0].name
# Error envelope always structured
python3 scripts/tts.py --json --platform doubao "test" out.wav
# → {"ok":false, "error":{"code":"auth_missing_env","message":"...","retryable":false,...}}
出力エンベロープ
// Success
{"ok":true, "data":{...}, "meta":{"version":"...","schema_version":"1.2.0","timestamp":"...","ms":123}}
// Error
{"ok":false, "error":{"code":"auth_missing_env","message":"set one of: VOLCENGINE_APPID+VOLCENGINE_ACCESS_TOKEN / VOLCENGINE_API_KEY","retryable":false,"field":"VOLCENGINE_APPID","backend":"doubao"}, "meta":{...}}
契約:meta.schema_version は成功時とエラー時のすべてのエンベロープに含まれる semver 文字列です。破壊的なエンベロープ変更がある場合のみ、メジャーバージョンが上がります。利用側は、実装時に対象としたスキーマのメジャーバージョンと一致することを確認し(例:video-podcast-maker はメジャーバージョン 1 を要求します)、一致しない場合は明確なエラーを返してください。schema_version がない場合は、契約導入前の ttscn リリースです。
単語境界(edge / azure / doubao / minimax / cosyvoice)
edge、azure、doubao、minimax、cosyvoice では、成功時のエンベロープに、data.word_boundaries の下にネイティブな単語レベルのタイムスタンプが含まれます。これらは出力ファイル内の絶対秒数で、昇順に並び、小数点以下3桁に丸められます。このキーは他のプラットフォームでは存在しません。また、プロバイダーからタイミング情報が返されない場合(少数言語の doubao 音声、minimax の字幕ダウンロード失敗、cosyvoice-v1、タイムスタンプに対応していない音声)には、doubao、minimax、cosyvoice でも存在しないことがあります。そのため、利用側では任意の項目として扱う必要があります。
{"ok":true, "data":{
"output_file": "out.wav",
"word_boundaries": [
{"text": "你好", "offset_sec": 0.1, "duration_sec": 0.45},
{"text": "世界", "offset_sec": 0.562, "duration_sec": 0.5}
]
}}
これらを字幕/SRT の生成や、別途強制アライメント処理を行わないビート同期アニメーションに使用できます。
終了コード
| コード | 意味 | エージェントの対応 |
|---|---|---|
| 0 | 成功 | data を解析して続行 |
| 1 | 内部エラー/実行時エラー | ユーザーに報告し、再試行しない |
| 2 | 検証エラー/修正可能なエラー(入力不正、パッケージ不足) | 入力を修正するかパッケージをインストールして再試行 |
| 3 | 認証エラー/認証情報不足 | ユーザーに API キーを求め、再試行しない |
| 4 | バックエンド API エラー | バックオフを適用して再試行 |
スキーマの確認
python3 scripts/tts.py schema backends # All 15 backends (compact by default)
python3 scripts/tts.py schema backends --full # All fields (22 per backend)
python3 scripts/tts.py schema backends.doubao # Single backend full detail
python3 scripts/tts.py schema voices # All voice presets per backend
python3 scripts/tts.py schema tags # Tag definitions
python3 scripts/tts.py schema version # Version + providers data freshness
# Field filtering for low-token-cost queries
python3 scripts/tts.py schema backends --fields name,cost,supports_clone,supports_ssml
冪等性
# Orchestrators: retried calls return cached result — no double-billing
python3 scripts/tts.py --idempotency-key "daily-podcast-2026-07-08" --input script.txt out.wav
# Cache at ~/.ttscn_idem/, 7-day TTL, SHA-256 keyed
キャッシュがヒットすると、保存済みの結果が data.cached: true とともに返されます。キャッシュ済みの output_file がディスク上に存在しなくなっている場合は、古い成功結果を返さず、再合成します。
エージェント互換性フラグ
# No-ops accepted for agent runtime compatibility (ttscn never prompts)
python3 scripts/tts.py --yes --no-input "text" out.wav